diff --git a/citygml4j-quality-ade/build.gradle b/citygml4j-quality-ade/build.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..48a55daa5c0ea5c7ff4954da1318231958d4287b
--- /dev/null
+++ b/citygml4j-quality-ade/build.gradle
@@ -0,0 +1,35 @@
+plugins {
+    id 'java-library'
+}
+
+group 'de.hft.stuttgart'
+version '0.1.4'
+
+java {
+    toolchain {
+        languageVersion = JavaLanguageVersion.of(11)
+    }
+    compileJava {
+        options.release = 8
+    }
+    sourceSets {
+        main.java.srcDir 'src-gen/main/java'
+    }
+}
+
+repositories {
+    mavenCentral()
+}
+
+dependencies {
+    api 'org.citygml4j:citygml4j:2.11.4'
+}
+
+dependencies {
+    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
+    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
+}
+
+test {
+    useJUnitPlatform()
+}
\ No newline at end of file
diff --git a/citygml4j-quality-ade/gradle/wrapper/gradle-wrapper.properties b/citygml4j-quality-ade/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000000000000000000000000000000000000..e750102e09269a4ac558e10a6612998e5ca4c0f2
--- /dev/null
+++ b/citygml4j-quality-ade/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/citygml4j-quality-ade/gradlew b/citygml4j-quality-ade/gradlew
new file mode 100644
index 0000000000000000000000000000000000000000..c53aefaa5fc898b78c7265ea99a3bdc09349a7d0
--- /dev/null
+++ b/citygml4j-quality-ade/gradlew
@@ -0,0 +1,234 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# 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
+#
+#      https://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.
+#
+
+##############################################################################
+#
+#   Gradle start up script for POSIX generated by Gradle.
+#
+#   Important for running:
+#
+#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+#       noncompliant, but you have some other compliant shell such as ksh or
+#       bash, then to run this script, type that shell name before the whole
+#       command line, like:
+#
+#           ksh Gradle
+#
+#       Busybox and similar reduced shells will NOT work, because this script
+#       requires all of these POSIX shell features:
+#         * functions;
+#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+#         * compound commands having a testable exit status, especially «case»;
+#         * various built-in commands including «command», «set», and «ulimit».
+#
+#   Important for patching:
+#
+#   (2) This script targets any POSIX shell, so it avoids extensions provided
+#       by Bash, Ksh, etc; in particular arrays are avoided.
+#
+#       The "traditional" practice of packing multiple parameters into a
+#       space-separated string is a well documented source of bugs and security
+#       problems, so this is (mostly) avoided, by progressively accumulating
+#       options in "$@", and eventually passing that to Java.
+#
+#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+#       see the in-line comments for details.
+#
+#       There are tweaks for specific operating systems such as AIX, CygWin,
+#       Darwin, MinGW, and NonStop.
+#
+#   (3) This script is generated from the Groovy template
+#       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+#       within the Gradle project.
+#
+#       You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
+    [ -h "$app_path" ]
+do
+    ls=$( ls -ld "$app_path" )
+    link=${ls#*' -> '}
+    case $link in             #(
+      /*)   app_path=$link ;; #(
+      *)    app_path=$APP_HOME$link ;;
+    esac
+done
+
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
+
+APP_NAME="Gradle"
+APP_BASE_NAME=${0##*/}
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+    echo "$*"
+} >&2
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in                #(
+  CYGWIN* )         cygwin=true  ;; #(
+  Darwin* )         darwin=true  ;; #(
+  MSYS* | MINGW* )  msys=true    ;; #(
+  NONSTOP* )        nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD=$JAVA_HOME/jre/sh/java
+    else
+        JAVACMD=$JAVA_HOME/bin/java
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD=java
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+    case $MAX_FD in #(
+      max*)
+        MAX_FD=$( ulimit -H -n ) ||
+            warn "Could not query maximum file descriptor limit"
+    esac
+    case $MAX_FD in  #(
+      '' | soft) :;; #(
+      *)
+        ulimit -n "$MAX_FD" ||
+            warn "Could not set maximum file descriptor limit to $MAX_FD"
+    esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+#   * args from the command line
+#   * the main class name
+#   * -classpath
+#   * -D...appname settings
+#   * --module-path (only if needed)
+#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+    JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    for arg do
+        if
+            case $arg in                                #(
+              -*)   false ;;                            # don't mess with options #(
+              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
+                    [ -e "$t" ] ;;                      #(
+              *)    false ;;
+            esac
+        then
+            arg=$( cygpath --path --ignore --mixed "$arg" )
+        fi
+        # Roll the args list around exactly as many times as the number of
+        # args, so each arg winds up back in the position where it started, but
+        # possibly modified.
+        #
+        # NB: a `for` loop captures its iteration list before it begins, so
+        # changing the positional parameters here affects neither the number of
+        # iterations, nor the values presented in `arg`.
+        shift                   # remove old arg
+        set -- "$@" "$arg"      # push replacement arg
+    done
+fi
+
+# Collect all arguments for the java command;
+#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+#     shell script including quotes and variable substitutions, so put them in
+#     double quotes to make sure that they get re-expanded; and
+#   * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+        "-Dorg.gradle.appname=$APP_BASE_NAME" \
+        -classpath "$CLASSPATH" \
+        org.gradle.wrapper.GradleWrapperMain \
+        "$@"
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+#   set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+        xargs -n1 |
+        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+        tr '\n' ' '
+    )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/citygml4j-quality-ade/gradlew.bat b/citygml4j-quality-ade/gradlew.bat
new file mode 100644
index 0000000000000000000000000000000000000000..107acd32c4e687021ef32db511e8a206129b88ec
--- /dev/null
+++ b/citygml4j-quality-ade/gradlew.bat
@@ -0,0 +1,89 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem      https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/citygml4j-quality-ade/pom.xml b/citygml4j-quality-ade/pom.xml
deleted file mode 100644
index 4c65c090ee5cdc7c243476c2c97a1108c03674f7..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/pom.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<groupId>de.hft.stuttgart</groupId>
-	<artifactId>citygml4j-quality-ade</artifactId>
-	<version>0.1.3</version>
-
-	<properties>
-		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<maven.compiler.source>1.8</maven.compiler.source>
-		<maven.compiler.target>1.8</maven.compiler.target>
-	</properties>
-
-	<dependencies>
-		<!-- https://mvnrepository.com/artifact/org.citygml4j/citygml4j -->
-		<dependency>
-			<groupId>org.citygml4j</groupId>
-			<artifactId>citygml4j</artifactId>
-			<version>2.10.2</version>
-		</dependency>
-		<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
-		<dependency>
-			<groupId>org.junit.jupiter</groupId>
-			<artifactId>junit-jupiter-api</artifactId>
-			<version>5.7.0</version>
-			<scope>test</scope>
-		</dependency>
-	</dependencies>
-</project>
\ No newline at end of file
diff --git a/citygml4j-quality-ade/resources/ade-xjc/README.txt b/citygml4j-quality-ade/resources/ade-xjc/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a7a034e3f801924abe2a1d8c7e954793db424b0e
--- /dev/null
+++ b/citygml4j-quality-ade/resources/ade-xjc/README.txt
@@ -0,0 +1,10 @@
+How to use
+==========
+
+1. Download the ade-xjc tool from here: https://github.com/citygml4j/ade-xjc/releases
+
+2. Unzip the contents of the ade-xjc download package to your local disk.
+
+3. Copy the contents of this folder to a new subfolder within the directory where you unzipped the
+ade-xjc tool. Afterwards, run the "run_ade-xjc" start script to create citygml4j classes from the
+the Quality ADE XML Schema file.
\ No newline at end of file
diff --git a/citygml4j-quality-ade/resources/ade-xjc/binding.xjb b/citygml4j-quality-ade/resources/ade-xjc/binding.xjb
new file mode 100644
index 0000000000000000000000000000000000000000..3e6413d326412f1dfbbb452949052b28f19381f2
--- /dev/null
+++ b/citygml4j-quality-ade/resources/ade-xjc/binding.xjb
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jaxb:bindings version="2.1" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"
+  xmlns:namespace="http://jaxb2-commons.dev.java.net/namespace-prefix">
+  
+  <jaxb:bindings schemaLocation="qualityAde.xsd" node="/xs:schema">
+    <jaxb:schemaBindings>
+      <jaxb:package name="de.hft.stuttgart.quality.model.jaxb"/>
+    </jaxb:schemaBindings>
+    <jaxb:bindings>
+      <namespace:prefix name="qual"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='validationResult']">
+      <jaxb:factoryMethod name="ValidationResultProperty"/>
+    </jaxb:bindings>
+    
+    <!-- use more readable names for error types -->
+    <jaxb:bindings node="xs:element[@name='GE_P_HOLE_OUTSIDE']">
+      <jaxb:factoryMethod name="PolygonHoleOutside"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_P_HOLE_OUTSIDEType']">
+      <jaxb:class name="PolygonHoleOutsideType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_P_HOLE_OUTSIDEPropertyType']">
+      <jaxb:class name="PolygonHoleOutsidePropertyType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='GE_P_INNER_RINGS_NESTED']">
+      <jaxb:factoryMethod name="PolygonInnerRingsNested"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_P_INNER_RINGS_NESTEDType']">
+      <jaxb:class name="PolygonInnerRingsNestedType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_P_INNER_RINGS_NESTEDPropertyType']">
+      <jaxb:class name="PolygonInnerRingsNestedPropertyType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='GE_P_INTERIOR_DISCONNECTED']">
+      <jaxb:factoryMethod name="PolygonInteriorDisconnected"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_P_INTERIOR_DISCONNECTEDType']">
+      <jaxb:class name="PolygonInteriorDisconnectedType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_P_INTERIOR_DISCONNECTEDPropertyType']">
+      <jaxb:class name="PolygonInteriorDisconnectedPropertyType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='GE_P_INTERSECTING_RINGS']">
+      <jaxb:factoryMethod name="PolygonIntersectingRings"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_P_INTERSECTING_RINGSType']">
+      <jaxb:class name="PolygonIntersectingRingsType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_P_INTERSECTING_RINGSPropertyType']">
+      <jaxb:class name="PolygonIntersectingRingsPropertyType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE']">
+      <jaxb:factoryMethod name="PolygonNonPlanarDistancePlane"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANEType']">
+      <jaxb:class name="PolygonNonPlanarDistancePlaneType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANEPropertyType']">
+      <jaxb:class name="PolygonNonPlanarDistancePlanePropertyType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION']">
+      <jaxb:factoryMethod name="PolygonNonPlanarNormalsDeviation"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATIONType']">
+      <jaxb:class name="PolygonNonPlanarNormalsDeviationType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATIONPropertyType']">
+      <jaxb:class name="PolygonNonPlanarNormalsDeviationPropertyType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='GE_P_ORIENTATION_RINGS_SAME']">
+      <jaxb:factoryMethod name="PolygonOrientationRingsSame"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_P_ORIENTATION_RINGS_SAMEType']">
+      <jaxb:class name="PolygonOrientationRingsSameType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_P_ORIENTATION_RINGS_SAMEPropertyType']">
+      <jaxb:class name="PolygonOrientationRingsSamePropertyType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='GE_R_CONSECUTIVE_POINTS_SAME']">
+      <jaxb:factoryMethod name="RingConsecutivePointsSame"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_R_CONSECUTIVE_POINTS_SAMEType']">
+      <jaxb:class name="RingConsecutivePointsSameType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_R_CONSECUTIVE_POINTS_SAMEPropertyType']">
+      <jaxb:class name="RingConsecutivePointsSamePropertyType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='GE_R_NOT_CLOSED']">
+      <jaxb:factoryMethod name="RingNotClosed"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_R_NOT_CLOSEDType']">
+      <jaxb:class name="RingNotClosedType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_R_NOT_CLOSEDPropertyType']">
+      <jaxb:class name="RingNotClosedPropertyType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='GE_R_SELF_INTERSECTION']">
+      <jaxb:factoryMethod name="RingSelfIntersection"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_R_SELF_INTERSECTIONType']">
+      <jaxb:class name="RingSelfIntersectionType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_R_SELF_INTERSECTIONPropertyType']">
+      <jaxb:class name="RingSelfIntersectionPropertyType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='GE_R_TOO_FEW_POINTS']">
+      <jaxb:factoryMethod name="RingTooFewPoints"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_R_TOO_FEW_POINTSType']">
+      <jaxb:class name="RingTooFewPointsType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_R_TOO_FEW_POINTSPropertyType']">
+      <jaxb:class name="RingTooFewPointsPropertyType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='GE_S_ALL_POLYGONS_WRONG_ORIENTATION']">
+      <jaxb:factoryMethod name="SolidAllPolygonsWrongOrientation"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_S_ALL_POLYGONS_WRONG_ORIENTATIONType']">
+      <jaxb:class name="SolidAllPolygonsWrongOrientationType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_S_ALL_POLYGONS_WRONG_ORIENTATIONPropertyType']">
+      <jaxb:class name="SolidAllPolygonsWrongOrientationPropertyType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='GE_S_MULTIPLE_CONNECTED_COMPONENTS']">
+      <jaxb:factoryMethod name="SolidMultipleConnectedComponents"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_S_MULTIPLE_CONNECTED_COMPONENTSType']">
+      <jaxb:class name="SolidMultipleConnectedComponentsType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_S_MULTIPLE_CONNECTED_COMPONENTSPropertyType']">
+      <jaxb:class name="SolidMultipleConnectedComponentsPropertyType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='GE_S_NON_MANIFOLD_EDGE']">
+      <jaxb:factoryMethod name="SolidNonManifoldEdge"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_S_NON_MANIFOLD_EDGEType']">
+      <jaxb:class name="SolidNonManifoldEdgeType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_S_NON_MANIFOLD_EDGEPropertyType']">
+      <jaxb:class name="SolidNonManifoldEdgePropertyType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='GE_S_NON_MANIFOLD_VERTEX']">
+      <jaxb:factoryMethod name="SolidNonManifoldVertex"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_S_NON_MANIFOLD_VERTEXType']">
+      <jaxb:class name="SolidNonManifoldVertexType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_S_NON_MANIFOLD_VERTEXPropertyType']">
+      <jaxb:class name="SolidNonManifoldVertexPropertyType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='GE_S_NOT_CLOSED']">
+      <jaxb:factoryMethod name="SolidNotClosed"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_S_NOT_CLOSEDType']">
+      <jaxb:class name="SolidNotClosedType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_S_NOT_CLOSEDPropertyType']">
+      <jaxb:class name="SolidNotClosedPropertyType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='GE_S_POLYGON_WRONG_ORIENTATION']">
+      <jaxb:factoryMethod name="SolidPolygonWrongOrientation"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_S_POLYGON_WRONG_ORIENTATIONType']">
+      <jaxb:class name="SolidPolygonWrongOrientationType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_S_POLYGON_WRONG_ORIENTATIONPropertyType']">
+      <jaxb:class name="SolidPolygonWrongOrientationPropertyType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='GE_S_SELF_INTERSECTION']">
+      <jaxb:factoryMethod name="SolidSelfIntersection"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_S_SELF_INTERSECTIONType']">
+      <jaxb:class name="SolidSelfIntersectionType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_S_SELF_INTERSECTIONPropertyType']">
+      <jaxb:class name="SolidSelfIntersectionPropertyType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='GE_S_TOO_FEW_POLYGONS']">
+      <jaxb:factoryMethod name="SolidTooFewPolygons"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_S_TOO_FEW_POLYGONSType']">
+      <jaxb:class name="SolidTooFewPolygonsType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='GE_S_TOO_FEW_POLYGONSPropertyType']">
+      <jaxb:class name="SolidTooFewPolygonsPropertyType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='SEM_ATTRIBUTE_MISSING']">
+      <jaxb:factoryMethod name="SemanticAttributeMissing"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='SEM_ATTRIBUTE_MISSINGType']">
+      <jaxb:class name="SemanticAttributeMissingType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='SEM_ATTRIBUTE_MISSINGPropertyType']">
+      <jaxb:class name="SemanticAttributeMissingPropertyType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:element[@name='SEM_ATTRIBUTE_WRONG_VALUE']">
+      <jaxb:factoryMethod name="SemanticAttributeWrongValue"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='SEM_ATTRIBUTE_WRONG_VALUEType']">
+      <jaxb:class name="SemanticAttributeWrongValueType"/>
+    </jaxb:bindings>
+    <jaxb:bindings node="xs:complexType[@name='SEM_ATTRIBUTE_WRONG_VALUEPropertyType']">
+      <jaxb:class name="SemanticAttributeWrongValuePropertyType"/>
+    </jaxb:bindings>
+  </jaxb:bindings>
+  
+</jaxb:bindings>
\ No newline at end of file
diff --git a/citygml4j-quality-ade/resources/ade-xjc/qualityAde.xsd b/citygml4j-quality-ade/resources/ade-xjc/qualityAde.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..6d09417d658c79a4eedd3c74c0049a692461562f
--- /dev/null
+++ b/citygml4j-quality-ade/resources/ade-xjc/qualityAde.xsd
@@ -0,0 +1,671 @@
+<?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4" elementFormDefault="qualified" targetNamespace="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4" version="0.1.4">
+  <import namespace="http://www.opengis.net/citygml/2.0" schemaLocation="../schemas/citygml/2.0.0/cityGMLBase.xsd"/>
+  <import namespace="http://www.opengis.net/citygml/building/2.0" schemaLocation="../schemas/citygml/2.0.0/building.xsd"/>
+  <import namespace="http://www.opengis.net/gml" schemaLocation="../schemas/gml/3.1.1/base/gml.xsd"/>
+  <!--XML Schema document created by ShapeChange - http://shapechange.net/-->
+  <element abstract="true" name="AbstractError" substitutionGroup="gml:_Object" type="qual:AbstractErrorType"/>
+  <complexType abstract="true" name="AbstractErrorType">
+    <sequence/>
+  </complexType>
+  <complexType name="AbstractErrorPropertyType">
+    <sequence>
+      <element ref="qual:AbstractError"/>
+    </sequence>
+  </complexType>
+  <element abstract="true" name="AbstractGeometryError" substitutionGroup="qual:AbstractError" type="qual:AbstractGeometryErrorType"/>
+  <complexType abstract="true" name="AbstractGeometryErrorType">
+    <complexContent>
+      <extension base="qual:AbstractErrorType">
+        <sequence/>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="AbstractGeometryErrorPropertyType">
+    <sequence>
+      <element ref="qual:AbstractGeometryError"/>
+    </sequence>
+  </complexType>
+  <element abstract="true" name="AbstractPolygonError" substitutionGroup="qual:AbstractGeometryError" type="qual:AbstractPolygonErrorType"/>
+  <complexType abstract="true" name="AbstractPolygonErrorType">
+    <complexContent>
+      <extension base="qual:AbstractGeometryErrorType">
+        <sequence>
+          <element name="polygonId" type="string"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="AbstractPolygonErrorPropertyType">
+    <sequence>
+      <element ref="qual:AbstractPolygonError"/>
+    </sequence>
+  </complexType>
+  <element abstract="true" name="AbstractRingError" substitutionGroup="qual:AbstractGeometryError" type="qual:AbstractRingErrorType"/>
+  <complexType abstract="true" name="AbstractRingErrorType">
+    <complexContent>
+      <extension base="qual:AbstractGeometryErrorType">
+        <sequence>
+          <element name="linearRingId" type="string"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="AbstractRingErrorPropertyType">
+    <sequence>
+      <element ref="qual:AbstractRingError"/>
+    </sequence>
+  </complexType>
+  <element abstract="true" name="AbstractSemanticError" substitutionGroup="qual:AbstractError" type="qual:AbstractSemanticErrorType"/>
+  <complexType abstract="true" name="AbstractSemanticErrorType">
+    <complexContent>
+      <extension base="qual:AbstractErrorType">
+        <sequence/>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="AbstractSemanticErrorPropertyType">
+    <sequence>
+      <element ref="qual:AbstractSemanticError"/>
+    </sequence>
+  </complexType>
+  <element abstract="true" name="AbstractSolidError" substitutionGroup="qual:AbstractGeometryError" type="qual:AbstractSolidErrorType"/>
+  <complexType abstract="true" name="AbstractSolidErrorType">
+    <complexContent>
+      <extension base="qual:AbstractGeometryErrorType">
+        <sequence>
+          <element name="geometryId" type="string"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="AbstractSolidErrorPropertyType">
+    <sequence>
+      <element ref="qual:AbstractSolidError"/>
+    </sequence>
+  </complexType>
+  <element name="Checking" substitutionGroup="gml:_Object" type="qual:CheckingType"/>
+  <complexType name="CheckingType">
+    <sequence>
+      <element name="featureType" type="qual:FeatureTypeType"/>
+    </sequence>
+  </complexType>
+  <complexType name="CheckingPropertyType">
+    <sequence>
+      <element ref="qual:Checking"/>
+    </sequence>
+  </complexType>
+  <element name="ComponentList" substitutionGroup="gml:_Object" type="qual:ComponentListType"/>
+  <complexType name="ComponentListType">
+    <sequence>
+      <element maxOccurs="unbounded" name="component" type="qual:PolygonIdListPropertyType"/>
+    </sequence>
+  </complexType>
+  <complexType name="ComponentListPropertyType">
+    <sequence>
+      <element ref="qual:ComponentList"/>
+    </sequence>
+  </complexType>
+  <element name="Edge" substitutionGroup="gml:_Object" type="qual:EdgeType"/>
+  <complexType name="EdgeType">
+    <sequence>
+      <element name="from" type="gml:DirectPositionType"/>
+      <element name="to" type="gml:DirectPositionType"/>
+    </sequence>
+  </complexType>
+  <complexType name="EdgePropertyType">
+    <sequence>
+      <element ref="qual:Edge"/>
+    </sequence>
+  </complexType>
+  <element name="EdgeList" substitutionGroup="gml:_Object" type="qual:EdgeListType"/>
+  <complexType name="EdgeListType">
+    <sequence>
+      <element maxOccurs="unbounded" name="edge" type="qual:EdgePropertyType"/>
+    </sequence>
+  </complexType>
+  <complexType name="EdgeListPropertyType">
+    <sequence>
+      <element ref="qual:EdgeList"/>
+    </sequence>
+  </complexType>
+  <element name="Error" substitutionGroup="gml:_Object" type="qual:ErrorType"/>
+  <complexType name="ErrorType">
+    <sequence>
+      <element name="name" type="qual:ErrorTypeType"/>
+    </sequence>
+  </complexType>
+  <complexType name="ErrorPropertyType">
+    <sequence>
+      <element ref="qual:Error"/>
+    </sequence>
+  </complexType>
+  <element name="ErrorStatistics" substitutionGroup="gml:_Object" type="qual:ErrorStatisticsType"/>
+  <complexType name="ErrorStatisticsType">
+    <sequence>
+      <element name="occurrences" type="integer"/>
+      <element maxOccurs="unbounded" minOccurs="0" name="error" type="qual:ErrorPropertyType"/>
+    </sequence>
+  </complexType>
+  <complexType name="ErrorStatisticsPropertyType">
+    <sequence>
+      <element ref="qual:ErrorStatistics"/>
+    </sequence>
+  </complexType>
+  <simpleType name="ErrorTypeType">
+    <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_P_NON_PLANAR_POLYGON_DISTANCE_PLANE"/>
+      <enumeration value="GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION"/>
+      <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>
+  <element name="FeatureStatistics" substitutionGroup="gml:_Object" type="qual:FeatureStatisticsType"/>
+  <complexType name="FeatureStatisticsType">
+    <sequence>
+      <element name="numChecked" type="integer"/>
+      <element name="numErrors" type="integer"/>
+    </sequence>
+  </complexType>
+  <complexType name="FeatureStatisticsPropertyType">
+    <sequence>
+      <element ref="qual:FeatureStatistics"/>
+    </sequence>
+  </complexType>
+  <simpleType name="FeatureTypeType">
+    <restriction base="string">
+      <enumeration value="BUILDING"/>
+      <enumeration value="TRANSPORTATION"/>
+      <enumeration value="VEGETATION"/>
+      <enumeration value="BRIDGE"/>
+      <enumeration value="WATER"/>
+      <enumeration value="LAND"/>
+    </restriction>
+  </simpleType>
+  <element name="Filter" substitutionGroup="gml:_Object" type="qual:FilterType"/>
+  <complexType name="FilterType">
+    <sequence>
+      <element maxOccurs="unbounded" minOccurs="0" name="checking" type="qual:CheckingPropertyType"/>
+    </sequence>
+  </complexType>
+  <complexType name="FilterPropertyType">
+    <sequence>
+      <element ref="qual:Filter"/>
+    </sequence>
+  </complexType>
+  <element name="GE_P_HOLE_OUTSIDE" substitutionGroup="qual:AbstractPolygonError" type="qual:GE_P_HOLE_OUTSIDEType"/>
+  <complexType name="GE_P_HOLE_OUTSIDEType">
+    <complexContent>
+      <extension base="qual:AbstractPolygonErrorType">
+        <sequence>
+          <element name="linearRingId" type="string"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_P_HOLE_OUTSIDEPropertyType">
+    <sequence>
+      <element ref="qual:GE_P_HOLE_OUTSIDE"/>
+    </sequence>
+  </complexType>
+  <element name="GE_P_INNER_RINGS_NESTED" substitutionGroup="qual:AbstractPolygonError" type="qual:GE_P_INNER_RINGS_NESTEDType"/>
+  <complexType name="GE_P_INNER_RINGS_NESTEDType">
+    <complexContent>
+      <extension base="qual:AbstractPolygonErrorType">
+        <sequence>
+          <element name="linearRingId1" type="string"/>
+          <element name="linearRingId2" type="string"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_P_INNER_RINGS_NESTEDPropertyType">
+    <sequence>
+      <element ref="qual:GE_P_INNER_RINGS_NESTED"/>
+    </sequence>
+  </complexType>
+  <element name="GE_P_INTERIOR_DISCONNECTED" substitutionGroup="qual:AbstractPolygonError" type="qual:GE_P_INTERIOR_DISCONNECTEDType"/>
+  <complexType name="GE_P_INTERIOR_DISCONNECTEDType">
+    <complexContent>
+      <extension base="qual:AbstractPolygonErrorType">
+        <sequence/>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_P_INTERIOR_DISCONNECTEDPropertyType">
+    <sequence>
+      <element ref="qual:GE_P_INTERIOR_DISCONNECTED"/>
+    </sequence>
+  </complexType>
+  <element name="GE_P_INTERSECTING_RINGS" substitutionGroup="qual:AbstractPolygonError" type="qual:GE_P_INTERSECTING_RINGSType"/>
+  <complexType name="GE_P_INTERSECTING_RINGSType">
+    <complexContent>
+      <extension base="qual:AbstractPolygonErrorType">
+        <sequence>
+          <element name="linearRingId1" type="string"/>
+          <element name="linearRingId2" type="string"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_P_INTERSECTING_RINGSPropertyType">
+    <sequence>
+      <element ref="qual:GE_P_INTERSECTING_RINGS"/>
+    </sequence>
+  </complexType>
+  <element name="GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE" substitutionGroup="qual:AbstractPolygonError" type="qual:GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANEType"/>
+  <complexType name="GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANEType">
+    <complexContent>
+      <extension base="qual:AbstractPolygonErrorType">
+        <sequence>
+          <element name="distance" type="gml:LengthType"/>
+          <element name="vertex" type="gml:DirectPositionType"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANEPropertyType">
+    <sequence>
+      <element ref="qual:GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE"/>
+    </sequence>
+  </complexType>
+  <element name="GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION" substitutionGroup="qual:AbstractPolygonError" type="qual:GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATIONType"/>
+  <complexType name="GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATIONType">
+    <complexContent>
+      <extension base="qual:AbstractPolygonErrorType">
+        <sequence>
+          <element name="deviation" type="gml:AngleType"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATIONPropertyType">
+    <sequence>
+      <element ref="qual:GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION"/>
+    </sequence>
+  </complexType>
+  <element name="GE_P_ORIENTATION_RINGS_SAME" substitutionGroup="qual:AbstractPolygonError" type="qual:GE_P_ORIENTATION_RINGS_SAMEType"/>
+  <complexType name="GE_P_ORIENTATION_RINGS_SAMEType">
+    <complexContent>
+      <extension base="qual:AbstractPolygonErrorType">
+        <sequence>
+          <element name="linearRingId" type="string"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_P_ORIENTATION_RINGS_SAMEPropertyType">
+    <sequence>
+      <element ref="qual:GE_P_ORIENTATION_RINGS_SAME"/>
+    </sequence>
+  </complexType>
+  <element name="GE_R_CONSECUTIVE_POINTS_SAME" substitutionGroup="qual:AbstractRingError" type="qual:GE_R_CONSECUTIVE_POINTS_SAMEType"/>
+  <complexType name="GE_R_CONSECUTIVE_POINTS_SAMEType">
+    <complexContent>
+      <extension base="qual:AbstractRingErrorType">
+        <sequence>
+          <element name="vertex1" type="gml:DirectPositionType"/>
+          <element name="vertex2" type="gml:DirectPositionType"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_R_CONSECUTIVE_POINTS_SAMEPropertyType">
+    <sequence>
+      <element ref="qual:GE_R_CONSECUTIVE_POINTS_SAME"/>
+    </sequence>
+  </complexType>
+  <element name="GE_R_NOT_CLOSED" substitutionGroup="qual:AbstractRingError" type="qual:GE_R_NOT_CLOSEDType"/>
+  <complexType name="GE_R_NOT_CLOSEDType">
+    <complexContent>
+      <extension base="qual:AbstractRingErrorType">
+        <sequence/>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_R_NOT_CLOSEDPropertyType">
+    <sequence>
+      <element ref="qual:GE_R_NOT_CLOSED"/>
+    </sequence>
+  </complexType>
+  <element name="GE_R_SELF_INTERSECTION" substitutionGroup="qual:AbstractRingError" type="qual:GE_R_SELF_INTERSECTIONType"/>
+  <complexType name="GE_R_SELF_INTERSECTIONType">
+    <complexContent>
+      <extension base="qual:AbstractRingErrorType">
+        <sequence>
+          <element name="type" type="string"/>
+          <element name="edge1" type="qual:EdgePropertyType"/>
+          <element name="edge2" type="qual:EdgePropertyType"/>
+          <element name="vertex" type="gml:DirectPositionType"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_R_SELF_INTERSECTIONPropertyType">
+    <sequence>
+      <element ref="qual:GE_R_SELF_INTERSECTION"/>
+    </sequence>
+  </complexType>
+  <element name="GE_R_TOO_FEW_POINTS" substitutionGroup="qual:AbstractRingError" type="qual:GE_R_TOO_FEW_POINTSType"/>
+  <complexType name="GE_R_TOO_FEW_POINTSType">
+    <complexContent>
+      <extension base="qual:AbstractRingErrorType">
+        <sequence/>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_R_TOO_FEW_POINTSPropertyType">
+    <sequence>
+      <element ref="qual:GE_R_TOO_FEW_POINTS"/>
+    </sequence>
+  </complexType>
+  <element name="GE_S_ALL_POLYGONS_WRONG_ORIENTATION" substitutionGroup="qual:AbstractSolidError" type="qual:GE_S_ALL_POLYGONS_WRONG_ORIENTATIONType"/>
+  <complexType name="GE_S_ALL_POLYGONS_WRONG_ORIENTATIONType">
+    <complexContent>
+      <extension base="qual:AbstractSolidErrorType">
+        <sequence/>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_S_ALL_POLYGONS_WRONG_ORIENTATIONPropertyType">
+    <sequence>
+      <element ref="qual:GE_S_ALL_POLYGONS_WRONG_ORIENTATION"/>
+    </sequence>
+  </complexType>
+  <element name="GE_S_MULTIPLE_CONNECTED_COMPONENTS" substitutionGroup="qual:AbstractSolidError" type="qual:GE_S_MULTIPLE_CONNECTED_COMPONENTSType"/>
+  <complexType name="GE_S_MULTIPLE_CONNECTED_COMPONENTSType">
+    <complexContent>
+      <extension base="qual:AbstractSolidErrorType">
+        <sequence>
+          <element maxOccurs="unbounded" name="components" type="qual:ComponentListPropertyType"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_S_MULTIPLE_CONNECTED_COMPONENTSPropertyType">
+    <sequence>
+      <element ref="qual:GE_S_MULTIPLE_CONNECTED_COMPONENTS"/>
+    </sequence>
+  </complexType>
+  <element name="GE_S_NON_MANIFOLD_EDGE" substitutionGroup="qual:AbstractSolidError" type="qual:GE_S_NON_MANIFOLD_EDGEType"/>
+  <complexType name="GE_S_NON_MANIFOLD_EDGEType">
+    <complexContent>
+      <extension base="qual:AbstractSolidErrorType">
+        <sequence>
+          <element name="edges" type="qual:EdgeListPropertyType"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_S_NON_MANIFOLD_EDGEPropertyType">
+    <sequence>
+      <element ref="qual:GE_S_NON_MANIFOLD_EDGE"/>
+    </sequence>
+  </complexType>
+  <element name="GE_S_NON_MANIFOLD_VERTEX" substitutionGroup="qual:AbstractSolidError" type="qual:GE_S_NON_MANIFOLD_VERTEXType"/>
+  <complexType name="GE_S_NON_MANIFOLD_VERTEXType">
+    <complexContent>
+      <extension base="qual:AbstractSolidErrorType">
+        <sequence>
+          <element name="vertex" type="gml:DirectPositionType"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_S_NON_MANIFOLD_VERTEXPropertyType">
+    <sequence>
+      <element ref="qual:GE_S_NON_MANIFOLD_VERTEX"/>
+    </sequence>
+  </complexType>
+  <element name="GE_S_NOT_CLOSED" substitutionGroup="qual:AbstractSolidError" type="qual:GE_S_NOT_CLOSEDType"/>
+  <complexType name="GE_S_NOT_CLOSEDType">
+    <complexContent>
+      <extension base="qual:AbstractSolidErrorType">
+        <sequence>
+          <element name="edges" type="qual:EdgeListPropertyType"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_S_NOT_CLOSEDPropertyType">
+    <sequence>
+      <element ref="qual:GE_S_NOT_CLOSED"/>
+    </sequence>
+  </complexType>
+  <element name="GE_S_POLYGON_WRONG_ORIENTATION" substitutionGroup="qual:AbstractSolidError" type="qual:GE_S_POLYGON_WRONG_ORIENTATIONType"/>
+  <complexType name="GE_S_POLYGON_WRONG_ORIENTATIONType">
+    <complexContent>
+      <extension base="qual:AbstractSolidErrorType">
+        <sequence>
+          <element name="edges" type="qual:EdgeListPropertyType"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_S_POLYGON_WRONG_ORIENTATIONPropertyType">
+    <sequence>
+      <element ref="qual:GE_S_POLYGON_WRONG_ORIENTATION"/>
+    </sequence>
+  </complexType>
+  <element name="GE_S_SELF_INTERSECTION" substitutionGroup="qual:AbstractSolidError" type="qual:GE_S_SELF_INTERSECTIONType"/>
+  <complexType name="GE_S_SELF_INTERSECTIONType">
+    <complexContent>
+      <extension base="qual:AbstractSolidErrorType">
+        <sequence>
+          <element name="polygonId1" type="string"/>
+          <element name="polygonId2" type="string"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_S_SELF_INTERSECTIONPropertyType">
+    <sequence>
+      <element ref="qual:GE_S_SELF_INTERSECTION"/>
+    </sequence>
+  </complexType>
+  <element name="GE_S_TOO_FEW_POLYGONS" substitutionGroup="qual:AbstractSolidError" type="qual:GE_S_TOO_FEW_POLYGONSType"/>
+  <complexType name="GE_S_TOO_FEW_POLYGONSType">
+    <complexContent>
+      <extension base="qual:AbstractSolidErrorType">
+        <sequence/>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_S_TOO_FEW_POLYGONSPropertyType">
+    <sequence>
+      <element ref="qual:GE_S_TOO_FEW_POLYGONS"/>
+    </sequence>
+  </complexType>
+  <element name="GlobalParameters" substitutionGroup="gml:_Object" type="qual:GlobalParametersType"/>
+  <complexType name="GlobalParametersType">
+    <sequence>
+      <element maxOccurs="unbounded" minOccurs="0" name="parameter" type="qual:ParameterPropertyType"/>
+    </sequence>
+  </complexType>
+  <complexType name="GlobalParametersPropertyType">
+    <sequence>
+      <element ref="qual:GlobalParameters"/>
+    </sequence>
+  </complexType>
+  <element name="Parameter" substitutionGroup="gml:_Object" type="qual:ParameterType"/>
+  <complexType name="ParameterType">
+    <sequence>
+      <element name="name" type="string"/>
+      <element name="uom" type="string"/>
+      <element name="value" type="string"/>
+    </sequence>
+  </complexType>
+  <complexType name="ParameterPropertyType">
+    <sequence>
+      <element ref="qual:Parameter"/>
+    </sequence>
+  </complexType>
+  <element name="PolygonIdList" substitutionGroup="gml:_Object" type="qual:PolygonIdListType"/>
+  <complexType name="PolygonIdListType">
+    <sequence>
+      <element name="polygonId" type="string"/>
+    </sequence>
+  </complexType>
+  <complexType name="PolygonIdListPropertyType">
+    <sequence>
+      <element ref="qual:PolygonIdList"/>
+    </sequence>
+  </complexType>
+  <element name="Requirement" substitutionGroup="gml:_Object" type="qual:RequirementType"/>
+  <complexType name="RequirementType">
+    <sequence>
+      <element name="enabled" type="boolean"/>
+      <element name="requirementType" type="qual:RequirementTypeType"/>
+      <element maxOccurs="unbounded" minOccurs="0" name="parameter" type="qual:ParameterPropertyType"/>
+    </sequence>
+  </complexType>
+  <complexType name="RequirementPropertyType">
+    <sequence>
+      <element ref="qual:Requirement"/>
+    </sequence>
+  </complexType>
+  <simpleType name="RequirementTypeType">
+    <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>
+  <simpleType name="ResultTypeType">
+    <restriction base="string">
+      <enumeration value="OK"/>
+      <enumeration value="ERROR"/>
+      <enumeration value="NOT_CHECKED"/>
+    </restriction>
+  </simpleType>
+  <element name="SEM_ATTRIBUTE_MISSING" substitutionGroup="qual:AbstractSemanticError" type="qual:SEM_ATTRIBUTE_MISSINGType"/>
+  <complexType name="SEM_ATTRIBUTE_MISSINGType">
+    <complexContent>
+      <extension base="qual:AbstractSemanticErrorType">
+        <sequence>
+          <element name="childId" type="string"/>
+          <element name="attributeName" type="string"/>
+          <element name="generic" type="boolean"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="SEM_ATTRIBUTE_MISSINGPropertyType">
+    <sequence>
+      <element ref="qual:SEM_ATTRIBUTE_MISSING"/>
+    </sequence>
+  </complexType>
+  <element name="SEM_ATTRIBUTE_WRONG_VALUE" substitutionGroup="qual:AbstractSemanticError" type="qual:SEM_ATTRIBUTE_WRONG_VALUEType"/>
+  <complexType name="SEM_ATTRIBUTE_WRONG_VALUEType">
+    <complexContent>
+      <extension base="qual:AbstractSemanticErrorType">
+        <sequence>
+          <element name="childId" type="string"/>
+          <element name="attributeName" type="string"/>
+          <element name="generic" type="boolean"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="SEM_ATTRIBUTE_WRONG_VALUEPropertyType">
+    <sequence>
+      <element ref="qual:SEM_ATTRIBUTE_WRONG_VALUE"/>
+    </sequence>
+  </complexType>
+  <element name="Statistics" substitutionGroup="gml:_Object" type="qual:StatisticsType"/>
+  <complexType name="StatisticsType">
+    <sequence>
+      <element name="numErrorBuildings" type="qual:FeatureStatisticsPropertyType"/>
+      <element name="numErrorVegetation" type="qual:FeatureStatisticsPropertyType"/>
+      <element name="numErrorLandObjects" type="qual:FeatureStatisticsPropertyType"/>
+      <element name="numErrorBridgeObjects" type="qual:FeatureStatisticsPropertyType"/>
+      <element name="numErrorWaterObjects" type="qual:FeatureStatisticsPropertyType"/>
+      <element name="numErrorTransportation" type="qual:FeatureStatisticsPropertyType"/>
+      <element name="errorStatistics" type="qual:ErrorStatisticsPropertyType"/>
+    </sequence>
+  </complexType>
+  <complexType name="StatisticsPropertyType">
+    <sequence>
+      <element ref="qual:Statistics"/>
+    </sequence>
+  </complexType>
+  <element name="Validation" substitutionGroup="gml:_Feature" type="qual:ValidationType"/>
+  <complexType name="ValidationType">
+    <complexContent>
+      <extension base="gml:AbstractFeatureType">
+        <sequence>
+          <element name="validationDate" type="dateTime"/>
+          <element name="validationSoftware" type="string"/>
+          <element minOccurs="0" name="statistics" type="qual:StatisticsPropertyType"/>
+          <element name="validationPlan" type="qual:ValidationPlanPropertyType"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="ValidationPropertyType">
+    <sequence minOccurs="0">
+      <element ref="qual:Validation"/>
+    </sequence>
+    <attributeGroup ref="gml:AssociationAttributeGroup"/>
+  </complexType>
+  <element name="ValidationPlan" substitutionGroup="gml:_Object" type="qual:ValidationPlanType"/>
+  <complexType name="ValidationPlanType">
+    <sequence>
+      <element name="globalParameters" type="qual:GlobalParametersPropertyType"/>
+      <element name="filter" type="qual:FilterPropertyType"/>
+      <element name="requirement" type="qual:RequirementPropertyType"/>
+    </sequence>
+  </complexType>
+  <complexType name="ValidationPlanPropertyType">
+    <sequence>
+      <element ref="qual:ValidationPlan"/>
+    </sequence>
+  </complexType>
+  <element name="ValidationResult" substitutionGroup="gml:_Object" type="qual:ValidationResultType"/>
+  <complexType name="ValidationResultType">
+    <sequence>
+      <element name="validationPlanID" type="qual:ValidationPropertyType"/>
+      <element maxOccurs="unbounded" minOccurs="0" name="error" type="qual:AbstractErrorPropertyType"/>
+      <element name="resultType" type="qual:ResultTypeType"/>
+    </sequence>
+  </complexType>
+  <complexType name="ValidationResultPropertyType">
+    <sequence>
+      <element ref="qual:ValidationResult"/>
+    </sequence>
+  </complexType>
+  <element name="validationResult" substitutionGroup="core:_GenericApplicationPropertyOfCityObject" type="qual:ValidationResultPropertyType"/>
+</schema>
diff --git a/citygml4j-quality-ade/resources/ade-xjc/run_ade-xjc b/citygml4j-quality-ade/resources/ade-xjc/run_ade-xjc
new file mode 100644
index 0000000000000000000000000000000000000000..a2d372deddf7a5222736052a399b0ed7e81a7a26
--- /dev/null
+++ b/citygml4j-quality-ade/resources/ade-xjc/run_ade-xjc
@@ -0,0 +1,14 @@
+#!/usr/bin/env sh
+
+#######################################################
+##
+##  UN*X start script for converting the Quality ADE
+##
+#######################################################
+
+OUTPUT="src-gen"
+BINDING="binding.xjb"
+SCHEMA="qualityAde.xsd"
+PLUGINS="-Xnamespace-prefix"
+
+exec ../ade-xjc $PLUGINS -clean -output $OUTPUT -binding $BINDING $SCHEMA
\ No newline at end of file
diff --git a/citygml4j-quality-ade/resources/ade-xjc/run_ade-xjc.bat b/citygml4j-quality-ade/resources/ade-xjc/run_ade-xjc.bat
new file mode 100644
index 0000000000000000000000000000000000000000..4715c13802d7ca5095a424d1b7489a6ddbbc8582
--- /dev/null
+++ b/citygml4j-quality-ade/resources/ade-xjc/run_ade-xjc.bat
@@ -0,0 +1,13 @@
+@if "%DEBUG%" == "" @echo off
+@rem #######################################################
+@rem
+@rem  Windows start script for converting the Quality ADE
+@rem
+@rem #######################################################
+
+set OUTPUT="src-gen"
+set BINDING="binding.xjb"
+set SCHEMA="qualityADE.xsd"
+set PLUGINS="-Xnamespace-prefix"
+
+call ..\ade-xjc.bat %PLUGINS% -clean -output %OUTPUT% -binding %BINDING% %SCHEMA%
\ No newline at end of file
diff --git a/citygml4j-quality-ade/settings.gradle b/citygml4j-quality-ade/settings.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..df7ff64bbeaef67cdbe025a2474736f74e1467d8
--- /dev/null
+++ b/citygml4j-quality-ade/settings.gradle
@@ -0,0 +1 @@
+rootProject.name = 'citygml4j-quality-ade'
\ No newline at end of file
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractErrorPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractErrorPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..6c58f374b8f849b1f33915b00905eee8b11afe0b
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractErrorPropertyType.java
@@ -0,0 +1,126 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElementRef;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für AbstractErrorPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="AbstractErrorPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractError"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "AbstractErrorPropertyType", propOrder = {
+    "abstractError"
+})
+public class AbstractErrorPropertyType {
+
+    @XmlElementRef(name = "AbstractError", namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", type = JAXBElement.class)
+    protected JAXBElement<? extends AbstractErrorType> abstractError;
+
+    /**
+     * Ruft den Wert der abstractError-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link JAXBElement }{@code <}{@link RingConsecutivePointsSameType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link RingNotClosedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link RingTooFewPointsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link RingSelfIntersectionType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractRingErrorType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonNonPlanarDistancePlaneType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonNonPlanarNormalsDeviationType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonInnerRingsNestedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonIntersectingRingsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonHoleOutsideType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonOrientationRingsSameType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonInteriorDisconnectedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractPolygonErrorType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidAllPolygonsWrongOrientationType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidNonManifoldVertexType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidMultipleConnectedComponentsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidPolygonWrongOrientationType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidTooFewPolygonsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidNonManifoldEdgeType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidSelfIntersectionType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidNotClosedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractSolidErrorType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractGeometryErrorType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SemanticAttributeMissingType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SemanticAttributeWrongValueType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractSemanticErrorType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractErrorType }{@code >}
+     *     
+     */
+    public JAXBElement<? extends AbstractErrorType> getAbstractError() {
+        return abstractError;
+    }
+
+    /**
+     * Legt den Wert der abstractError-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link JAXBElement }{@code <}{@link RingConsecutivePointsSameType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link RingNotClosedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link RingTooFewPointsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link RingSelfIntersectionType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractRingErrorType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonNonPlanarDistancePlaneType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonNonPlanarNormalsDeviationType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonInnerRingsNestedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonIntersectingRingsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonHoleOutsideType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonOrientationRingsSameType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonInteriorDisconnectedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractPolygonErrorType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidAllPolygonsWrongOrientationType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidNonManifoldVertexType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidMultipleConnectedComponentsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidPolygonWrongOrientationType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidTooFewPolygonsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidNonManifoldEdgeType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidSelfIntersectionType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidNotClosedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractSolidErrorType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractGeometryErrorType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SemanticAttributeMissingType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SemanticAttributeWrongValueType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractSemanticErrorType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractErrorType }{@code >}
+     *     
+     */
+    public void setAbstractError(JAXBElement<? extends AbstractErrorType> value) {
+        this.abstractError = value;
+    }
+
+    public boolean isSetAbstractError() {
+        return (this.abstractError!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractErrorType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractErrorType.java
new file mode 100644
index 0000000000000000000000000000000000000000..a6273a8eebe998d7aa839288ff6333e1763d22dd
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractErrorType.java
@@ -0,0 +1,44 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlSeeAlso;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für AbstractErrorType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="AbstractErrorType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "AbstractErrorType")
+@XmlSeeAlso({
+    AbstractGeometryErrorType.class,
+    AbstractSemanticErrorType.class
+})
+public abstract class AbstractErrorType {
+
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractGeometryErrorPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractGeometryErrorPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..1d3a97587862facde89e42b76cf70a8e0e940564
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractGeometryErrorPropertyType.java
@@ -0,0 +1,118 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElementRef;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für AbstractGeometryErrorPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="AbstractGeometryErrorPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractGeometryError"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "AbstractGeometryErrorPropertyType", propOrder = {
+    "abstractGeometryError"
+})
+public class AbstractGeometryErrorPropertyType {
+
+    @XmlElementRef(name = "AbstractGeometryError", namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", type = JAXBElement.class)
+    protected JAXBElement<? extends AbstractGeometryErrorType> abstractGeometryError;
+
+    /**
+     * Ruft den Wert der abstractGeometryError-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link JAXBElement }{@code <}{@link RingConsecutivePointsSameType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link RingNotClosedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link RingTooFewPointsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link RingSelfIntersectionType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractRingErrorType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonNonPlanarDistancePlaneType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonNonPlanarNormalsDeviationType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonInnerRingsNestedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonIntersectingRingsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonHoleOutsideType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonOrientationRingsSameType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonInteriorDisconnectedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractPolygonErrorType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidAllPolygonsWrongOrientationType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidNonManifoldVertexType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidMultipleConnectedComponentsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidPolygonWrongOrientationType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidTooFewPolygonsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidNonManifoldEdgeType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidSelfIntersectionType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidNotClosedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractSolidErrorType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractGeometryErrorType }{@code >}
+     *     
+     */
+    public JAXBElement<? extends AbstractGeometryErrorType> getAbstractGeometryError() {
+        return abstractGeometryError;
+    }
+
+    /**
+     * Legt den Wert der abstractGeometryError-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link JAXBElement }{@code <}{@link RingConsecutivePointsSameType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link RingNotClosedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link RingTooFewPointsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link RingSelfIntersectionType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractRingErrorType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonNonPlanarDistancePlaneType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonNonPlanarNormalsDeviationType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonInnerRingsNestedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonIntersectingRingsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonHoleOutsideType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonOrientationRingsSameType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonInteriorDisconnectedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractPolygonErrorType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidAllPolygonsWrongOrientationType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidNonManifoldVertexType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidMultipleConnectedComponentsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidPolygonWrongOrientationType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidTooFewPolygonsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidNonManifoldEdgeType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidSelfIntersectionType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidNotClosedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractSolidErrorType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractGeometryErrorType }{@code >}
+     *     
+     */
+    public void setAbstractGeometryError(JAXBElement<? extends AbstractGeometryErrorType> value) {
+        this.abstractGeometryError = value;
+    }
+
+    public boolean isSetAbstractGeometryError() {
+        return (this.abstractGeometryError!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractGeometryErrorType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractGeometryErrorType.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba1da5d3082de4dba9fc3ff7c7ef54e6b1c55997
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractGeometryErrorType.java
@@ -0,0 +1,47 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlSeeAlso;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für AbstractGeometryErrorType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="AbstractGeometryErrorType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractErrorType"&gt;
+ *       &lt;sequence&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "AbstractGeometryErrorType")
+@XmlSeeAlso({
+    AbstractPolygonErrorType.class,
+    AbstractRingErrorType.class,
+    AbstractSolidErrorType.class
+})
+public abstract class AbstractGeometryErrorType
+    extends AbstractErrorType
+{
+
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractPolygonErrorPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractPolygonErrorPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..9893088f190d4678c1caf28786e52b1206859356
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractPolygonErrorPropertyType.java
@@ -0,0 +1,88 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElementRef;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für AbstractPolygonErrorPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="AbstractPolygonErrorPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractPolygonError"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "AbstractPolygonErrorPropertyType", propOrder = {
+    "abstractPolygonError"
+})
+public class AbstractPolygonErrorPropertyType {
+
+    @XmlElementRef(name = "AbstractPolygonError", namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", type = JAXBElement.class)
+    protected JAXBElement<? extends AbstractPolygonErrorType> abstractPolygonError;
+
+    /**
+     * Ruft den Wert der abstractPolygonError-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link JAXBElement }{@code <}{@link PolygonNonPlanarDistancePlaneType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonNonPlanarNormalsDeviationType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonInnerRingsNestedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonIntersectingRingsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonHoleOutsideType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonOrientationRingsSameType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonInteriorDisconnectedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractPolygonErrorType }{@code >}
+     *     
+     */
+    public JAXBElement<? extends AbstractPolygonErrorType> getAbstractPolygonError() {
+        return abstractPolygonError;
+    }
+
+    /**
+     * Legt den Wert der abstractPolygonError-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link JAXBElement }{@code <}{@link PolygonNonPlanarDistancePlaneType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonNonPlanarNormalsDeviationType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonInnerRingsNestedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonIntersectingRingsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonHoleOutsideType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonOrientationRingsSameType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link PolygonInteriorDisconnectedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractPolygonErrorType }{@code >}
+     *     
+     */
+    public void setAbstractPolygonError(JAXBElement<? extends AbstractPolygonErrorType> value) {
+        this.abstractPolygonError = value;
+    }
+
+    public boolean isSetAbstractPolygonError() {
+        return (this.abstractPolygonError!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractPolygonErrorType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractPolygonErrorType.java
new file mode 100644
index 0000000000000000000000000000000000000000..a20ec85ee4957893ac7cc66da8ad93f2ee20a83a
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractPolygonErrorType.java
@@ -0,0 +1,85 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSeeAlso;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für AbstractPolygonErrorType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="AbstractPolygonErrorType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractGeometryErrorType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="polygonId" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "AbstractPolygonErrorType", propOrder = {
+    "polygonId"
+})
+@XmlSeeAlso({
+    PolygonHoleOutsideType.class,
+    PolygonInnerRingsNestedType.class,
+    PolygonInteriorDisconnectedType.class,
+    PolygonIntersectingRingsType.class,
+    PolygonNonPlanarDistancePlaneType.class,
+    PolygonNonPlanarNormalsDeviationType.class,
+    PolygonOrientationRingsSameType.class
+})
+public abstract class AbstractPolygonErrorType
+    extends AbstractGeometryErrorType
+{
+
+    @XmlElement(required = true)
+    protected String polygonId;
+
+    /**
+     * Ruft den Wert der polygonId-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getPolygonId() {
+        return polygonId;
+    }
+
+    /**
+     * Legt den Wert der polygonId-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setPolygonId(String value) {
+        this.polygonId = value;
+    }
+
+    public boolean isSetPolygonId() {
+        return (this.polygonId!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractRingErrorPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractRingErrorPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..81b2464d652ae1d39523a2d1cc20503519ec19da
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractRingErrorPropertyType.java
@@ -0,0 +1,82 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElementRef;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für AbstractRingErrorPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="AbstractRingErrorPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractRingError"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "AbstractRingErrorPropertyType", propOrder = {
+    "abstractRingError"
+})
+public class AbstractRingErrorPropertyType {
+
+    @XmlElementRef(name = "AbstractRingError", namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", type = JAXBElement.class)
+    protected JAXBElement<? extends AbstractRingErrorType> abstractRingError;
+
+    /**
+     * Ruft den Wert der abstractRingError-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link JAXBElement }{@code <}{@link RingConsecutivePointsSameType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link RingNotClosedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link RingTooFewPointsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link RingSelfIntersectionType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractRingErrorType }{@code >}
+     *     
+     */
+    public JAXBElement<? extends AbstractRingErrorType> getAbstractRingError() {
+        return abstractRingError;
+    }
+
+    /**
+     * Legt den Wert der abstractRingError-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link JAXBElement }{@code <}{@link RingConsecutivePointsSameType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link RingNotClosedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link RingTooFewPointsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link RingSelfIntersectionType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractRingErrorType }{@code >}
+     *     
+     */
+    public void setAbstractRingError(JAXBElement<? extends AbstractRingErrorType> value) {
+        this.abstractRingError = value;
+    }
+
+    public boolean isSetAbstractRingError() {
+        return (this.abstractRingError!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractRingErrorType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractRingErrorType.java
new file mode 100644
index 0000000000000000000000000000000000000000..288e95688385ec07bacd2d65e0712497515b4ee3
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractRingErrorType.java
@@ -0,0 +1,82 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSeeAlso;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für AbstractRingErrorType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="AbstractRingErrorType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractGeometryErrorType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="linearRingId" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "AbstractRingErrorType", propOrder = {
+    "linearRingId"
+})
+@XmlSeeAlso({
+    RingConsecutivePointsSameType.class,
+    RingNotClosedType.class,
+    RingSelfIntersectionType.class,
+    RingTooFewPointsType.class
+})
+public abstract class AbstractRingErrorType
+    extends AbstractGeometryErrorType
+{
+
+    @XmlElement(required = true)
+    protected String linearRingId;
+
+    /**
+     * Ruft den Wert der linearRingId-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getLinearRingId() {
+        return linearRingId;
+    }
+
+    /**
+     * Legt den Wert der linearRingId-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setLinearRingId(String value) {
+        this.linearRingId = value;
+    }
+
+    public boolean isSetLinearRingId() {
+        return (this.linearRingId!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractSemanticErrorPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractSemanticErrorPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..6382a118ef395b79443f52cdbd251e33f706e3f2
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractSemanticErrorPropertyType.java
@@ -0,0 +1,78 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElementRef;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für AbstractSemanticErrorPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="AbstractSemanticErrorPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractSemanticError"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "AbstractSemanticErrorPropertyType", propOrder = {
+    "abstractSemanticError"
+})
+public class AbstractSemanticErrorPropertyType {
+
+    @XmlElementRef(name = "AbstractSemanticError", namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", type = JAXBElement.class)
+    protected JAXBElement<? extends AbstractSemanticErrorType> abstractSemanticError;
+
+    /**
+     * Ruft den Wert der abstractSemanticError-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link JAXBElement }{@code <}{@link SemanticAttributeMissingType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SemanticAttributeWrongValueType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractSemanticErrorType }{@code >}
+     *     
+     */
+    public JAXBElement<? extends AbstractSemanticErrorType> getAbstractSemanticError() {
+        return abstractSemanticError;
+    }
+
+    /**
+     * Legt den Wert der abstractSemanticError-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link JAXBElement }{@code <}{@link SemanticAttributeMissingType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SemanticAttributeWrongValueType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractSemanticErrorType }{@code >}
+     *     
+     */
+    public void setAbstractSemanticError(JAXBElement<? extends AbstractSemanticErrorType> value) {
+        this.abstractSemanticError = value;
+    }
+
+    public boolean isSetAbstractSemanticError() {
+        return (this.abstractSemanticError!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractSemanticErrorType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractSemanticErrorType.java
new file mode 100644
index 0000000000000000000000000000000000000000..95b57f664a219351e298377b9d2aa9ece19c2aec
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractSemanticErrorType.java
@@ -0,0 +1,46 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlSeeAlso;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für AbstractSemanticErrorType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="AbstractSemanticErrorType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractErrorType"&gt;
+ *       &lt;sequence&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "AbstractSemanticErrorType")
+@XmlSeeAlso({
+    SemanticAttributeMissingType.class,
+    SemanticAttributeWrongValueType.class
+})
+public abstract class AbstractSemanticErrorType
+    extends AbstractErrorType
+{
+
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractSolidErrorPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractSolidErrorPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..fd5fb152fb7e2d9e3f7fe5d2dcaa559228bd34f3
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractSolidErrorPropertyType.java
@@ -0,0 +1,90 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElementRef;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für AbstractSolidErrorPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="AbstractSolidErrorPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractSolidError"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "AbstractSolidErrorPropertyType", propOrder = {
+    "abstractSolidError"
+})
+public class AbstractSolidErrorPropertyType {
+
+    @XmlElementRef(name = "AbstractSolidError", namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", type = JAXBElement.class)
+    protected JAXBElement<? extends AbstractSolidErrorType> abstractSolidError;
+
+    /**
+     * Ruft den Wert der abstractSolidError-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link JAXBElement }{@code <}{@link SolidAllPolygonsWrongOrientationType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidNonManifoldVertexType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidMultipleConnectedComponentsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidPolygonWrongOrientationType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidTooFewPolygonsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidNonManifoldEdgeType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidSelfIntersectionType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidNotClosedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractSolidErrorType }{@code >}
+     *     
+     */
+    public JAXBElement<? extends AbstractSolidErrorType> getAbstractSolidError() {
+        return abstractSolidError;
+    }
+
+    /**
+     * Legt den Wert der abstractSolidError-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link JAXBElement }{@code <}{@link SolidAllPolygonsWrongOrientationType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidNonManifoldVertexType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidMultipleConnectedComponentsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidPolygonWrongOrientationType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidTooFewPolygonsType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidNonManifoldEdgeType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidSelfIntersectionType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link SolidNotClosedType }{@code >}
+     *     {@link JAXBElement }{@code <}{@link AbstractSolidErrorType }{@code >}
+     *     
+     */
+    public void setAbstractSolidError(JAXBElement<? extends AbstractSolidErrorType> value) {
+        this.abstractSolidError = value;
+    }
+
+    public boolean isSetAbstractSolidError() {
+        return (this.abstractSolidError!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractSolidErrorType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractSolidErrorType.java
new file mode 100644
index 0000000000000000000000000000000000000000..8dc01375e37e7a150f7d64b8ce157720752a01c6
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/AbstractSolidErrorType.java
@@ -0,0 +1,86 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSeeAlso;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für AbstractSolidErrorType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="AbstractSolidErrorType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractGeometryErrorType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="geometryId" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "AbstractSolidErrorType", propOrder = {
+    "geometryId"
+})
+@XmlSeeAlso({
+    SolidAllPolygonsWrongOrientationType.class,
+    SolidMultipleConnectedComponentsType.class,
+    SolidNonManifoldEdgeType.class,
+    SolidNonManifoldVertexType.class,
+    SolidNotClosedType.class,
+    SolidPolygonWrongOrientationType.class,
+    SolidSelfIntersectionType.class,
+    SolidTooFewPolygonsType.class
+})
+public abstract class AbstractSolidErrorType
+    extends AbstractGeometryErrorType
+{
+
+    @XmlElement(required = true)
+    protected String geometryId;
+
+    /**
+     * Ruft den Wert der geometryId-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getGeometryId() {
+        return geometryId;
+    }
+
+    /**
+     * Legt den Wert der geometryId-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setGeometryId(String value) {
+        this.geometryId = value;
+    }
+
+    public boolean isSetGeometryId() {
+        return (this.geometryId!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/CheckingPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/CheckingPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..ffdd5e6149a3aae68963a92db408c2219ecfc6e4
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/CheckingPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für CheckingPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="CheckingPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}Checking"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "CheckingPropertyType", propOrder = {
+    "checking"
+})
+public class CheckingPropertyType {
+
+    @XmlElement(name = "Checking", required = true)
+    protected CheckingType checking;
+
+    /**
+     * Ruft den Wert der checking-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link CheckingType }
+     *     
+     */
+    public CheckingType getChecking() {
+        return checking;
+    }
+
+    /**
+     * Legt den Wert der checking-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link CheckingType }
+     *     
+     */
+    public void setChecking(CheckingType value) {
+        this.checking = value;
+    }
+
+    public boolean isSetChecking() {
+        return (this.checking!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/CheckingType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/CheckingType.java
new file mode 100644
index 0000000000000000000000000000000000000000..3d17587cbb48196d5db31b85105733c1f000a875
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/CheckingType.java
@@ -0,0 +1,75 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für CheckingType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="CheckingType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="featureType" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}FeatureTypeType"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "CheckingType", propOrder = {
+    "featureType"
+})
+public class CheckingType {
+
+    @XmlElement(required = true)
+    @XmlSchemaType(name = "string")
+    protected FeatureTypeType featureType;
+
+    /**
+     * Ruft den Wert der featureType-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link FeatureTypeType }
+     *     
+     */
+    public FeatureTypeType getFeatureType() {
+        return featureType;
+    }
+
+    /**
+     * Legt den Wert der featureType-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link FeatureTypeType }
+     *     
+     */
+    public void setFeatureType(FeatureTypeType value) {
+        this.featureType = value;
+    }
+
+    public boolean isSetFeatureType() {
+        return (this.featureType!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ComponentListPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ComponentListPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..a08f672efa62a43f32dbaa8890b27e8747d802a0
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ComponentListPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für ComponentListPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="ComponentListPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}ComponentList"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ComponentListPropertyType", propOrder = {
+    "componentList"
+})
+public class ComponentListPropertyType {
+
+    @XmlElement(name = "ComponentList", required = true)
+    protected ComponentListType componentList;
+
+    /**
+     * Ruft den Wert der componentList-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link ComponentListType }
+     *     
+     */
+    public ComponentListType getComponentList() {
+        return componentList;
+    }
+
+    /**
+     * Legt den Wert der componentList-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link ComponentListType }
+     *     
+     */
+    public void setComponentList(ComponentListType value) {
+        this.componentList = value;
+    }
+
+    public boolean isSetComponentList() {
+        return (this.componentList!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ComponentListType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ComponentListType.java
new file mode 100644
index 0000000000000000000000000000000000000000..65317a27103fe7fb945a0ac781dcd4eef0b470df
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ComponentListType.java
@@ -0,0 +1,84 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für ComponentListType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="ComponentListType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="component" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}PolygonIdListPropertyType" maxOccurs="unbounded"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ComponentListType", propOrder = {
+    "component"
+})
+public class ComponentListType {
+
+    @XmlElement(required = true)
+    protected List<PolygonIdListPropertyType> component;
+
+    /**
+     * Gets the value of the component property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the component property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getComponent().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link PolygonIdListPropertyType }
+     * 
+     * 
+     */
+    public List<PolygonIdListPropertyType> getComponent() {
+        if (component == null) {
+            component = new ArrayList<PolygonIdListPropertyType>();
+        }
+        return this.component;
+    }
+
+    public boolean isSetComponent() {
+        return ((this.component!= null)&&(!this.component.isEmpty()));
+    }
+
+    public void unsetComponent() {
+        this.component = null;
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/EdgeListPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/EdgeListPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..457781c37e6a0a14cfdca2a4c0526f94e7ccedd8
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/EdgeListPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für EdgeListPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="EdgeListPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}EdgeList"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "EdgeListPropertyType", propOrder = {
+    "edgeList"
+})
+public class EdgeListPropertyType {
+
+    @XmlElement(name = "EdgeList", required = true)
+    protected EdgeListType edgeList;
+
+    /**
+     * Ruft den Wert der edgeList-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link EdgeListType }
+     *     
+     */
+    public EdgeListType getEdgeList() {
+        return edgeList;
+    }
+
+    /**
+     * Legt den Wert der edgeList-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link EdgeListType }
+     *     
+     */
+    public void setEdgeList(EdgeListType value) {
+        this.edgeList = value;
+    }
+
+    public boolean isSetEdgeList() {
+        return (this.edgeList!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/EdgeListType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/EdgeListType.java
new file mode 100644
index 0000000000000000000000000000000000000000..ce06b8ae4ba6fea3260f128a2e2bcce750bbe02d
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/EdgeListType.java
@@ -0,0 +1,84 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für EdgeListType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="EdgeListType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="edge" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}EdgePropertyType" maxOccurs="unbounded"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "EdgeListType", propOrder = {
+    "edge"
+})
+public class EdgeListType {
+
+    @XmlElement(required = true)
+    protected List<EdgePropertyType> edge;
+
+    /**
+     * Gets the value of the edge property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the edge property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getEdge().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link EdgePropertyType }
+     * 
+     * 
+     */
+    public List<EdgePropertyType> getEdge() {
+        if (edge == null) {
+            edge = new ArrayList<EdgePropertyType>();
+        }
+        return this.edge;
+    }
+
+    public boolean isSetEdge() {
+        return ((this.edge!= null)&&(!this.edge.isEmpty()));
+    }
+
+    public void unsetEdge() {
+        this.edge = null;
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/EdgePropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/EdgePropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..b50124b0bc9e5922d1983ab60337d885875527db
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/EdgePropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für EdgePropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="EdgePropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}Edge"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "EdgePropertyType", propOrder = {
+    "edge"
+})
+public class EdgePropertyType {
+
+    @XmlElement(name = "Edge", required = true)
+    protected EdgeType edge;
+
+    /**
+     * Ruft den Wert der edge-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link EdgeType }
+     *     
+     */
+    public EdgeType getEdge() {
+        return edge;
+    }
+
+    /**
+     * Legt den Wert der edge-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link EdgeType }
+     *     
+     */
+    public void setEdge(EdgeType value) {
+        this.edge = value;
+    }
+
+    public boolean isSetEdge() {
+        return (this.edge!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/EdgeType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/EdgeType.java
new file mode 100644
index 0000000000000000000000000000000000000000..74404561b5344d6868a707fe35dcb27534edcf65
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/EdgeType.java
@@ -0,0 +1,106 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import net.opengis.gml.DirectPositionType;
+
+
+/**
+ * <p>Java-Klasse für EdgeType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="EdgeType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="from" type="{http://www.opengis.net/gml}DirectPositionType"/&gt;
+ *         &lt;element name="to" type="{http://www.opengis.net/gml}DirectPositionType"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "EdgeType", propOrder = {
+    "from",
+    "to"
+})
+public class EdgeType {
+
+    @XmlElement(required = true)
+    protected DirectPositionType from;
+    @XmlElement(required = true)
+    protected DirectPositionType to;
+
+    /**
+     * Ruft den Wert der from-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link DirectPositionType }
+     *     
+     */
+    public DirectPositionType getFrom() {
+        return from;
+    }
+
+    /**
+     * Legt den Wert der from-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link DirectPositionType }
+     *     
+     */
+    public void setFrom(DirectPositionType value) {
+        this.from = value;
+    }
+
+    public boolean isSetFrom() {
+        return (this.from!= null);
+    }
+
+    /**
+     * Ruft den Wert der to-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link DirectPositionType }
+     *     
+     */
+    public DirectPositionType getTo() {
+        return to;
+    }
+
+    /**
+     * Legt den Wert der to-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link DirectPositionType }
+     *     
+     */
+    public void setTo(DirectPositionType value) {
+        this.to = value;
+    }
+
+    public boolean isSetTo() {
+        return (this.to!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..b13439d475b5a22d0e4a1fcbc5e11314fcb3ae22
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für ErrorPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="ErrorPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}Error"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ErrorPropertyType", propOrder = {
+    "error"
+})
+public class ErrorPropertyType {
+
+    @XmlElement(name = "Error", required = true)
+    protected ErrorType error;
+
+    /**
+     * Ruft den Wert der error-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link ErrorType }
+     *     
+     */
+    public ErrorType getError() {
+        return error;
+    }
+
+    /**
+     * Legt den Wert der error-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link ErrorType }
+     *     
+     */
+    public void setError(ErrorType value) {
+        this.error = value;
+    }
+
+    public boolean isSetError() {
+        return (this.error!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorStatisticsPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorStatisticsPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..0ce62482f393d61e79e537d631fb54cd6eff2714
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorStatisticsPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für ErrorStatisticsPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="ErrorStatisticsPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}ErrorStatistics"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ErrorStatisticsPropertyType", propOrder = {
+    "errorStatistics"
+})
+public class ErrorStatisticsPropertyType {
+
+    @XmlElement(name = "ErrorStatistics", required = true)
+    protected ErrorStatisticsType errorStatistics;
+
+    /**
+     * Ruft den Wert der errorStatistics-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link ErrorStatisticsType }
+     *     
+     */
+    public ErrorStatisticsType getErrorStatistics() {
+        return errorStatistics;
+    }
+
+    /**
+     * Legt den Wert der errorStatistics-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link ErrorStatisticsType }
+     *     
+     */
+    public void setErrorStatistics(ErrorStatisticsType value) {
+        this.errorStatistics = value;
+    }
+
+    public boolean isSetErrorStatistics() {
+        return (this.errorStatistics!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorStatisticsType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorStatisticsType.java
new file mode 100644
index 0000000000000000000000000000000000000000..a1c2f9b9e772a751923f0973714d85e2b275f3df
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorStatisticsType.java
@@ -0,0 +1,116 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für ErrorStatisticsType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="ErrorStatisticsType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="occurrences" type="{http://www.w3.org/2001/XMLSchema}integer"/&gt;
+ *         &lt;element name="error" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}ErrorPropertyType" maxOccurs="unbounded" minOccurs="0"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ErrorStatisticsType", propOrder = {
+    "occurrences",
+    "error"
+})
+public class ErrorStatisticsType {
+
+    @XmlElement(required = true)
+    protected BigInteger occurrences;
+    protected List<ErrorPropertyType> error;
+
+    /**
+     * Ruft den Wert der occurrences-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getOccurrences() {
+        return occurrences;
+    }
+
+    /**
+     * Legt den Wert der occurrences-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setOccurrences(BigInteger value) {
+        this.occurrences = value;
+    }
+
+    public boolean isSetOccurrences() {
+        return (this.occurrences!= null);
+    }
+
+    /**
+     * Gets the value of the error property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the error property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getError().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link ErrorPropertyType }
+     * 
+     * 
+     */
+    public List<ErrorPropertyType> getError() {
+        if (error == null) {
+            error = new ArrayList<ErrorPropertyType>();
+        }
+        return this.error;
+    }
+
+    public boolean isSetError() {
+        return ((this.error!= null)&&(!this.error.isEmpty()));
+    }
+
+    public void unsetError() {
+        this.error = null;
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorType.java
new file mode 100644
index 0000000000000000000000000000000000000000..2d7980ebf0f87bba01b67b687a0d12cc3e492d6d
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorType.java
@@ -0,0 +1,75 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für ErrorType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="ErrorType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="name" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}ErrorTypeType"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ErrorType", propOrder = {
+    "name"
+})
+public class ErrorType {
+
+    @XmlElement(required = true)
+    @XmlSchemaType(name = "string")
+    protected ErrorTypeType name;
+
+    /**
+     * Ruft den Wert der name-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link ErrorTypeType }
+     *     
+     */
+    public ErrorTypeType getName() {
+        return name;
+    }
+
+    /**
+     * Legt den Wert der name-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link ErrorTypeType }
+     *     
+     */
+    public void setName(ErrorTypeType value) {
+        this.name = value;
+    }
+
+    public boolean isSetName() {
+        return (this.name!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorTypeType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorTypeType.java
new file mode 100644
index 0000000000000000000000000000000000000000..e79180a02bb8f7a5619e23baacf155b81d867977
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorTypeType.java
@@ -0,0 +1,115 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für ErrorTypeType.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * <p>
+ * <pre>
+ * &lt;simpleType name="ErrorTypeType"&gt;
+ *   &lt;restriction base="{http://www.w3.org/2001/XMLSchema}string"&gt;
+ *     &lt;enumeration value="GE_R_TOO_FEW_POINTS"/&gt;
+ *     &lt;enumeration value="GE_R_NOT_CLOSED"/&gt;
+ *     &lt;enumeration value="GE_R_CONSECUTIVE_POINTS_SAME"/&gt;
+ *     &lt;enumeration value="GE_R_SELF_INTERSECTION"/&gt;
+ *     &lt;enumeration value="GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE"/&gt;
+ *     &lt;enumeration value="GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION"/&gt;
+ *     &lt;enumeration value="GE_P_INTERIOR_DISCONNECTED"/&gt;
+ *     &lt;enumeration value="GE_P_INTERSECTING_RINGS"/&gt;
+ *     &lt;enumeration value="GE_P_HOLE_OUTSIDE"/&gt;
+ *     &lt;enumeration value="GE_P_ORIENTATION_RINGS_SAME"/&gt;
+ *     &lt;enumeration value="GE_P_INNER_RINGS_NESTED"/&gt;
+ *     &lt;enumeration value="GE_S_TOO_FEW_POLYGONS"/&gt;
+ *     &lt;enumeration value="GE_S_NOT_CLOSED"/&gt;
+ *     &lt;enumeration value="GE_S_NON_MANIFOLD_EDGE"/&gt;
+ *     &lt;enumeration value="GE_S_POLYGON_WRONG_ORIENTATION"/&gt;
+ *     &lt;enumeration value="GE_S_ALL_POLYGONS_WRONG_ORIENTATION"/&gt;
+ *     &lt;enumeration value="GE_S_NON_MANIFOLD_VERTEX"/&gt;
+ *     &lt;enumeration value="GE_S_SELF_INTERSECTION"/&gt;
+ *     &lt;enumeration value="GE_S_MULTIPLE_CONNECTED_COMPONENTS"/&gt;
+ *     &lt;enumeration value="SE_ATTRIBUTE_WRONG_VALUE"/&gt;
+ *     &lt;enumeration value="SE_ATTRIBUTE_MISSING"/&gt;
+ *   &lt;/restriction&gt;
+ * &lt;/simpleType&gt;
+ * </pre>
+ * 
+ */
+@XmlType(name = "ErrorTypeType")
+@XmlEnum
+public enum ErrorTypeType {
+
+    @XmlEnumValue("GE_R_TOO_FEW_POINTS")
+    GE___R___TOO___FEW___POINTS("GE_R_TOO_FEW_POINTS"),
+    @XmlEnumValue("GE_R_NOT_CLOSED")
+    GE___R___NOT___CLOSED("GE_R_NOT_CLOSED"),
+    @XmlEnumValue("GE_R_CONSECUTIVE_POINTS_SAME")
+    GE___R___CONSECUTIVE___POINTS___SAME("GE_R_CONSECUTIVE_POINTS_SAME"),
+    @XmlEnumValue("GE_R_SELF_INTERSECTION")
+    GE___R___SELF___INTERSECTION("GE_R_SELF_INTERSECTION"),
+    @XmlEnumValue("GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE")
+    GE___P___NON___PLANAR___POLYGON___DISTANCE___PLANE("GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE"),
+    @XmlEnumValue("GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION")
+    GE___P___NON___PLANAR___POLYGON___NORMALS___DEVIATION("GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION"),
+    @XmlEnumValue("GE_P_INTERIOR_DISCONNECTED")
+    GE___P___INTERIOR___DISCONNECTED("GE_P_INTERIOR_DISCONNECTED"),
+    @XmlEnumValue("GE_P_INTERSECTING_RINGS")
+    GE___P___INTERSECTING___RINGS("GE_P_INTERSECTING_RINGS"),
+    @XmlEnumValue("GE_P_HOLE_OUTSIDE")
+    GE___P___HOLE___OUTSIDE("GE_P_HOLE_OUTSIDE"),
+    @XmlEnumValue("GE_P_ORIENTATION_RINGS_SAME")
+    GE___P___ORIENTATION___RINGS___SAME("GE_P_ORIENTATION_RINGS_SAME"),
+    @XmlEnumValue("GE_P_INNER_RINGS_NESTED")
+    GE___P___INNER___RINGS___NESTED("GE_P_INNER_RINGS_NESTED"),
+    @XmlEnumValue("GE_S_TOO_FEW_POLYGONS")
+    GE___S___TOO___FEW___POLYGONS("GE_S_TOO_FEW_POLYGONS"),
+    @XmlEnumValue("GE_S_NOT_CLOSED")
+    GE___S___NOT___CLOSED("GE_S_NOT_CLOSED"),
+    @XmlEnumValue("GE_S_NON_MANIFOLD_EDGE")
+    GE___S___NON___MANIFOLD___EDGE("GE_S_NON_MANIFOLD_EDGE"),
+    @XmlEnumValue("GE_S_POLYGON_WRONG_ORIENTATION")
+    GE___S___POLYGON___WRONG___ORIENTATION("GE_S_POLYGON_WRONG_ORIENTATION"),
+    @XmlEnumValue("GE_S_ALL_POLYGONS_WRONG_ORIENTATION")
+    GE___S___ALL___POLYGONS___WRONG___ORIENTATION("GE_S_ALL_POLYGONS_WRONG_ORIENTATION"),
+    @XmlEnumValue("GE_S_NON_MANIFOLD_VERTEX")
+    GE___S___NON___MANIFOLD___VERTEX("GE_S_NON_MANIFOLD_VERTEX"),
+    @XmlEnumValue("GE_S_SELF_INTERSECTION")
+    GE___S___SELF___INTERSECTION("GE_S_SELF_INTERSECTION"),
+    @XmlEnumValue("GE_S_MULTIPLE_CONNECTED_COMPONENTS")
+    GE___S___MULTIPLE___CONNECTED___COMPONENTS("GE_S_MULTIPLE_CONNECTED_COMPONENTS"),
+    @XmlEnumValue("SE_ATTRIBUTE_WRONG_VALUE")
+    SE___ATTRIBUTE___WRONG___VALUE("SE_ATTRIBUTE_WRONG_VALUE"),
+    @XmlEnumValue("SE_ATTRIBUTE_MISSING")
+    SE___ATTRIBUTE___MISSING("SE_ATTRIBUTE_MISSING");
+    private final String value;
+
+    ErrorTypeType(String v) {
+        value = v;
+    }
+
+    public String value() {
+        return value;
+    }
+
+    public static ErrorTypeType fromValue(String v) {
+        for (ErrorTypeType c: ErrorTypeType.values()) {
+            if (c.value.equals(v)) {
+                return c;
+            }
+        }
+        throw new IllegalArgumentException(v);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/FeatureStatisticsPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/FeatureStatisticsPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..91db1aef727a49453c0e54074b765c6ffc814fe6
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/FeatureStatisticsPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für FeatureStatisticsPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="FeatureStatisticsPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}FeatureStatistics"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "FeatureStatisticsPropertyType", propOrder = {
+    "featureStatistics"
+})
+public class FeatureStatisticsPropertyType {
+
+    @XmlElement(name = "FeatureStatistics", required = true)
+    protected FeatureStatisticsType featureStatistics;
+
+    /**
+     * Ruft den Wert der featureStatistics-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link FeatureStatisticsType }
+     *     
+     */
+    public FeatureStatisticsType getFeatureStatistics() {
+        return featureStatistics;
+    }
+
+    /**
+     * Legt den Wert der featureStatistics-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link FeatureStatisticsType }
+     *     
+     */
+    public void setFeatureStatistics(FeatureStatisticsType value) {
+        this.featureStatistics = value;
+    }
+
+    public boolean isSetFeatureStatistics() {
+        return (this.featureStatistics!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/FeatureStatisticsType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/FeatureStatisticsType.java
new file mode 100644
index 0000000000000000000000000000000000000000..df747ffb8d907ec64672cfa9c15264fb8b16c28f
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/FeatureStatisticsType.java
@@ -0,0 +1,106 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import java.math.BigInteger;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für FeatureStatisticsType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="FeatureStatisticsType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="numChecked" type="{http://www.w3.org/2001/XMLSchema}integer"/&gt;
+ *         &lt;element name="numErrors" type="{http://www.w3.org/2001/XMLSchema}integer"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "FeatureStatisticsType", propOrder = {
+    "numChecked",
+    "numErrors"
+})
+public class FeatureStatisticsType {
+
+    @XmlElement(required = true)
+    protected BigInteger numChecked;
+    @XmlElement(required = true)
+    protected BigInteger numErrors;
+
+    /**
+     * Ruft den Wert der numChecked-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getNumChecked() {
+        return numChecked;
+    }
+
+    /**
+     * Legt den Wert der numChecked-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setNumChecked(BigInteger value) {
+        this.numChecked = value;
+    }
+
+    public boolean isSetNumChecked() {
+        return (this.numChecked!= null);
+    }
+
+    /**
+     * Ruft den Wert der numErrors-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link BigInteger }
+     *     
+     */
+    public BigInteger getNumErrors() {
+        return numErrors;
+    }
+
+    /**
+     * Legt den Wert der numErrors-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link BigInteger }
+     *     
+     */
+    public void setNumErrors(BigInteger value) {
+        this.numErrors = value;
+    }
+
+    public boolean isSetNumErrors() {
+        return (this.numErrors!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/FeatureTypeType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/FeatureTypeType.java
new file mode 100644
index 0000000000000000000000000000000000000000..487ccb7fdbc7d16229c662db94042d4bcfb01944
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/FeatureTypeType.java
@@ -0,0 +1,53 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für FeatureTypeType.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * <p>
+ * <pre>
+ * &lt;simpleType name="FeatureTypeType"&gt;
+ *   &lt;restriction base="{http://www.w3.org/2001/XMLSchema}string"&gt;
+ *     &lt;enumeration value="BUILDING"/&gt;
+ *     &lt;enumeration value="TRANSPORTATION"/&gt;
+ *     &lt;enumeration value="VEGETATION"/&gt;
+ *     &lt;enumeration value="BRIDGE"/&gt;
+ *     &lt;enumeration value="WATER"/&gt;
+ *     &lt;enumeration value="LAND"/&gt;
+ *   &lt;/restriction&gt;
+ * &lt;/simpleType&gt;
+ * </pre>
+ * 
+ */
+@XmlType(name = "FeatureTypeType")
+@XmlEnum
+public enum FeatureTypeType {
+
+    BUILDING,
+    TRANSPORTATION,
+    VEGETATION,
+    BRIDGE,
+    WATER,
+    LAND;
+
+    public String value() {
+        return name();
+    }
+
+    public static FeatureTypeType fromValue(String v) {
+        return valueOf(v);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/FilterPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/FilterPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e90307a0669ab6deecdf5f3d24962e60d6ffb50
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/FilterPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für FilterPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="FilterPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}Filter"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "FilterPropertyType", propOrder = {
+    "filter"
+})
+public class FilterPropertyType {
+
+    @XmlElement(name = "Filter", required = true)
+    protected FilterType filter;
+
+    /**
+     * Ruft den Wert der filter-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link FilterType }
+     *     
+     */
+    public FilterType getFilter() {
+        return filter;
+    }
+
+    /**
+     * Legt den Wert der filter-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link FilterType }
+     *     
+     */
+    public void setFilter(FilterType value) {
+        this.filter = value;
+    }
+
+    public boolean isSetFilter() {
+        return (this.filter!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/FilterType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/FilterType.java
new file mode 100644
index 0000000000000000000000000000000000000000..76970a02c7fca25211beee408f2364ce63a5dd1a
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/FilterType.java
@@ -0,0 +1,82 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für FilterType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="FilterType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="checking" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}CheckingPropertyType" maxOccurs="unbounded" minOccurs="0"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "FilterType", propOrder = {
+    "checking"
+})
+public class FilterType {
+
+    protected List<CheckingPropertyType> checking;
+
+    /**
+     * Gets the value of the checking property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the checking property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getChecking().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link CheckingPropertyType }
+     * 
+     * 
+     */
+    public List<CheckingPropertyType> getChecking() {
+        if (checking == null) {
+            checking = new ArrayList<CheckingPropertyType>();
+        }
+        return this.checking;
+    }
+
+    public boolean isSetChecking() {
+        return ((this.checking!= null)&&(!this.checking.isEmpty()));
+    }
+
+    public void unsetChecking() {
+        this.checking = null;
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/GlobalParametersPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/GlobalParametersPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..6256fdced792719fafabdb532f9a7a0782e4cf94
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/GlobalParametersPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GlobalParametersPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GlobalParametersPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GlobalParameters"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GlobalParametersPropertyType", propOrder = {
+    "globalParameters"
+})
+public class GlobalParametersPropertyType {
+
+    @XmlElement(name = "GlobalParameters", required = true)
+    protected GlobalParametersType globalParameters;
+
+    /**
+     * Ruft den Wert der globalParameters-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link GlobalParametersType }
+     *     
+     */
+    public GlobalParametersType getGlobalParameters() {
+        return globalParameters;
+    }
+
+    /**
+     * Legt den Wert der globalParameters-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link GlobalParametersType }
+     *     
+     */
+    public void setGlobalParameters(GlobalParametersType value) {
+        this.globalParameters = value;
+    }
+
+    public boolean isSetGlobalParameters() {
+        return (this.globalParameters!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/GlobalParametersType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/GlobalParametersType.java
new file mode 100644
index 0000000000000000000000000000000000000000..93b02434f7a0dd24f50013dd5b1d8a939d8e5e18
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/GlobalParametersType.java
@@ -0,0 +1,82 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GlobalParametersType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GlobalParametersType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="parameter" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}ParameterPropertyType" maxOccurs="unbounded" minOccurs="0"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GlobalParametersType", propOrder = {
+    "parameter"
+})
+public class GlobalParametersType {
+
+    protected List<ParameterPropertyType> parameter;
+
+    /**
+     * Gets the value of the parameter property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the parameter property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getParameter().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link ParameterPropertyType }
+     * 
+     * 
+     */
+    public List<ParameterPropertyType> getParameter() {
+        if (parameter == null) {
+            parameter = new ArrayList<ParameterPropertyType>();
+        }
+        return this.parameter;
+    }
+
+    public boolean isSetParameter() {
+        return ((this.parameter!= null)&&(!this.parameter.isEmpty()));
+    }
+
+    public void unsetParameter() {
+        this.parameter = null;
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ObjectFactory.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ObjectFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..8e2b647001b2fc5281dcaaa672209ca592f139e4
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ObjectFactory.java
@@ -0,0 +1,1298 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlElementDecl;
+import javax.xml.bind.annotation.XmlRegistry;
+import javax.xml.namespace.QName;
+
+
+/**
+ * This object contains factory methods for each 
+ * Java content interface and Java element interface 
+ * generated in the de.hft.stuttgart.quality.model.jaxb package. 
+ * <p>An ObjectFactory allows you to programatically 
+ * construct new instances of the Java representation 
+ * for XML content. The Java representation of XML 
+ * content can consist of schema derived interfaces 
+ * and classes representing the binding of schema 
+ * type definitions, element declarations and model 
+ * groups.  Factory methods for each of these are 
+ * provided in this class.
+ * 
+ */
+@XmlRegistry
+public class ObjectFactory {
+
+    private final static QName _AbstractError_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "AbstractError");
+    private final static QName _AbstractGeometryError_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "AbstractGeometryError");
+    private final static QName _AbstractPolygonError_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "AbstractPolygonError");
+    private final static QName _AbstractRingError_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "AbstractRingError");
+    private final static QName _AbstractSemanticError_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "AbstractSemanticError");
+    private final static QName _AbstractSolidError_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "AbstractSolidError");
+    private final static QName _Checking_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "Checking");
+    private final static QName _ComponentList_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "ComponentList");
+    private final static QName _Edge_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "Edge");
+    private final static QName _EdgeList_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "EdgeList");
+    private final static QName _Error_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "Error");
+    private final static QName _ErrorStatistics_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "ErrorStatistics");
+    private final static QName _FeatureStatistics_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "FeatureStatistics");
+    private final static QName _Filter_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "Filter");
+    private final static QName _PolygonHoleOutside_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "GE_P_HOLE_OUTSIDE");
+    private final static QName _PolygonInnerRingsNested_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "GE_P_INNER_RINGS_NESTED");
+    private final static QName _PolygonInteriorDisconnected_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "GE_P_INTERIOR_DISCONNECTED");
+    private final static QName _PolygonIntersectingRings_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "GE_P_INTERSECTING_RINGS");
+    private final static QName _PolygonNonPlanarDistancePlane_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE");
+    private final static QName _PolygonNonPlanarNormalsDeviation_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION");
+    private final static QName _PolygonOrientationRingsSame_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "GE_P_ORIENTATION_RINGS_SAME");
+    private final static QName _RingConsecutivePointsSame_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "GE_R_CONSECUTIVE_POINTS_SAME");
+    private final static QName _RingNotClosed_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "GE_R_NOT_CLOSED");
+    private final static QName _RingSelfIntersection_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "GE_R_SELF_INTERSECTION");
+    private final static QName _RingTooFewPoints_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "GE_R_TOO_FEW_POINTS");
+    private final static QName _SolidAllPolygonsWrongOrientation_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "GE_S_ALL_POLYGONS_WRONG_ORIENTATION");
+    private final static QName _SolidMultipleConnectedComponents_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "GE_S_MULTIPLE_CONNECTED_COMPONENTS");
+    private final static QName _SolidNonManifoldEdge_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "GE_S_NON_MANIFOLD_EDGE");
+    private final static QName _SolidNonManifoldVertex_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "GE_S_NON_MANIFOLD_VERTEX");
+    private final static QName _SolidNotClosed_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "GE_S_NOT_CLOSED");
+    private final static QName _SolidPolygonWrongOrientation_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "GE_S_POLYGON_WRONG_ORIENTATION");
+    private final static QName _SolidSelfIntersection_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "GE_S_SELF_INTERSECTION");
+    private final static QName _SolidTooFewPolygons_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "GE_S_TOO_FEW_POLYGONS");
+    private final static QName _GlobalParameters_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "GlobalParameters");
+    private final static QName _Parameter_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "Parameter");
+    private final static QName _PolygonIdList_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "PolygonIdList");
+    private final static QName _Requirement_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "Requirement");
+    private final static QName _SemanticAttributeMissing_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "SEM_ATTRIBUTE_MISSING");
+    private final static QName _SemanticAttributeWrongValue_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "SEM_ATTRIBUTE_WRONG_VALUE");
+    private final static QName _Statistics_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "Statistics");
+    private final static QName _Validation_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "Validation");
+    private final static QName _ValidationPlan_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "ValidationPlan");
+    private final static QName _ValidationResult_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "ValidationResult");
+    private final static QName _ValidationResultProperty_QNAME = new QName("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", "validationResult");
+
+    /**
+     * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: de.hft.stuttgart.quality.model.jaxb
+     * 
+     */
+    public ObjectFactory() {
+    }
+
+    /**
+     * Create an instance of {@link CheckingType }
+     * 
+     */
+    public CheckingType createCheckingType() {
+        return new CheckingType();
+    }
+
+    /**
+     * Create an instance of {@link ComponentListType }
+     * 
+     */
+    public ComponentListType createComponentListType() {
+        return new ComponentListType();
+    }
+
+    /**
+     * Create an instance of {@link EdgeType }
+     * 
+     */
+    public EdgeType createEdgeType() {
+        return new EdgeType();
+    }
+
+    /**
+     * Create an instance of {@link EdgeListType }
+     * 
+     */
+    public EdgeListType createEdgeListType() {
+        return new EdgeListType();
+    }
+
+    /**
+     * Create an instance of {@link ErrorType }
+     * 
+     */
+    public ErrorType createErrorType() {
+        return new ErrorType();
+    }
+
+    /**
+     * Create an instance of {@link ErrorStatisticsType }
+     * 
+     */
+    public ErrorStatisticsType createErrorStatisticsType() {
+        return new ErrorStatisticsType();
+    }
+
+    /**
+     * Create an instance of {@link FeatureStatisticsType }
+     * 
+     */
+    public FeatureStatisticsType createFeatureStatisticsType() {
+        return new FeatureStatisticsType();
+    }
+
+    /**
+     * Create an instance of {@link FilterType }
+     * 
+     */
+    public FilterType createFilterType() {
+        return new FilterType();
+    }
+
+    /**
+     * Create an instance of {@link PolygonHoleOutsideType }
+     * 
+     */
+    public PolygonHoleOutsideType createPolygonHoleOutsideType() {
+        return new PolygonHoleOutsideType();
+    }
+
+    /**
+     * Create an instance of {@link PolygonInnerRingsNestedType }
+     * 
+     */
+    public PolygonInnerRingsNestedType createPolygonInnerRingsNestedType() {
+        return new PolygonInnerRingsNestedType();
+    }
+
+    /**
+     * Create an instance of {@link PolygonInteriorDisconnectedType }
+     * 
+     */
+    public PolygonInteriorDisconnectedType createPolygonInteriorDisconnectedType() {
+        return new PolygonInteriorDisconnectedType();
+    }
+
+    /**
+     * Create an instance of {@link PolygonIntersectingRingsType }
+     * 
+     */
+    public PolygonIntersectingRingsType createPolygonIntersectingRingsType() {
+        return new PolygonIntersectingRingsType();
+    }
+
+    /**
+     * Create an instance of {@link PolygonNonPlanarDistancePlaneType }
+     * 
+     */
+    public PolygonNonPlanarDistancePlaneType createPolygonNonPlanarDistancePlaneType() {
+        return new PolygonNonPlanarDistancePlaneType();
+    }
+
+    /**
+     * Create an instance of {@link PolygonNonPlanarNormalsDeviationType }
+     * 
+     */
+    public PolygonNonPlanarNormalsDeviationType createPolygonNonPlanarNormalsDeviationType() {
+        return new PolygonNonPlanarNormalsDeviationType();
+    }
+
+    /**
+     * Create an instance of {@link PolygonOrientationRingsSameType }
+     * 
+     */
+    public PolygonOrientationRingsSameType createPolygonOrientationRingsSameType() {
+        return new PolygonOrientationRingsSameType();
+    }
+
+    /**
+     * Create an instance of {@link RingConsecutivePointsSameType }
+     * 
+     */
+    public RingConsecutivePointsSameType createRingConsecutivePointsSameType() {
+        return new RingConsecutivePointsSameType();
+    }
+
+    /**
+     * Create an instance of {@link RingNotClosedType }
+     * 
+     */
+    public RingNotClosedType createRingNotClosedType() {
+        return new RingNotClosedType();
+    }
+
+    /**
+     * Create an instance of {@link RingSelfIntersectionType }
+     * 
+     */
+    public RingSelfIntersectionType createRingSelfIntersectionType() {
+        return new RingSelfIntersectionType();
+    }
+
+    /**
+     * Create an instance of {@link RingTooFewPointsType }
+     * 
+     */
+    public RingTooFewPointsType createRingTooFewPointsType() {
+        return new RingTooFewPointsType();
+    }
+
+    /**
+     * Create an instance of {@link SolidAllPolygonsWrongOrientationType }
+     * 
+     */
+    public SolidAllPolygonsWrongOrientationType createSolidAllPolygonsWrongOrientationType() {
+        return new SolidAllPolygonsWrongOrientationType();
+    }
+
+    /**
+     * Create an instance of {@link SolidMultipleConnectedComponentsType }
+     * 
+     */
+    public SolidMultipleConnectedComponentsType createSolidMultipleConnectedComponentsType() {
+        return new SolidMultipleConnectedComponentsType();
+    }
+
+    /**
+     * Create an instance of {@link SolidNonManifoldEdgeType }
+     * 
+     */
+    public SolidNonManifoldEdgeType createSolidNonManifoldEdgeType() {
+        return new SolidNonManifoldEdgeType();
+    }
+
+    /**
+     * Create an instance of {@link SolidNonManifoldVertexType }
+     * 
+     */
+    public SolidNonManifoldVertexType createSolidNonManifoldVertexType() {
+        return new SolidNonManifoldVertexType();
+    }
+
+    /**
+     * Create an instance of {@link SolidNotClosedType }
+     * 
+     */
+    public SolidNotClosedType createSolidNotClosedType() {
+        return new SolidNotClosedType();
+    }
+
+    /**
+     * Create an instance of {@link SolidPolygonWrongOrientationType }
+     * 
+     */
+    public SolidPolygonWrongOrientationType createSolidPolygonWrongOrientationType() {
+        return new SolidPolygonWrongOrientationType();
+    }
+
+    /**
+     * Create an instance of {@link SolidSelfIntersectionType }
+     * 
+     */
+    public SolidSelfIntersectionType createSolidSelfIntersectionType() {
+        return new SolidSelfIntersectionType();
+    }
+
+    /**
+     * Create an instance of {@link SolidTooFewPolygonsType }
+     * 
+     */
+    public SolidTooFewPolygonsType createSolidTooFewPolygonsType() {
+        return new SolidTooFewPolygonsType();
+    }
+
+    /**
+     * Create an instance of {@link GlobalParametersType }
+     * 
+     */
+    public GlobalParametersType createGlobalParametersType() {
+        return new GlobalParametersType();
+    }
+
+    /**
+     * Create an instance of {@link ParameterType }
+     * 
+     */
+    public ParameterType createParameterType() {
+        return new ParameterType();
+    }
+
+    /**
+     * Create an instance of {@link PolygonIdListType }
+     * 
+     */
+    public PolygonIdListType createPolygonIdListType() {
+        return new PolygonIdListType();
+    }
+
+    /**
+     * Create an instance of {@link RequirementType }
+     * 
+     */
+    public RequirementType createRequirementType() {
+        return new RequirementType();
+    }
+
+    /**
+     * Create an instance of {@link SemanticAttributeMissingType }
+     * 
+     */
+    public SemanticAttributeMissingType createSemanticAttributeMissingType() {
+        return new SemanticAttributeMissingType();
+    }
+
+    /**
+     * Create an instance of {@link SemanticAttributeWrongValueType }
+     * 
+     */
+    public SemanticAttributeWrongValueType createSemanticAttributeWrongValueType() {
+        return new SemanticAttributeWrongValueType();
+    }
+
+    /**
+     * Create an instance of {@link StatisticsType }
+     * 
+     */
+    public StatisticsType createStatisticsType() {
+        return new StatisticsType();
+    }
+
+    /**
+     * Create an instance of {@link ValidationType }
+     * 
+     */
+    public ValidationType createValidationType() {
+        return new ValidationType();
+    }
+
+    /**
+     * Create an instance of {@link ValidationPlanType }
+     * 
+     */
+    public ValidationPlanType createValidationPlanType() {
+        return new ValidationPlanType();
+    }
+
+    /**
+     * Create an instance of {@link ValidationResultType }
+     * 
+     */
+    public ValidationResultType createValidationResultType() {
+        return new ValidationResultType();
+    }
+
+    /**
+     * Create an instance of {@link ValidationResultPropertyType }
+     * 
+     */
+    public ValidationResultPropertyType createValidationResultPropertyType() {
+        return new ValidationResultPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link AbstractErrorPropertyType }
+     * 
+     */
+    public AbstractErrorPropertyType createAbstractErrorPropertyType() {
+        return new AbstractErrorPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link AbstractGeometryErrorPropertyType }
+     * 
+     */
+    public AbstractGeometryErrorPropertyType createAbstractGeometryErrorPropertyType() {
+        return new AbstractGeometryErrorPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link AbstractPolygonErrorPropertyType }
+     * 
+     */
+    public AbstractPolygonErrorPropertyType createAbstractPolygonErrorPropertyType() {
+        return new AbstractPolygonErrorPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link AbstractRingErrorPropertyType }
+     * 
+     */
+    public AbstractRingErrorPropertyType createAbstractRingErrorPropertyType() {
+        return new AbstractRingErrorPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link AbstractSemanticErrorPropertyType }
+     * 
+     */
+    public AbstractSemanticErrorPropertyType createAbstractSemanticErrorPropertyType() {
+        return new AbstractSemanticErrorPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link AbstractSolidErrorPropertyType }
+     * 
+     */
+    public AbstractSolidErrorPropertyType createAbstractSolidErrorPropertyType() {
+        return new AbstractSolidErrorPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link CheckingPropertyType }
+     * 
+     */
+    public CheckingPropertyType createCheckingPropertyType() {
+        return new CheckingPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link ComponentListPropertyType }
+     * 
+     */
+    public ComponentListPropertyType createComponentListPropertyType() {
+        return new ComponentListPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link EdgePropertyType }
+     * 
+     */
+    public EdgePropertyType createEdgePropertyType() {
+        return new EdgePropertyType();
+    }
+
+    /**
+     * Create an instance of {@link EdgeListPropertyType }
+     * 
+     */
+    public EdgeListPropertyType createEdgeListPropertyType() {
+        return new EdgeListPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link ErrorPropertyType }
+     * 
+     */
+    public ErrorPropertyType createErrorPropertyType() {
+        return new ErrorPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link ErrorStatisticsPropertyType }
+     * 
+     */
+    public ErrorStatisticsPropertyType createErrorStatisticsPropertyType() {
+        return new ErrorStatisticsPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link FeatureStatisticsPropertyType }
+     * 
+     */
+    public FeatureStatisticsPropertyType createFeatureStatisticsPropertyType() {
+        return new FeatureStatisticsPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link FilterPropertyType }
+     * 
+     */
+    public FilterPropertyType createFilterPropertyType() {
+        return new FilterPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link PolygonHoleOutsidePropertyType }
+     * 
+     */
+    public PolygonHoleOutsidePropertyType createPolygonHoleOutsidePropertyType() {
+        return new PolygonHoleOutsidePropertyType();
+    }
+
+    /**
+     * Create an instance of {@link PolygonInnerRingsNestedPropertyType }
+     * 
+     */
+    public PolygonInnerRingsNestedPropertyType createPolygonInnerRingsNestedPropertyType() {
+        return new PolygonInnerRingsNestedPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link PolygonInteriorDisconnectedPropertyType }
+     * 
+     */
+    public PolygonInteriorDisconnectedPropertyType createPolygonInteriorDisconnectedPropertyType() {
+        return new PolygonInteriorDisconnectedPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link PolygonIntersectingRingsPropertyType }
+     * 
+     */
+    public PolygonIntersectingRingsPropertyType createPolygonIntersectingRingsPropertyType() {
+        return new PolygonIntersectingRingsPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link PolygonNonPlanarDistancePlanePropertyType }
+     * 
+     */
+    public PolygonNonPlanarDistancePlanePropertyType createPolygonNonPlanarDistancePlanePropertyType() {
+        return new PolygonNonPlanarDistancePlanePropertyType();
+    }
+
+    /**
+     * Create an instance of {@link PolygonNonPlanarNormalsDeviationPropertyType }
+     * 
+     */
+    public PolygonNonPlanarNormalsDeviationPropertyType createPolygonNonPlanarNormalsDeviationPropertyType() {
+        return new PolygonNonPlanarNormalsDeviationPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link PolygonOrientationRingsSamePropertyType }
+     * 
+     */
+    public PolygonOrientationRingsSamePropertyType createPolygonOrientationRingsSamePropertyType() {
+        return new PolygonOrientationRingsSamePropertyType();
+    }
+
+    /**
+     * Create an instance of {@link RingConsecutivePointsSamePropertyType }
+     * 
+     */
+    public RingConsecutivePointsSamePropertyType createRingConsecutivePointsSamePropertyType() {
+        return new RingConsecutivePointsSamePropertyType();
+    }
+
+    /**
+     * Create an instance of {@link RingNotClosedPropertyType }
+     * 
+     */
+    public RingNotClosedPropertyType createRingNotClosedPropertyType() {
+        return new RingNotClosedPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link RingSelfIntersectionPropertyType }
+     * 
+     */
+    public RingSelfIntersectionPropertyType createRingSelfIntersectionPropertyType() {
+        return new RingSelfIntersectionPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link RingTooFewPointsPropertyType }
+     * 
+     */
+    public RingTooFewPointsPropertyType createRingTooFewPointsPropertyType() {
+        return new RingTooFewPointsPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link SolidAllPolygonsWrongOrientationPropertyType }
+     * 
+     */
+    public SolidAllPolygonsWrongOrientationPropertyType createSolidAllPolygonsWrongOrientationPropertyType() {
+        return new SolidAllPolygonsWrongOrientationPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link SolidMultipleConnectedComponentsPropertyType }
+     * 
+     */
+    public SolidMultipleConnectedComponentsPropertyType createSolidMultipleConnectedComponentsPropertyType() {
+        return new SolidMultipleConnectedComponentsPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link SolidNonManifoldEdgePropertyType }
+     * 
+     */
+    public SolidNonManifoldEdgePropertyType createSolidNonManifoldEdgePropertyType() {
+        return new SolidNonManifoldEdgePropertyType();
+    }
+
+    /**
+     * Create an instance of {@link SolidNonManifoldVertexPropertyType }
+     * 
+     */
+    public SolidNonManifoldVertexPropertyType createSolidNonManifoldVertexPropertyType() {
+        return new SolidNonManifoldVertexPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link SolidNotClosedPropertyType }
+     * 
+     */
+    public SolidNotClosedPropertyType createSolidNotClosedPropertyType() {
+        return new SolidNotClosedPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link SolidPolygonWrongOrientationPropertyType }
+     * 
+     */
+    public SolidPolygonWrongOrientationPropertyType createSolidPolygonWrongOrientationPropertyType() {
+        return new SolidPolygonWrongOrientationPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link SolidSelfIntersectionPropertyType }
+     * 
+     */
+    public SolidSelfIntersectionPropertyType createSolidSelfIntersectionPropertyType() {
+        return new SolidSelfIntersectionPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link SolidTooFewPolygonsPropertyType }
+     * 
+     */
+    public SolidTooFewPolygonsPropertyType createSolidTooFewPolygonsPropertyType() {
+        return new SolidTooFewPolygonsPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link GlobalParametersPropertyType }
+     * 
+     */
+    public GlobalParametersPropertyType createGlobalParametersPropertyType() {
+        return new GlobalParametersPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link ParameterPropertyType }
+     * 
+     */
+    public ParameterPropertyType createParameterPropertyType() {
+        return new ParameterPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link PolygonIdListPropertyType }
+     * 
+     */
+    public PolygonIdListPropertyType createPolygonIdListPropertyType() {
+        return new PolygonIdListPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link RequirementPropertyType }
+     * 
+     */
+    public RequirementPropertyType createRequirementPropertyType() {
+        return new RequirementPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link SemanticAttributeMissingPropertyType }
+     * 
+     */
+    public SemanticAttributeMissingPropertyType createSemanticAttributeMissingPropertyType() {
+        return new SemanticAttributeMissingPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link SemanticAttributeWrongValuePropertyType }
+     * 
+     */
+    public SemanticAttributeWrongValuePropertyType createSemanticAttributeWrongValuePropertyType() {
+        return new SemanticAttributeWrongValuePropertyType();
+    }
+
+    /**
+     * Create an instance of {@link StatisticsPropertyType }
+     * 
+     */
+    public StatisticsPropertyType createStatisticsPropertyType() {
+        return new StatisticsPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link ValidationPropertyType }
+     * 
+     */
+    public ValidationPropertyType createValidationPropertyType() {
+        return new ValidationPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link ValidationPlanPropertyType }
+     * 
+     */
+    public ValidationPlanPropertyType createValidationPlanPropertyType() {
+        return new ValidationPlanPropertyType();
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link AbstractErrorType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link AbstractErrorType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "AbstractError", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Object")
+    public JAXBElement<AbstractErrorType> createAbstractError(AbstractErrorType value) {
+        return new JAXBElement<AbstractErrorType>(_AbstractError_QNAME, AbstractErrorType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link AbstractGeometryErrorType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link AbstractGeometryErrorType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "AbstractGeometryError", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractError")
+    public JAXBElement<AbstractGeometryErrorType> createAbstractGeometryError(AbstractGeometryErrorType value) {
+        return new JAXBElement<AbstractGeometryErrorType>(_AbstractGeometryError_QNAME, AbstractGeometryErrorType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link AbstractPolygonErrorType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link AbstractPolygonErrorType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "AbstractPolygonError", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractGeometryError")
+    public JAXBElement<AbstractPolygonErrorType> createAbstractPolygonError(AbstractPolygonErrorType value) {
+        return new JAXBElement<AbstractPolygonErrorType>(_AbstractPolygonError_QNAME, AbstractPolygonErrorType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link AbstractRingErrorType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link AbstractRingErrorType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "AbstractRingError", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractGeometryError")
+    public JAXBElement<AbstractRingErrorType> createAbstractRingError(AbstractRingErrorType value) {
+        return new JAXBElement<AbstractRingErrorType>(_AbstractRingError_QNAME, AbstractRingErrorType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link AbstractSemanticErrorType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link AbstractSemanticErrorType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "AbstractSemanticError", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractError")
+    public JAXBElement<AbstractSemanticErrorType> createAbstractSemanticError(AbstractSemanticErrorType value) {
+        return new JAXBElement<AbstractSemanticErrorType>(_AbstractSemanticError_QNAME, AbstractSemanticErrorType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link AbstractSolidErrorType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link AbstractSolidErrorType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "AbstractSolidError", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractGeometryError")
+    public JAXBElement<AbstractSolidErrorType> createAbstractSolidError(AbstractSolidErrorType value) {
+        return new JAXBElement<AbstractSolidErrorType>(_AbstractSolidError_QNAME, AbstractSolidErrorType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link CheckingType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link CheckingType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "Checking", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Object")
+    public JAXBElement<CheckingType> createChecking(CheckingType value) {
+        return new JAXBElement<CheckingType>(_Checking_QNAME, CheckingType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link ComponentListType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link ComponentListType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "ComponentList", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Object")
+    public JAXBElement<ComponentListType> createComponentList(ComponentListType value) {
+        return new JAXBElement<ComponentListType>(_ComponentList_QNAME, ComponentListType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link EdgeType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link EdgeType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "Edge", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Object")
+    public JAXBElement<EdgeType> createEdge(EdgeType value) {
+        return new JAXBElement<EdgeType>(_Edge_QNAME, EdgeType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link EdgeListType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link EdgeListType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "EdgeList", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Object")
+    public JAXBElement<EdgeListType> createEdgeList(EdgeListType value) {
+        return new JAXBElement<EdgeListType>(_EdgeList_QNAME, EdgeListType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link ErrorType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link ErrorType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "Error", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Object")
+    public JAXBElement<ErrorType> createError(ErrorType value) {
+        return new JAXBElement<ErrorType>(_Error_QNAME, ErrorType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link ErrorStatisticsType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link ErrorStatisticsType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "ErrorStatistics", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Object")
+    public JAXBElement<ErrorStatisticsType> createErrorStatistics(ErrorStatisticsType value) {
+        return new JAXBElement<ErrorStatisticsType>(_ErrorStatistics_QNAME, ErrorStatisticsType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link FeatureStatisticsType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link FeatureStatisticsType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "FeatureStatistics", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Object")
+    public JAXBElement<FeatureStatisticsType> createFeatureStatistics(FeatureStatisticsType value) {
+        return new JAXBElement<FeatureStatisticsType>(_FeatureStatistics_QNAME, FeatureStatisticsType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link FilterType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link FilterType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "Filter", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Object")
+    public JAXBElement<FilterType> createFilter(FilterType value) {
+        return new JAXBElement<FilterType>(_Filter_QNAME, FilterType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link PolygonHoleOutsideType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link PolygonHoleOutsideType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "GE_P_HOLE_OUTSIDE", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractPolygonError")
+    public JAXBElement<PolygonHoleOutsideType> createPolygonHoleOutside(PolygonHoleOutsideType value) {
+        return new JAXBElement<PolygonHoleOutsideType>(_PolygonHoleOutside_QNAME, PolygonHoleOutsideType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link PolygonInnerRingsNestedType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link PolygonInnerRingsNestedType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "GE_P_INNER_RINGS_NESTED", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractPolygonError")
+    public JAXBElement<PolygonInnerRingsNestedType> createPolygonInnerRingsNested(PolygonInnerRingsNestedType value) {
+        return new JAXBElement<PolygonInnerRingsNestedType>(_PolygonInnerRingsNested_QNAME, PolygonInnerRingsNestedType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link PolygonInteriorDisconnectedType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link PolygonInteriorDisconnectedType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "GE_P_INTERIOR_DISCONNECTED", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractPolygonError")
+    public JAXBElement<PolygonInteriorDisconnectedType> createPolygonInteriorDisconnected(PolygonInteriorDisconnectedType value) {
+        return new JAXBElement<PolygonInteriorDisconnectedType>(_PolygonInteriorDisconnected_QNAME, PolygonInteriorDisconnectedType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link PolygonIntersectingRingsType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link PolygonIntersectingRingsType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "GE_P_INTERSECTING_RINGS", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractPolygonError")
+    public JAXBElement<PolygonIntersectingRingsType> createPolygonIntersectingRings(PolygonIntersectingRingsType value) {
+        return new JAXBElement<PolygonIntersectingRingsType>(_PolygonIntersectingRings_QNAME, PolygonIntersectingRingsType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link PolygonNonPlanarDistancePlaneType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link PolygonNonPlanarDistancePlaneType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractPolygonError")
+    public JAXBElement<PolygonNonPlanarDistancePlaneType> createPolygonNonPlanarDistancePlane(PolygonNonPlanarDistancePlaneType value) {
+        return new JAXBElement<PolygonNonPlanarDistancePlaneType>(_PolygonNonPlanarDistancePlane_QNAME, PolygonNonPlanarDistancePlaneType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link PolygonNonPlanarNormalsDeviationType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link PolygonNonPlanarNormalsDeviationType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractPolygonError")
+    public JAXBElement<PolygonNonPlanarNormalsDeviationType> createPolygonNonPlanarNormalsDeviation(PolygonNonPlanarNormalsDeviationType value) {
+        return new JAXBElement<PolygonNonPlanarNormalsDeviationType>(_PolygonNonPlanarNormalsDeviation_QNAME, PolygonNonPlanarNormalsDeviationType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link PolygonOrientationRingsSameType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link PolygonOrientationRingsSameType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "GE_P_ORIENTATION_RINGS_SAME", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractPolygonError")
+    public JAXBElement<PolygonOrientationRingsSameType> createPolygonOrientationRingsSame(PolygonOrientationRingsSameType value) {
+        return new JAXBElement<PolygonOrientationRingsSameType>(_PolygonOrientationRingsSame_QNAME, PolygonOrientationRingsSameType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link RingConsecutivePointsSameType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link RingConsecutivePointsSameType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "GE_R_CONSECUTIVE_POINTS_SAME", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractRingError")
+    public JAXBElement<RingConsecutivePointsSameType> createRingConsecutivePointsSame(RingConsecutivePointsSameType value) {
+        return new JAXBElement<RingConsecutivePointsSameType>(_RingConsecutivePointsSame_QNAME, RingConsecutivePointsSameType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link RingNotClosedType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link RingNotClosedType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "GE_R_NOT_CLOSED", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractRingError")
+    public JAXBElement<RingNotClosedType> createRingNotClosed(RingNotClosedType value) {
+        return new JAXBElement<RingNotClosedType>(_RingNotClosed_QNAME, RingNotClosedType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link RingSelfIntersectionType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link RingSelfIntersectionType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "GE_R_SELF_INTERSECTION", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractRingError")
+    public JAXBElement<RingSelfIntersectionType> createRingSelfIntersection(RingSelfIntersectionType value) {
+        return new JAXBElement<RingSelfIntersectionType>(_RingSelfIntersection_QNAME, RingSelfIntersectionType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link RingTooFewPointsType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link RingTooFewPointsType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "GE_R_TOO_FEW_POINTS", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractRingError")
+    public JAXBElement<RingTooFewPointsType> createRingTooFewPoints(RingTooFewPointsType value) {
+        return new JAXBElement<RingTooFewPointsType>(_RingTooFewPoints_QNAME, RingTooFewPointsType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link SolidAllPolygonsWrongOrientationType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link SolidAllPolygonsWrongOrientationType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "GE_S_ALL_POLYGONS_WRONG_ORIENTATION", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractSolidError")
+    public JAXBElement<SolidAllPolygonsWrongOrientationType> createSolidAllPolygonsWrongOrientation(SolidAllPolygonsWrongOrientationType value) {
+        return new JAXBElement<SolidAllPolygonsWrongOrientationType>(_SolidAllPolygonsWrongOrientation_QNAME, SolidAllPolygonsWrongOrientationType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link SolidMultipleConnectedComponentsType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link SolidMultipleConnectedComponentsType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "GE_S_MULTIPLE_CONNECTED_COMPONENTS", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractSolidError")
+    public JAXBElement<SolidMultipleConnectedComponentsType> createSolidMultipleConnectedComponents(SolidMultipleConnectedComponentsType value) {
+        return new JAXBElement<SolidMultipleConnectedComponentsType>(_SolidMultipleConnectedComponents_QNAME, SolidMultipleConnectedComponentsType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link SolidNonManifoldEdgeType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link SolidNonManifoldEdgeType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "GE_S_NON_MANIFOLD_EDGE", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractSolidError")
+    public JAXBElement<SolidNonManifoldEdgeType> createSolidNonManifoldEdge(SolidNonManifoldEdgeType value) {
+        return new JAXBElement<SolidNonManifoldEdgeType>(_SolidNonManifoldEdge_QNAME, SolidNonManifoldEdgeType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link SolidNonManifoldVertexType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link SolidNonManifoldVertexType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "GE_S_NON_MANIFOLD_VERTEX", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractSolidError")
+    public JAXBElement<SolidNonManifoldVertexType> createSolidNonManifoldVertex(SolidNonManifoldVertexType value) {
+        return new JAXBElement<SolidNonManifoldVertexType>(_SolidNonManifoldVertex_QNAME, SolidNonManifoldVertexType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link SolidNotClosedType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link SolidNotClosedType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "GE_S_NOT_CLOSED", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractSolidError")
+    public JAXBElement<SolidNotClosedType> createSolidNotClosed(SolidNotClosedType value) {
+        return new JAXBElement<SolidNotClosedType>(_SolidNotClosed_QNAME, SolidNotClosedType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link SolidPolygonWrongOrientationType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link SolidPolygonWrongOrientationType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "GE_S_POLYGON_WRONG_ORIENTATION", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractSolidError")
+    public JAXBElement<SolidPolygonWrongOrientationType> createSolidPolygonWrongOrientation(SolidPolygonWrongOrientationType value) {
+        return new JAXBElement<SolidPolygonWrongOrientationType>(_SolidPolygonWrongOrientation_QNAME, SolidPolygonWrongOrientationType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link SolidSelfIntersectionType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link SolidSelfIntersectionType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "GE_S_SELF_INTERSECTION", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractSolidError")
+    public JAXBElement<SolidSelfIntersectionType> createSolidSelfIntersection(SolidSelfIntersectionType value) {
+        return new JAXBElement<SolidSelfIntersectionType>(_SolidSelfIntersection_QNAME, SolidSelfIntersectionType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link SolidTooFewPolygonsType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link SolidTooFewPolygonsType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "GE_S_TOO_FEW_POLYGONS", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractSolidError")
+    public JAXBElement<SolidTooFewPolygonsType> createSolidTooFewPolygons(SolidTooFewPolygonsType value) {
+        return new JAXBElement<SolidTooFewPolygonsType>(_SolidTooFewPolygons_QNAME, SolidTooFewPolygonsType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link GlobalParametersType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link GlobalParametersType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "GlobalParameters", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Object")
+    public JAXBElement<GlobalParametersType> createGlobalParameters(GlobalParametersType value) {
+        return new JAXBElement<GlobalParametersType>(_GlobalParameters_QNAME, GlobalParametersType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link ParameterType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link ParameterType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "Parameter", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Object")
+    public JAXBElement<ParameterType> createParameter(ParameterType value) {
+        return new JAXBElement<ParameterType>(_Parameter_QNAME, ParameterType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link PolygonIdListType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link PolygonIdListType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "PolygonIdList", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Object")
+    public JAXBElement<PolygonIdListType> createPolygonIdList(PolygonIdListType value) {
+        return new JAXBElement<PolygonIdListType>(_PolygonIdList_QNAME, PolygonIdListType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link RequirementType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link RequirementType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "Requirement", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Object")
+    public JAXBElement<RequirementType> createRequirement(RequirementType value) {
+        return new JAXBElement<RequirementType>(_Requirement_QNAME, RequirementType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link SemanticAttributeMissingType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link SemanticAttributeMissingType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "SEM_ATTRIBUTE_MISSING", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractSemanticError")
+    public JAXBElement<SemanticAttributeMissingType> createSemanticAttributeMissing(SemanticAttributeMissingType value) {
+        return new JAXBElement<SemanticAttributeMissingType>(_SemanticAttributeMissing_QNAME, SemanticAttributeMissingType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link SemanticAttributeWrongValueType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link SemanticAttributeWrongValueType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "SEM_ATTRIBUTE_WRONG_VALUE", substitutionHeadNamespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", substitutionHeadName = "AbstractSemanticError")
+    public JAXBElement<SemanticAttributeWrongValueType> createSemanticAttributeWrongValue(SemanticAttributeWrongValueType value) {
+        return new JAXBElement<SemanticAttributeWrongValueType>(_SemanticAttributeWrongValue_QNAME, SemanticAttributeWrongValueType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link StatisticsType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link StatisticsType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "Statistics", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Object")
+    public JAXBElement<StatisticsType> createStatistics(StatisticsType value) {
+        return new JAXBElement<StatisticsType>(_Statistics_QNAME, StatisticsType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link ValidationType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link ValidationType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "Validation", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Feature")
+    public JAXBElement<ValidationType> createValidation(ValidationType value) {
+        return new JAXBElement<ValidationType>(_Validation_QNAME, ValidationType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link ValidationPlanType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link ValidationPlanType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "ValidationPlan", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Object")
+    public JAXBElement<ValidationPlanType> createValidationPlan(ValidationPlanType value) {
+        return new JAXBElement<ValidationPlanType>(_ValidationPlan_QNAME, ValidationPlanType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link ValidationResultType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link ValidationResultType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "ValidationResult", substitutionHeadNamespace = "http://www.opengis.net/gml", substitutionHeadName = "_Object")
+    public JAXBElement<ValidationResultType> createValidationResult(ValidationResultType value) {
+        return new JAXBElement<ValidationResultType>(_ValidationResult_QNAME, ValidationResultType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link ValidationResultPropertyType }{@code >}
+     * 
+     * @param value
+     *     Java instance representing xml element's value.
+     * @return
+     *     the new instance of {@link JAXBElement }{@code <}{@link ValidationResultPropertyType }{@code >}
+     */
+    @XmlElementDecl(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", name = "validationResult", substitutionHeadNamespace = "http://www.opengis.net/citygml/2.0", substitutionHeadName = "_GenericApplicationPropertyOfCityObject")
+    public JAXBElement<ValidationResultPropertyType> createValidationResultProperty(ValidationResultPropertyType value) {
+        return new JAXBElement<ValidationResultPropertyType>(_ValidationResultProperty_QNAME, ValidationResultPropertyType.class, null, value);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ParameterPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ParameterPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..9bd5232e90d6b371231a7adff0d748622c854733
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ParameterPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für ParameterPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="ParameterPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}Parameter"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ParameterPropertyType", propOrder = {
+    "parameter"
+})
+public class ParameterPropertyType {
+
+    @XmlElement(name = "Parameter", required = true)
+    protected ParameterType parameter;
+
+    /**
+     * Ruft den Wert der parameter-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link ParameterType }
+     *     
+     */
+    public ParameterType getParameter() {
+        return parameter;
+    }
+
+    /**
+     * Legt den Wert der parameter-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link ParameterType }
+     *     
+     */
+    public void setParameter(ParameterType value) {
+        this.parameter = value;
+    }
+
+    public boolean isSetParameter() {
+        return (this.parameter!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ParameterType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ParameterType.java
new file mode 100644
index 0000000000000000000000000000000000000000..c4d5afcbdbd7eecad81fba88a3a9cd93dabbac4d
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ParameterType.java
@@ -0,0 +1,137 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für ParameterType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="ParameterType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="name" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *         &lt;element name="uom" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *         &lt;element name="value" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ParameterType", propOrder = {
+    "name",
+    "uom",
+    "value"
+})
+public class ParameterType {
+
+    @XmlElement(required = true)
+    protected String name;
+    @XmlElement(required = true)
+    protected String uom;
+    @XmlElement(required = true)
+    protected String value;
+
+    /**
+     * Ruft den Wert der name-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Legt den Wert der name-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setName(String value) {
+        this.name = value;
+    }
+
+    public boolean isSetName() {
+        return (this.name!= null);
+    }
+
+    /**
+     * Ruft den Wert der uom-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getUom() {
+        return uom;
+    }
+
+    /**
+     * Legt den Wert der uom-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setUom(String value) {
+        this.uom = value;
+    }
+
+    public boolean isSetUom() {
+        return (this.uom!= null);
+    }
+
+    /**
+     * Ruft den Wert der value-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * Legt den Wert der value-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public boolean isSetValue() {
+        return (this.value!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonHoleOutsidePropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonHoleOutsidePropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..86b29442e9acf203ce965da9e921df58aa510481
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonHoleOutsidePropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_P_HOLE_OUTSIDEPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_P_HOLE_OUTSIDEPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GE_P_HOLE_OUTSIDE"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_P_HOLE_OUTSIDEPropertyType", propOrder = {
+    "ge_P_HOLE_OUTSIDE"
+})
+public class PolygonHoleOutsidePropertyType {
+
+    @XmlElement(name = "GE_P_HOLE_OUTSIDE", required = true)
+    protected PolygonHoleOutsideType ge_P_HOLE_OUTSIDE;
+
+    /**
+     * Ruft den Wert der ge_P_HOLE_OUTSIDE-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link PolygonHoleOutsideType }
+     *     
+     */
+    public PolygonHoleOutsideType getGE_P_HOLE_OUTSIDE() {
+        return ge_P_HOLE_OUTSIDE;
+    }
+
+    /**
+     * Legt den Wert der ge_P_HOLE_OUTSIDE-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link PolygonHoleOutsideType }
+     *     
+     */
+    public void setGE_P_HOLE_OUTSIDE(PolygonHoleOutsideType value) {
+        this.ge_P_HOLE_OUTSIDE = value;
+    }
+
+    public boolean isSetGE_P_HOLE_OUTSIDE() {
+        return (this.ge_P_HOLE_OUTSIDE!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonHoleOutsideType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonHoleOutsideType.java
new file mode 100644
index 0000000000000000000000000000000000000000..0edbce4d49084e44d7d17a95dfb4eca41ad36885
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonHoleOutsideType.java
@@ -0,0 +1,75 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_P_HOLE_OUTSIDEType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_P_HOLE_OUTSIDEType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractPolygonErrorType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="linearRingId" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_P_HOLE_OUTSIDEType", propOrder = {
+    "linearRingId"
+})
+public class PolygonHoleOutsideType
+    extends AbstractPolygonErrorType
+{
+
+    @XmlElement(required = true)
+    protected String linearRingId;
+
+    /**
+     * Ruft den Wert der linearRingId-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getLinearRingId() {
+        return linearRingId;
+    }
+
+    /**
+     * Legt den Wert der linearRingId-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setLinearRingId(String value) {
+        this.linearRingId = value;
+    }
+
+    public boolean isSetLinearRingId() {
+        return (this.linearRingId!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonIdListPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonIdListPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..93f37986588af2f43938a4aa7a98d7cdfc8d138c
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonIdListPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für PolygonIdListPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="PolygonIdListPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}PolygonIdList"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "PolygonIdListPropertyType", propOrder = {
+    "polygonIdList"
+})
+public class PolygonIdListPropertyType {
+
+    @XmlElement(name = "PolygonIdList", required = true)
+    protected PolygonIdListType polygonIdList;
+
+    /**
+     * Ruft den Wert der polygonIdList-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link PolygonIdListType }
+     *     
+     */
+    public PolygonIdListType getPolygonIdList() {
+        return polygonIdList;
+    }
+
+    /**
+     * Legt den Wert der polygonIdList-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link PolygonIdListType }
+     *     
+     */
+    public void setPolygonIdList(PolygonIdListType value) {
+        this.polygonIdList = value;
+    }
+
+    public boolean isSetPolygonIdList() {
+        return (this.polygonIdList!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonIdListType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonIdListType.java
new file mode 100644
index 0000000000000000000000000000000000000000..33ef8d53743114ef3a9a4671ebf29c58cd39d134
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonIdListType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für PolygonIdListType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="PolygonIdListType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="polygonId" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "PolygonIdListType", propOrder = {
+    "polygonId"
+})
+public class PolygonIdListType {
+
+    @XmlElement(required = true)
+    protected String polygonId;
+
+    /**
+     * Ruft den Wert der polygonId-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getPolygonId() {
+        return polygonId;
+    }
+
+    /**
+     * Legt den Wert der polygonId-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setPolygonId(String value) {
+        this.polygonId = value;
+    }
+
+    public boolean isSetPolygonId() {
+        return (this.polygonId!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonInnerRingsNestedPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonInnerRingsNestedPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..61cc0abca6fc8a5f333863b9f5464f5be1efabe9
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonInnerRingsNestedPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_P_INNER_RINGS_NESTEDPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_P_INNER_RINGS_NESTEDPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GE_P_INNER_RINGS_NESTED"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_P_INNER_RINGS_NESTEDPropertyType", propOrder = {
+    "ge_P_INNER_RINGS_NESTED"
+})
+public class PolygonInnerRingsNestedPropertyType {
+
+    @XmlElement(name = "GE_P_INNER_RINGS_NESTED", required = true)
+    protected PolygonInnerRingsNestedType ge_P_INNER_RINGS_NESTED;
+
+    /**
+     * Ruft den Wert der ge_P_INNER_RINGS_NESTED-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link PolygonInnerRingsNestedType }
+     *     
+     */
+    public PolygonInnerRingsNestedType getGE_P_INNER_RINGS_NESTED() {
+        return ge_P_INNER_RINGS_NESTED;
+    }
+
+    /**
+     * Legt den Wert der ge_P_INNER_RINGS_NESTED-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link PolygonInnerRingsNestedType }
+     *     
+     */
+    public void setGE_P_INNER_RINGS_NESTED(PolygonInnerRingsNestedType value) {
+        this.ge_P_INNER_RINGS_NESTED = value;
+    }
+
+    public boolean isSetGE_P_INNER_RINGS_NESTED() {
+        return (this.ge_P_INNER_RINGS_NESTED!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonInnerRingsNestedType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonInnerRingsNestedType.java
new file mode 100644
index 0000000000000000000000000000000000000000..f52e43576c1a1867634c10268b5c7b3530e8da0e
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonInnerRingsNestedType.java
@@ -0,0 +1,107 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_P_INNER_RINGS_NESTEDType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_P_INNER_RINGS_NESTEDType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractPolygonErrorType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="linearRingId1" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *         &lt;element name="linearRingId2" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_P_INNER_RINGS_NESTEDType", propOrder = {
+    "linearRingId1",
+    "linearRingId2"
+})
+public class PolygonInnerRingsNestedType
+    extends AbstractPolygonErrorType
+{
+
+    @XmlElement(required = true)
+    protected String linearRingId1;
+    @XmlElement(required = true)
+    protected String linearRingId2;
+
+    /**
+     * Ruft den Wert der linearRingId1-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getLinearRingId1() {
+        return linearRingId1;
+    }
+
+    /**
+     * Legt den Wert der linearRingId1-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setLinearRingId1(String value) {
+        this.linearRingId1 = value;
+    }
+
+    public boolean isSetLinearRingId1() {
+        return (this.linearRingId1 != null);
+    }
+
+    /**
+     * Ruft den Wert der linearRingId2-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getLinearRingId2() {
+        return linearRingId2;
+    }
+
+    /**
+     * Legt den Wert der linearRingId2-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setLinearRingId2(String value) {
+        this.linearRingId2 = value;
+    }
+
+    public boolean isSetLinearRingId2() {
+        return (this.linearRingId2 != null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonInteriorDisconnectedPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonInteriorDisconnectedPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..00e06d2315c8a4d04f0fa607d0d1d2b7c137366b
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonInteriorDisconnectedPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_P_INTERIOR_DISCONNECTEDPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_P_INTERIOR_DISCONNECTEDPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GE_P_INTERIOR_DISCONNECTED"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_P_INTERIOR_DISCONNECTEDPropertyType", propOrder = {
+    "ge_P_INTERIOR_DISCONNECTED"
+})
+public class PolygonInteriorDisconnectedPropertyType {
+
+    @XmlElement(name = "GE_P_INTERIOR_DISCONNECTED", required = true)
+    protected PolygonInteriorDisconnectedType ge_P_INTERIOR_DISCONNECTED;
+
+    /**
+     * Ruft den Wert der ge_P_INTERIOR_DISCONNECTED-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link PolygonInteriorDisconnectedType }
+     *     
+     */
+    public PolygonInteriorDisconnectedType getGE_P_INTERIOR_DISCONNECTED() {
+        return ge_P_INTERIOR_DISCONNECTED;
+    }
+
+    /**
+     * Legt den Wert der ge_P_INTERIOR_DISCONNECTED-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link PolygonInteriorDisconnectedType }
+     *     
+     */
+    public void setGE_P_INTERIOR_DISCONNECTED(PolygonInteriorDisconnectedType value) {
+        this.ge_P_INTERIOR_DISCONNECTED = value;
+    }
+
+    public boolean isSetGE_P_INTERIOR_DISCONNECTED() {
+        return (this.ge_P_INTERIOR_DISCONNECTED!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonInteriorDisconnectedType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonInteriorDisconnectedType.java
new file mode 100644
index 0000000000000000000000000000000000000000..20c501a29bad6e31f5e93081178bee8964d9fa4d
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonInteriorDisconnectedType.java
@@ -0,0 +1,41 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_P_INTERIOR_DISCONNECTEDType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_P_INTERIOR_DISCONNECTEDType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractPolygonErrorType"&gt;
+ *       &lt;sequence&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_P_INTERIOR_DISCONNECTEDType")
+public class PolygonInteriorDisconnectedType
+    extends AbstractPolygonErrorType
+{
+
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonIntersectingRingsPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonIntersectingRingsPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..785a469e6eb310dc0551e5a9e8215c0c454455c3
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonIntersectingRingsPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_P_INTERSECTING_RINGSPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_P_INTERSECTING_RINGSPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GE_P_INTERSECTING_RINGS"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_P_INTERSECTING_RINGSPropertyType", propOrder = {
+    "ge_P_INTERSECTING_RINGS"
+})
+public class PolygonIntersectingRingsPropertyType {
+
+    @XmlElement(name = "GE_P_INTERSECTING_RINGS", required = true)
+    protected PolygonIntersectingRingsType ge_P_INTERSECTING_RINGS;
+
+    /**
+     * Ruft den Wert der ge_P_INTERSECTING_RINGS-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link PolygonIntersectingRingsType }
+     *     
+     */
+    public PolygonIntersectingRingsType getGE_P_INTERSECTING_RINGS() {
+        return ge_P_INTERSECTING_RINGS;
+    }
+
+    /**
+     * Legt den Wert der ge_P_INTERSECTING_RINGS-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link PolygonIntersectingRingsType }
+     *     
+     */
+    public void setGE_P_INTERSECTING_RINGS(PolygonIntersectingRingsType value) {
+        this.ge_P_INTERSECTING_RINGS = value;
+    }
+
+    public boolean isSetGE_P_INTERSECTING_RINGS() {
+        return (this.ge_P_INTERSECTING_RINGS!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonIntersectingRingsType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonIntersectingRingsType.java
new file mode 100644
index 0000000000000000000000000000000000000000..4a09e5fb8bd956bfbc22b4fb6ca0b29b639500b8
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonIntersectingRingsType.java
@@ -0,0 +1,107 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_P_INTERSECTING_RINGSType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_P_INTERSECTING_RINGSType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractPolygonErrorType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="linearRingId1" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *         &lt;element name="linearRingId2" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_P_INTERSECTING_RINGSType", propOrder = {
+    "linearRingId1",
+    "linearRingId2"
+})
+public class PolygonIntersectingRingsType
+    extends AbstractPolygonErrorType
+{
+
+    @XmlElement(required = true)
+    protected String linearRingId1;
+    @XmlElement(required = true)
+    protected String linearRingId2;
+
+    /**
+     * Ruft den Wert der linearRingId1-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getLinearRingId1() {
+        return linearRingId1;
+    }
+
+    /**
+     * Legt den Wert der linearRingId1-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setLinearRingId1(String value) {
+        this.linearRingId1 = value;
+    }
+
+    public boolean isSetLinearRingId1() {
+        return (this.linearRingId1 != null);
+    }
+
+    /**
+     * Ruft den Wert der linearRingId2-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getLinearRingId2() {
+        return linearRingId2;
+    }
+
+    /**
+     * Legt den Wert der linearRingId2-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setLinearRingId2(String value) {
+        this.linearRingId2 = value;
+    }
+
+    public boolean isSetLinearRingId2() {
+        return (this.linearRingId2 != null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonNonPlanarDistancePlanePropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonNonPlanarDistancePlanePropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..975786058169a562155848fc54d6f1a4b69d73c5
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonNonPlanarDistancePlanePropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANEPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANEPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANEPropertyType", propOrder = {
+    "ge_P_NON_PLANAR_POLYGON_DISTANCE_PLANE"
+})
+public class PolygonNonPlanarDistancePlanePropertyType {
+
+    @XmlElement(name = "GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE", required = true)
+    protected PolygonNonPlanarDistancePlaneType ge_P_NON_PLANAR_POLYGON_DISTANCE_PLANE;
+
+    /**
+     * Ruft den Wert der ge_P_NON_PLANAR_POLYGON_DISTANCE_PLANE-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link PolygonNonPlanarDistancePlaneType }
+     *     
+     */
+    public PolygonNonPlanarDistancePlaneType getGE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE() {
+        return ge_P_NON_PLANAR_POLYGON_DISTANCE_PLANE;
+    }
+
+    /**
+     * Legt den Wert der ge_P_NON_PLANAR_POLYGON_DISTANCE_PLANE-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link PolygonNonPlanarDistancePlaneType }
+     *     
+     */
+    public void setGE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE(PolygonNonPlanarDistancePlaneType value) {
+        this.ge_P_NON_PLANAR_POLYGON_DISTANCE_PLANE = value;
+    }
+
+    public boolean isSetGE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE() {
+        return (this.ge_P_NON_PLANAR_POLYGON_DISTANCE_PLANE!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonNonPlanarDistancePlaneType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonNonPlanarDistancePlaneType.java
new file mode 100644
index 0000000000000000000000000000000000000000..f7b40439b61810167fe0f2b98286d4b30b88ce27
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonNonPlanarDistancePlaneType.java
@@ -0,0 +1,109 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import net.opengis.gml.DirectPositionType;
+import net.opengis.gml.LengthType;
+
+
+/**
+ * <p>Java-Klasse für GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANEType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANEType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractPolygonErrorType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="distance" type="{http://www.opengis.net/gml}LengthType"/&gt;
+ *         &lt;element name="vertex" type="{http://www.opengis.net/gml}DirectPositionType"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANEType", propOrder = {
+    "distance",
+    "vertex"
+})
+public class PolygonNonPlanarDistancePlaneType
+    extends AbstractPolygonErrorType
+{
+
+    @XmlElement(required = true)
+    protected LengthType distance;
+    @XmlElement(required = true)
+    protected DirectPositionType vertex;
+
+    /**
+     * Ruft den Wert der distance-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link LengthType }
+     *     
+     */
+    public LengthType getDistance() {
+        return distance;
+    }
+
+    /**
+     * Legt den Wert der distance-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link LengthType }
+     *     
+     */
+    public void setDistance(LengthType value) {
+        this.distance = value;
+    }
+
+    public boolean isSetDistance() {
+        return (this.distance!= null);
+    }
+
+    /**
+     * Ruft den Wert der vertex-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link DirectPositionType }
+     *     
+     */
+    public DirectPositionType getVertex() {
+        return vertex;
+    }
+
+    /**
+     * Legt den Wert der vertex-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link DirectPositionType }
+     *     
+     */
+    public void setVertex(DirectPositionType value) {
+        this.vertex = value;
+    }
+
+    public boolean isSetVertex() {
+        return (this.vertex!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonNonPlanarNormalsDeviationPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonNonPlanarNormalsDeviationPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..10de3d73e3754400b990c3ad9e7541f815ee715b
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonNonPlanarNormalsDeviationPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATIONPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATIONPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATIONPropertyType", propOrder = {
+    "ge_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION"
+})
+public class PolygonNonPlanarNormalsDeviationPropertyType {
+
+    @XmlElement(name = "GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION", required = true)
+    protected PolygonNonPlanarNormalsDeviationType ge_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION;
+
+    /**
+     * Ruft den Wert der ge_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link PolygonNonPlanarNormalsDeviationType }
+     *     
+     */
+    public PolygonNonPlanarNormalsDeviationType getGE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION() {
+        return ge_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION;
+    }
+
+    /**
+     * Legt den Wert der ge_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link PolygonNonPlanarNormalsDeviationType }
+     *     
+     */
+    public void setGE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION(PolygonNonPlanarNormalsDeviationType value) {
+        this.ge_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION = value;
+    }
+
+    public boolean isSetGE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION() {
+        return (this.ge_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonNonPlanarNormalsDeviationType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonNonPlanarNormalsDeviationType.java
new file mode 100644
index 0000000000000000000000000000000000000000..08fe605e8d4777643be3b6660c5ee03776cf7198
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonNonPlanarNormalsDeviationType.java
@@ -0,0 +1,76 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import net.opengis.gml.AngleType;
+
+
+/**
+ * <p>Java-Klasse für GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATIONType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATIONType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractPolygonErrorType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="deviation" type="{http://www.opengis.net/gml}AngleType"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATIONType", propOrder = {
+    "deviation"
+})
+public class PolygonNonPlanarNormalsDeviationType
+    extends AbstractPolygonErrorType
+{
+
+    @XmlElement(required = true)
+    protected AngleType deviation;
+
+    /**
+     * Ruft den Wert der deviation-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link AngleType }
+     *     
+     */
+    public AngleType getDeviation() {
+        return deviation;
+    }
+
+    /**
+     * Legt den Wert der deviation-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link AngleType }
+     *     
+     */
+    public void setDeviation(AngleType value) {
+        this.deviation = value;
+    }
+
+    public boolean isSetDeviation() {
+        return (this.deviation!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonOrientationRingsSamePropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonOrientationRingsSamePropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..79909eef3a29da9afa2246d23c3cf95fb6df02aa
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonOrientationRingsSamePropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_P_ORIENTATION_RINGS_SAMEPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_P_ORIENTATION_RINGS_SAMEPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GE_P_ORIENTATION_RINGS_SAME"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_P_ORIENTATION_RINGS_SAMEPropertyType", propOrder = {
+    "ge_P_ORIENTATION_RINGS_SAME"
+})
+public class PolygonOrientationRingsSamePropertyType {
+
+    @XmlElement(name = "GE_P_ORIENTATION_RINGS_SAME", required = true)
+    protected PolygonOrientationRingsSameType ge_P_ORIENTATION_RINGS_SAME;
+
+    /**
+     * Ruft den Wert der ge_P_ORIENTATION_RINGS_SAME-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link PolygonOrientationRingsSameType }
+     *     
+     */
+    public PolygonOrientationRingsSameType getGE_P_ORIENTATION_RINGS_SAME() {
+        return ge_P_ORIENTATION_RINGS_SAME;
+    }
+
+    /**
+     * Legt den Wert der ge_P_ORIENTATION_RINGS_SAME-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link PolygonOrientationRingsSameType }
+     *     
+     */
+    public void setGE_P_ORIENTATION_RINGS_SAME(PolygonOrientationRingsSameType value) {
+        this.ge_P_ORIENTATION_RINGS_SAME = value;
+    }
+
+    public boolean isSetGE_P_ORIENTATION_RINGS_SAME() {
+        return (this.ge_P_ORIENTATION_RINGS_SAME!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonOrientationRingsSameType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonOrientationRingsSameType.java
new file mode 100644
index 0000000000000000000000000000000000000000..996cec3e2b27159a522bab2c06b4f6aef26d0e8b
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonOrientationRingsSameType.java
@@ -0,0 +1,75 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_P_ORIENTATION_RINGS_SAMEType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_P_ORIENTATION_RINGS_SAMEType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractPolygonErrorType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="linearRingId" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_P_ORIENTATION_RINGS_SAMEType", propOrder = {
+    "linearRingId"
+})
+public class PolygonOrientationRingsSameType
+    extends AbstractPolygonErrorType
+{
+
+    @XmlElement(required = true)
+    protected String linearRingId;
+
+    /**
+     * Ruft den Wert der linearRingId-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getLinearRingId() {
+        return linearRingId;
+    }
+
+    /**
+     * Legt den Wert der linearRingId-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setLinearRingId(String value) {
+        this.linearRingId = value;
+    }
+
+    public boolean isSetLinearRingId() {
+        return (this.linearRingId!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RequirementPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RequirementPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..bd4e9688990fca57aadbd845f837285c2bdb3ecf
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RequirementPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für RequirementPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="RequirementPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}Requirement"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "RequirementPropertyType", propOrder = {
+    "requirement"
+})
+public class RequirementPropertyType {
+
+    @XmlElement(name = "Requirement", required = true)
+    protected RequirementType requirement;
+
+    /**
+     * Ruft den Wert der requirement-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link RequirementType }
+     *     
+     */
+    public RequirementType getRequirement() {
+        return requirement;
+    }
+
+    /**
+     * Legt den Wert der requirement-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link RequirementType }
+     *     
+     */
+    public void setRequirement(RequirementType value) {
+        this.requirement = value;
+    }
+
+    public boolean isSetRequirement() {
+        return (this.requirement!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RequirementType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RequirementType.java
new file mode 100644
index 0000000000000000000000000000000000000000..cbbf0032a87815370a6ede18b6868b78435f73a0
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RequirementType.java
@@ -0,0 +1,140 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für RequirementType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="RequirementType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="enabled" type="{http://www.w3.org/2001/XMLSchema}boolean"/&gt;
+ *         &lt;element name="requirementType" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}RequirementTypeType"/&gt;
+ *         &lt;element name="parameter" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}ParameterPropertyType" maxOccurs="unbounded" minOccurs="0"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "RequirementType", propOrder = {
+    "enabled",
+    "requirementType",
+    "parameter"
+})
+public class RequirementType {
+
+    protected boolean enabled;
+    @XmlElement(required = true)
+    @XmlSchemaType(name = "string")
+    protected RequirementTypeType requirementType;
+    protected List<ParameterPropertyType> parameter;
+
+    /**
+     * Ruft den Wert der enabled-Eigenschaft ab.
+     * 
+     */
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    /**
+     * Legt den Wert der enabled-Eigenschaft fest.
+     * 
+     */
+    public void setEnabled(boolean value) {
+        this.enabled = value;
+    }
+
+    public boolean isSetEnabled() {
+        return true;
+    }
+
+    /**
+     * Ruft den Wert der requirementType-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link RequirementTypeType }
+     *     
+     */
+    public RequirementTypeType getRequirementType() {
+        return requirementType;
+    }
+
+    /**
+     * Legt den Wert der requirementType-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link RequirementTypeType }
+     *     
+     */
+    public void setRequirementType(RequirementTypeType value) {
+        this.requirementType = value;
+    }
+
+    public boolean isSetRequirementType() {
+        return (this.requirementType!= null);
+    }
+
+    /**
+     * Gets the value of the parameter property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the parameter property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getParameter().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link ParameterPropertyType }
+     * 
+     * 
+     */
+    public List<ParameterPropertyType> getParameter() {
+        if (parameter == null) {
+            parameter = new ArrayList<ParameterPropertyType>();
+        }
+        return this.parameter;
+    }
+
+    public boolean isSetParameter() {
+        return ((this.parameter!= null)&&(!this.parameter.isEmpty()));
+    }
+
+    public void unsetParameter() {
+        this.parameter = null;
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RequirementTypeType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RequirementTypeType.java
new file mode 100644
index 0000000000000000000000000000000000000000..a588de8956fc636541ae5e962775e2bc4df206ab
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RequirementTypeType.java
@@ -0,0 +1,112 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für RequirementTypeType.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * <p>
+ * <pre>
+ * &lt;simpleType name="RequirementTypeType"&gt;
+ *   &lt;restriction base="{http://www.w3.org/2001/XMLSchema}string"&gt;
+ *     &lt;enumeration value="R_GE_R_TOO_FEW_POINTS"/&gt;
+ *     &lt;enumeration value="R_GE_R_NOT_CLOSED"/&gt;
+ *     &lt;enumeration value="R_GE_R_CONSECUTIVE_POINTS_SAME"/&gt;
+ *     &lt;enumeration value="R_GE_R_SELF_INTERSECTION"/&gt;
+ *     &lt;enumeration value="R_GE_P_NON_PLANAR"/&gt;
+ *     &lt;enumeration value="R_GE_P_INTERIOR_DISCONNECTED"/&gt;
+ *     &lt;enumeration value="R_GE_P_INTERSECTING_RINGS"/&gt;
+ *     &lt;enumeration value="R_GE_P_HOLE_OUTSIDE"/&gt;
+ *     &lt;enumeration value="R_GE_P_ORIENTATION_RINGS_SAME"/&gt;
+ *     &lt;enumeration value="R_GE_P_INNER_RINGS_NESTED"/&gt;
+ *     &lt;enumeration value="R_GE_S_TOO_FEW_POLYGONS"/&gt;
+ *     &lt;enumeration value="R_GE_S_NOT_CLOSED"/&gt;
+ *     &lt;enumeration value="R_GE_S_NON_MANIFOLD_EDGE"/&gt;
+ *     &lt;enumeration value="R_GE_S_POLYGON_WRONG_ORIENTATION"/&gt;
+ *     &lt;enumeration value="R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION"/&gt;
+ *     &lt;enumeration value="R_GE_S_NON_MANIFOLD_VERTEX"/&gt;
+ *     &lt;enumeration value="R_GE_S_SELF_INTERSECTION"/&gt;
+ *     &lt;enumeration value="R_GE_S_MULTIPLE_CONNECTED_COMPONENTS"/&gt;
+ *     &lt;enumeration value="R_SE_ATTRIBUTES_EXISTING"/&gt;
+ *     &lt;enumeration value="R_SE_ATTRIBUTES_CORRECT"/&gt;
+ *   &lt;/restriction&gt;
+ * &lt;/simpleType&gt;
+ * </pre>
+ * 
+ */
+@XmlType(name = "RequirementTypeType")
+@XmlEnum
+public enum RequirementTypeType {
+
+    @XmlEnumValue("R_GE_R_TOO_FEW_POINTS")
+    R___GE___R___TOO___FEW___POINTS("R_GE_R_TOO_FEW_POINTS"),
+    @XmlEnumValue("R_GE_R_NOT_CLOSED")
+    R___GE___R___NOT___CLOSED("R_GE_R_NOT_CLOSED"),
+    @XmlEnumValue("R_GE_R_CONSECUTIVE_POINTS_SAME")
+    R___GE___R___CONSECUTIVE___POINTS___SAME("R_GE_R_CONSECUTIVE_POINTS_SAME"),
+    @XmlEnumValue("R_GE_R_SELF_INTERSECTION")
+    R___GE___R___SELF___INTERSECTION("R_GE_R_SELF_INTERSECTION"),
+    @XmlEnumValue("R_GE_P_NON_PLANAR")
+    R___GE___P___NON___PLANAR("R_GE_P_NON_PLANAR"),
+    @XmlEnumValue("R_GE_P_INTERIOR_DISCONNECTED")
+    R___GE___P___INTERIOR___DISCONNECTED("R_GE_P_INTERIOR_DISCONNECTED"),
+    @XmlEnumValue("R_GE_P_INTERSECTING_RINGS")
+    R___GE___P___INTERSECTING___RINGS("R_GE_P_INTERSECTING_RINGS"),
+    @XmlEnumValue("R_GE_P_HOLE_OUTSIDE")
+    R___GE___P___HOLE___OUTSIDE("R_GE_P_HOLE_OUTSIDE"),
+    @XmlEnumValue("R_GE_P_ORIENTATION_RINGS_SAME")
+    R___GE___P___ORIENTATION___RINGS___SAME("R_GE_P_ORIENTATION_RINGS_SAME"),
+    @XmlEnumValue("R_GE_P_INNER_RINGS_NESTED")
+    R___GE___P___INNER___RINGS___NESTED("R_GE_P_INNER_RINGS_NESTED"),
+    @XmlEnumValue("R_GE_S_TOO_FEW_POLYGONS")
+    R___GE___S___TOO___FEW___POLYGONS("R_GE_S_TOO_FEW_POLYGONS"),
+    @XmlEnumValue("R_GE_S_NOT_CLOSED")
+    R___GE___S___NOT___CLOSED("R_GE_S_NOT_CLOSED"),
+    @XmlEnumValue("R_GE_S_NON_MANIFOLD_EDGE")
+    R___GE___S___NON___MANIFOLD___EDGE("R_GE_S_NON_MANIFOLD_EDGE"),
+    @XmlEnumValue("R_GE_S_POLYGON_WRONG_ORIENTATION")
+    R___GE___S___POLYGON___WRONG___ORIENTATION("R_GE_S_POLYGON_WRONG_ORIENTATION"),
+    @XmlEnumValue("R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION")
+    R___GE___S___ALL___POLYGONS___WRONG___ORIENTATION("R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION"),
+    @XmlEnumValue("R_GE_S_NON_MANIFOLD_VERTEX")
+    R___GE___S___NON___MANIFOLD___VERTEX("R_GE_S_NON_MANIFOLD_VERTEX"),
+    @XmlEnumValue("R_GE_S_SELF_INTERSECTION")
+    R___GE___S___SELF___INTERSECTION("R_GE_S_SELF_INTERSECTION"),
+    @XmlEnumValue("R_GE_S_MULTIPLE_CONNECTED_COMPONENTS")
+    R___GE___S___MULTIPLE___CONNECTED___COMPONENTS("R_GE_S_MULTIPLE_CONNECTED_COMPONENTS"),
+    @XmlEnumValue("R_SE_ATTRIBUTES_EXISTING")
+    R___SE___ATTRIBUTES___EXISTING("R_SE_ATTRIBUTES_EXISTING"),
+    @XmlEnumValue("R_SE_ATTRIBUTES_CORRECT")
+    R___SE___ATTRIBUTES___CORRECT("R_SE_ATTRIBUTES_CORRECT");
+    private final String value;
+
+    RequirementTypeType(String v) {
+        value = v;
+    }
+
+    public String value() {
+        return value;
+    }
+
+    public static RequirementTypeType fromValue(String v) {
+        for (RequirementTypeType c: RequirementTypeType.values()) {
+            if (c.value.equals(v)) {
+                return c;
+            }
+        }
+        throw new IllegalArgumentException(v);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ResultTypeType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ResultTypeType.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ef4fda9ef7f08895f9134dafc7a7e58b8614a81
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ResultTypeType.java
@@ -0,0 +1,59 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für ResultTypeType.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * <p>
+ * <pre>
+ * &lt;simpleType name="ResultTypeType"&gt;
+ *   &lt;restriction base="{http://www.w3.org/2001/XMLSchema}string"&gt;
+ *     &lt;enumeration value="OK"/&gt;
+ *     &lt;enumeration value="ERROR"/&gt;
+ *     &lt;enumeration value="NOT_CHECKED"/&gt;
+ *   &lt;/restriction&gt;
+ * &lt;/simpleType&gt;
+ * </pre>
+ * 
+ */
+@XmlType(name = "ResultTypeType")
+@XmlEnum
+public enum ResultTypeType {
+
+    OK("OK"),
+    ERROR("ERROR"),
+    @XmlEnumValue("NOT_CHECKED")
+    NOT___CHECKED("NOT_CHECKED");
+    private final String value;
+
+    ResultTypeType(String v) {
+        value = v;
+    }
+
+    public String value() {
+        return value;
+    }
+
+    public static ResultTypeType fromValue(String v) {
+        for (ResultTypeType c: ResultTypeType.values()) {
+            if (c.value.equals(v)) {
+                return c;
+            }
+        }
+        throw new IllegalArgumentException(v);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingConsecutivePointsSamePropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingConsecutivePointsSamePropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..4254203c9d3ec593c8b09b8c0084a033adce1c27
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingConsecutivePointsSamePropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_R_CONSECUTIVE_POINTS_SAMEPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_R_CONSECUTIVE_POINTS_SAMEPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GE_R_CONSECUTIVE_POINTS_SAME"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_R_CONSECUTIVE_POINTS_SAMEPropertyType", propOrder = {
+    "ge_R_CONSECUTIVE_POINTS_SAME"
+})
+public class RingConsecutivePointsSamePropertyType {
+
+    @XmlElement(name = "GE_R_CONSECUTIVE_POINTS_SAME", required = true)
+    protected RingConsecutivePointsSameType ge_R_CONSECUTIVE_POINTS_SAME;
+
+    /**
+     * Ruft den Wert der ge_R_CONSECUTIVE_POINTS_SAME-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link RingConsecutivePointsSameType }
+     *     
+     */
+    public RingConsecutivePointsSameType getGE_R_CONSECUTIVE_POINTS_SAME() {
+        return ge_R_CONSECUTIVE_POINTS_SAME;
+    }
+
+    /**
+     * Legt den Wert der ge_R_CONSECUTIVE_POINTS_SAME-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link RingConsecutivePointsSameType }
+     *     
+     */
+    public void setGE_R_CONSECUTIVE_POINTS_SAME(RingConsecutivePointsSameType value) {
+        this.ge_R_CONSECUTIVE_POINTS_SAME = value;
+    }
+
+    public boolean isSetGE_R_CONSECUTIVE_POINTS_SAME() {
+        return (this.ge_R_CONSECUTIVE_POINTS_SAME!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingConsecutivePointsSameType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingConsecutivePointsSameType.java
new file mode 100644
index 0000000000000000000000000000000000000000..a8a862e4de00cb39be3fe0a74a0562d1950cafc6
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingConsecutivePointsSameType.java
@@ -0,0 +1,108 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import net.opengis.gml.DirectPositionType;
+
+
+/**
+ * <p>Java-Klasse für GE_R_CONSECUTIVE_POINTS_SAMEType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_R_CONSECUTIVE_POINTS_SAMEType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractRingErrorType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="vertex1" type="{http://www.opengis.net/gml}DirectPositionType"/&gt;
+ *         &lt;element name="vertex2" type="{http://www.opengis.net/gml}DirectPositionType"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_R_CONSECUTIVE_POINTS_SAMEType", propOrder = {
+    "vertex1",
+    "vertex2"
+})
+public class RingConsecutivePointsSameType
+    extends AbstractRingErrorType
+{
+
+    @XmlElement(required = true)
+    protected DirectPositionType vertex1;
+    @XmlElement(required = true)
+    protected DirectPositionType vertex2;
+
+    /**
+     * Ruft den Wert der vertex1-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link DirectPositionType }
+     *     
+     */
+    public DirectPositionType getVertex1() {
+        return vertex1;
+    }
+
+    /**
+     * Legt den Wert der vertex1-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link DirectPositionType }
+     *     
+     */
+    public void setVertex1(DirectPositionType value) {
+        this.vertex1 = value;
+    }
+
+    public boolean isSetVertex1() {
+        return (this.vertex1 != null);
+    }
+
+    /**
+     * Ruft den Wert der vertex2-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link DirectPositionType }
+     *     
+     */
+    public DirectPositionType getVertex2() {
+        return vertex2;
+    }
+
+    /**
+     * Legt den Wert der vertex2-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link DirectPositionType }
+     *     
+     */
+    public void setVertex2(DirectPositionType value) {
+        this.vertex2 = value;
+    }
+
+    public boolean isSetVertex2() {
+        return (this.vertex2 != null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingNotClosedPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingNotClosedPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..7684a7c5642940d4f64a4929de271962ab0649f6
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingNotClosedPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_R_NOT_CLOSEDPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_R_NOT_CLOSEDPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GE_R_NOT_CLOSED"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_R_NOT_CLOSEDPropertyType", propOrder = {
+    "ge_R_NOT_CLOSED"
+})
+public class RingNotClosedPropertyType {
+
+    @XmlElement(name = "GE_R_NOT_CLOSED", required = true)
+    protected RingNotClosedType ge_R_NOT_CLOSED;
+
+    /**
+     * Ruft den Wert der ge_R_NOT_CLOSED-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link RingNotClosedType }
+     *     
+     */
+    public RingNotClosedType getGE_R_NOT_CLOSED() {
+        return ge_R_NOT_CLOSED;
+    }
+
+    /**
+     * Legt den Wert der ge_R_NOT_CLOSED-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link RingNotClosedType }
+     *     
+     */
+    public void setGE_R_NOT_CLOSED(RingNotClosedType value) {
+        this.ge_R_NOT_CLOSED = value;
+    }
+
+    public boolean isSetGE_R_NOT_CLOSED() {
+        return (this.ge_R_NOT_CLOSED!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingNotClosedType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingNotClosedType.java
new file mode 100644
index 0000000000000000000000000000000000000000..8d52d423497324482ca0620bc8b961ab630199ef
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingNotClosedType.java
@@ -0,0 +1,41 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_R_NOT_CLOSEDType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_R_NOT_CLOSEDType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractRingErrorType"&gt;
+ *       &lt;sequence&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_R_NOT_CLOSEDType")
+public class RingNotClosedType
+    extends AbstractRingErrorType
+{
+
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingSelfIntersectionPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingSelfIntersectionPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..196ccbe55022f952e217564e41fa34bdc6e7d7e7
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingSelfIntersectionPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_R_SELF_INTERSECTIONPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_R_SELF_INTERSECTIONPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GE_R_SELF_INTERSECTION"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_R_SELF_INTERSECTIONPropertyType", propOrder = {
+    "ge_R_SELF_INTERSECTION"
+})
+public class RingSelfIntersectionPropertyType {
+
+    @XmlElement(name = "GE_R_SELF_INTERSECTION", required = true)
+    protected RingSelfIntersectionType ge_R_SELF_INTERSECTION;
+
+    /**
+     * Ruft den Wert der ge_R_SELF_INTERSECTION-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link RingSelfIntersectionType }
+     *     
+     */
+    public RingSelfIntersectionType getGE_R_SELF_INTERSECTION() {
+        return ge_R_SELF_INTERSECTION;
+    }
+
+    /**
+     * Legt den Wert der ge_R_SELF_INTERSECTION-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link RingSelfIntersectionType }
+     *     
+     */
+    public void setGE_R_SELF_INTERSECTION(RingSelfIntersectionType value) {
+        this.ge_R_SELF_INTERSECTION = value;
+    }
+
+    public boolean isSetGE_R_SELF_INTERSECTION() {
+        return (this.ge_R_SELF_INTERSECTION!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingSelfIntersectionType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingSelfIntersectionType.java
new file mode 100644
index 0000000000000000000000000000000000000000..3f830ca4b8b3cd7bc16a731bb40df9a6abcfa06e
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingSelfIntersectionType.java
@@ -0,0 +1,172 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import net.opengis.gml.DirectPositionType;
+
+
+/**
+ * <p>Java-Klasse für GE_R_SELF_INTERSECTIONType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_R_SELF_INTERSECTIONType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractRingErrorType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="type" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *         &lt;element name="edge1" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}EdgePropertyType"/&gt;
+ *         &lt;element name="edge2" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}EdgePropertyType"/&gt;
+ *         &lt;element name="vertex" type="{http://www.opengis.net/gml}DirectPositionType"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_R_SELF_INTERSECTIONType", propOrder = {
+    "type",
+    "edge1",
+    "edge2",
+    "vertex"
+})
+public class RingSelfIntersectionType
+    extends AbstractRingErrorType
+{
+
+    @XmlElement(required = true)
+    protected String type;
+    @XmlElement(required = true)
+    protected EdgePropertyType edge1;
+    @XmlElement(required = true)
+    protected EdgePropertyType edge2;
+    @XmlElement(required = true)
+    protected DirectPositionType vertex;
+
+    /**
+     * Ruft den Wert der type-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getType() {
+        return type;
+    }
+
+    /**
+     * Legt den Wert der type-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setType(String value) {
+        this.type = value;
+    }
+
+    public boolean isSetType() {
+        return (this.type!= null);
+    }
+
+    /**
+     * Ruft den Wert der edge1-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link EdgePropertyType }
+     *     
+     */
+    public EdgePropertyType getEdge1() {
+        return edge1;
+    }
+
+    /**
+     * Legt den Wert der edge1-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link EdgePropertyType }
+     *     
+     */
+    public void setEdge1(EdgePropertyType value) {
+        this.edge1 = value;
+    }
+
+    public boolean isSetEdge1() {
+        return (this.edge1 != null);
+    }
+
+    /**
+     * Ruft den Wert der edge2-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link EdgePropertyType }
+     *     
+     */
+    public EdgePropertyType getEdge2() {
+        return edge2;
+    }
+
+    /**
+     * Legt den Wert der edge2-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link EdgePropertyType }
+     *     
+     */
+    public void setEdge2(EdgePropertyType value) {
+        this.edge2 = value;
+    }
+
+    public boolean isSetEdge2() {
+        return (this.edge2 != null);
+    }
+
+    /**
+     * Ruft den Wert der vertex-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link DirectPositionType }
+     *     
+     */
+    public DirectPositionType getVertex() {
+        return vertex;
+    }
+
+    /**
+     * Legt den Wert der vertex-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link DirectPositionType }
+     *     
+     */
+    public void setVertex(DirectPositionType value) {
+        this.vertex = value;
+    }
+
+    public boolean isSetVertex() {
+        return (this.vertex!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingTooFewPointsPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingTooFewPointsPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..c8d5d70582665fde2149c09321feb36b9194d588
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingTooFewPointsPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_R_TOO_FEW_POINTSPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_R_TOO_FEW_POINTSPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GE_R_TOO_FEW_POINTS"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_R_TOO_FEW_POINTSPropertyType", propOrder = {
+    "ge_R_TOO_FEW_POINTS"
+})
+public class RingTooFewPointsPropertyType {
+
+    @XmlElement(name = "GE_R_TOO_FEW_POINTS", required = true)
+    protected RingTooFewPointsType ge_R_TOO_FEW_POINTS;
+
+    /**
+     * Ruft den Wert der ge_R_TOO_FEW_POINTS-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link RingTooFewPointsType }
+     *     
+     */
+    public RingTooFewPointsType getGE_R_TOO_FEW_POINTS() {
+        return ge_R_TOO_FEW_POINTS;
+    }
+
+    /**
+     * Legt den Wert der ge_R_TOO_FEW_POINTS-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link RingTooFewPointsType }
+     *     
+     */
+    public void setGE_R_TOO_FEW_POINTS(RingTooFewPointsType value) {
+        this.ge_R_TOO_FEW_POINTS = value;
+    }
+
+    public boolean isSetGE_R_TOO_FEW_POINTS() {
+        return (this.ge_R_TOO_FEW_POINTS!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingTooFewPointsType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingTooFewPointsType.java
new file mode 100644
index 0000000000000000000000000000000000000000..3e30518d176a7c4a9ceaefa488a373d1271a31e1
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/RingTooFewPointsType.java
@@ -0,0 +1,41 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_R_TOO_FEW_POINTSType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_R_TOO_FEW_POINTSType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractRingErrorType"&gt;
+ *       &lt;sequence&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_R_TOO_FEW_POINTSType")
+public class RingTooFewPointsType
+    extends AbstractRingErrorType
+{
+
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SemanticAttributeMissingPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SemanticAttributeMissingPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..091fb4915271aa15739f900ce0cd0908463a8010
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SemanticAttributeMissingPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für SEM_ATTRIBUTE_MISSINGPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="SEM_ATTRIBUTE_MISSINGPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}SEM_ATTRIBUTE_MISSING"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "SEM_ATTRIBUTE_MISSINGPropertyType", propOrder = {
+    "sem_ATTRIBUTE_MISSING"
+})
+public class SemanticAttributeMissingPropertyType {
+
+    @XmlElement(name = "SEM_ATTRIBUTE_MISSING", required = true)
+    protected SemanticAttributeMissingType sem_ATTRIBUTE_MISSING;
+
+    /**
+     * Ruft den Wert der sem_ATTRIBUTE_MISSING-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link SemanticAttributeMissingType }
+     *     
+     */
+    public SemanticAttributeMissingType getSEM_ATTRIBUTE_MISSING() {
+        return sem_ATTRIBUTE_MISSING;
+    }
+
+    /**
+     * Legt den Wert der sem_ATTRIBUTE_MISSING-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link SemanticAttributeMissingType }
+     *     
+     */
+    public void setSEM_ATTRIBUTE_MISSING(SemanticAttributeMissingType value) {
+        this.sem_ATTRIBUTE_MISSING = value;
+    }
+
+    public boolean isSetSEM_ATTRIBUTE_MISSING() {
+        return (this.sem_ATTRIBUTE_MISSING!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SemanticAttributeMissingType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SemanticAttributeMissingType.java
new file mode 100644
index 0000000000000000000000000000000000000000..a6944d101a33ebdcbc6ace00e0def2c1b2d6adca
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SemanticAttributeMissingType.java
@@ -0,0 +1,130 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für SEM_ATTRIBUTE_MISSINGType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="SEM_ATTRIBUTE_MISSINGType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractSemanticErrorType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="childId" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *         &lt;element name="attributeName" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *         &lt;element name="generic" type="{http://www.w3.org/2001/XMLSchema}boolean"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "SEM_ATTRIBUTE_MISSINGType", propOrder = {
+    "childId",
+    "attributeName",
+    "generic"
+})
+public class SemanticAttributeMissingType
+    extends AbstractSemanticErrorType
+{
+
+    @XmlElement(required = true)
+    protected String childId;
+    @XmlElement(required = true)
+    protected String attributeName;
+    protected boolean generic;
+
+    /**
+     * Ruft den Wert der childId-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getChildId() {
+        return childId;
+    }
+
+    /**
+     * Legt den Wert der childId-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setChildId(String value) {
+        this.childId = value;
+    }
+
+    public boolean isSetChildId() {
+        return (this.childId!= null);
+    }
+
+    /**
+     * Ruft den Wert der attributeName-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getAttributeName() {
+        return attributeName;
+    }
+
+    /**
+     * Legt den Wert der attributeName-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setAttributeName(String value) {
+        this.attributeName = value;
+    }
+
+    public boolean isSetAttributeName() {
+        return (this.attributeName!= null);
+    }
+
+    /**
+     * Ruft den Wert der generic-Eigenschaft ab.
+     * 
+     */
+    public boolean isGeneric() {
+        return generic;
+    }
+
+    /**
+     * Legt den Wert der generic-Eigenschaft fest.
+     * 
+     */
+    public void setGeneric(boolean value) {
+        this.generic = value;
+    }
+
+    public boolean isSetGeneric() {
+        return true;
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SemanticAttributeWrongValuePropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SemanticAttributeWrongValuePropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..5e39a1c0e9acb976887d7c6d212d659d99267ffe
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SemanticAttributeWrongValuePropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für SEM_ATTRIBUTE_WRONG_VALUEPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="SEM_ATTRIBUTE_WRONG_VALUEPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}SEM_ATTRIBUTE_WRONG_VALUE"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "SEM_ATTRIBUTE_WRONG_VALUEPropertyType", propOrder = {
+    "sem_ATTRIBUTE_WRONG_VALUE"
+})
+public class SemanticAttributeWrongValuePropertyType {
+
+    @XmlElement(name = "SEM_ATTRIBUTE_WRONG_VALUE", required = true)
+    protected SemanticAttributeWrongValueType sem_ATTRIBUTE_WRONG_VALUE;
+
+    /**
+     * Ruft den Wert der sem_ATTRIBUTE_WRONG_VALUE-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link SemanticAttributeWrongValueType }
+     *     
+     */
+    public SemanticAttributeWrongValueType getSEM_ATTRIBUTE_WRONG_VALUE() {
+        return sem_ATTRIBUTE_WRONG_VALUE;
+    }
+
+    /**
+     * Legt den Wert der sem_ATTRIBUTE_WRONG_VALUE-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link SemanticAttributeWrongValueType }
+     *     
+     */
+    public void setSEM_ATTRIBUTE_WRONG_VALUE(SemanticAttributeWrongValueType value) {
+        this.sem_ATTRIBUTE_WRONG_VALUE = value;
+    }
+
+    public boolean isSetSEM_ATTRIBUTE_WRONG_VALUE() {
+        return (this.sem_ATTRIBUTE_WRONG_VALUE!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SemanticAttributeWrongValueType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SemanticAttributeWrongValueType.java
new file mode 100644
index 0000000000000000000000000000000000000000..c2f49e3a9fb6aa41836d4d9798712444010386fd
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SemanticAttributeWrongValueType.java
@@ -0,0 +1,130 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für SEM_ATTRIBUTE_WRONG_VALUEType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="SEM_ATTRIBUTE_WRONG_VALUEType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractSemanticErrorType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="childId" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *         &lt;element name="attributeName" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *         &lt;element name="generic" type="{http://www.w3.org/2001/XMLSchema}boolean"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "SEM_ATTRIBUTE_WRONG_VALUEType", propOrder = {
+    "childId",
+    "attributeName",
+    "generic"
+})
+public class SemanticAttributeWrongValueType
+    extends AbstractSemanticErrorType
+{
+
+    @XmlElement(required = true)
+    protected String childId;
+    @XmlElement(required = true)
+    protected String attributeName;
+    protected boolean generic;
+
+    /**
+     * Ruft den Wert der childId-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getChildId() {
+        return childId;
+    }
+
+    /**
+     * Legt den Wert der childId-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setChildId(String value) {
+        this.childId = value;
+    }
+
+    public boolean isSetChildId() {
+        return (this.childId!= null);
+    }
+
+    /**
+     * Ruft den Wert der attributeName-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getAttributeName() {
+        return attributeName;
+    }
+
+    /**
+     * Legt den Wert der attributeName-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setAttributeName(String value) {
+        this.attributeName = value;
+    }
+
+    public boolean isSetAttributeName() {
+        return (this.attributeName!= null);
+    }
+
+    /**
+     * Ruft den Wert der generic-Eigenschaft ab.
+     * 
+     */
+    public boolean isGeneric() {
+        return generic;
+    }
+
+    /**
+     * Legt den Wert der generic-Eigenschaft fest.
+     * 
+     */
+    public void setGeneric(boolean value) {
+        this.generic = value;
+    }
+
+    public boolean isSetGeneric() {
+        return true;
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidAllPolygonsWrongOrientationPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidAllPolygonsWrongOrientationPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..faf364e630afa7f25d1214758d1c92ea7f60c3e9
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidAllPolygonsWrongOrientationPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_S_ALL_POLYGONS_WRONG_ORIENTATIONPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_S_ALL_POLYGONS_WRONG_ORIENTATIONPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GE_S_ALL_POLYGONS_WRONG_ORIENTATION"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_S_ALL_POLYGONS_WRONG_ORIENTATIONPropertyType", propOrder = {
+    "ge_S_ALL_POLYGONS_WRONG_ORIENTATION"
+})
+public class SolidAllPolygonsWrongOrientationPropertyType {
+
+    @XmlElement(name = "GE_S_ALL_POLYGONS_WRONG_ORIENTATION", required = true)
+    protected SolidAllPolygonsWrongOrientationType ge_S_ALL_POLYGONS_WRONG_ORIENTATION;
+
+    /**
+     * Ruft den Wert der ge_S_ALL_POLYGONS_WRONG_ORIENTATION-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link SolidAllPolygonsWrongOrientationType }
+     *     
+     */
+    public SolidAllPolygonsWrongOrientationType getGE_S_ALL_POLYGONS_WRONG_ORIENTATION() {
+        return ge_S_ALL_POLYGONS_WRONG_ORIENTATION;
+    }
+
+    /**
+     * Legt den Wert der ge_S_ALL_POLYGONS_WRONG_ORIENTATION-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link SolidAllPolygonsWrongOrientationType }
+     *     
+     */
+    public void setGE_S_ALL_POLYGONS_WRONG_ORIENTATION(SolidAllPolygonsWrongOrientationType value) {
+        this.ge_S_ALL_POLYGONS_WRONG_ORIENTATION = value;
+    }
+
+    public boolean isSetGE_S_ALL_POLYGONS_WRONG_ORIENTATION() {
+        return (this.ge_S_ALL_POLYGONS_WRONG_ORIENTATION!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidAllPolygonsWrongOrientationType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidAllPolygonsWrongOrientationType.java
new file mode 100644
index 0000000000000000000000000000000000000000..3513413d9a8ef76591d0cecd66966d45a08e2c45
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidAllPolygonsWrongOrientationType.java
@@ -0,0 +1,41 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_S_ALL_POLYGONS_WRONG_ORIENTATIONType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_S_ALL_POLYGONS_WRONG_ORIENTATIONType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractSolidErrorType"&gt;
+ *       &lt;sequence&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_S_ALL_POLYGONS_WRONG_ORIENTATIONType")
+public class SolidAllPolygonsWrongOrientationType
+    extends AbstractSolidErrorType
+{
+
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidMultipleConnectedComponentsPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidMultipleConnectedComponentsPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..f7548dd5e814c923092a619b10b0fd4412db31a4
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidMultipleConnectedComponentsPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_S_MULTIPLE_CONNECTED_COMPONENTSPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_S_MULTIPLE_CONNECTED_COMPONENTSPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GE_S_MULTIPLE_CONNECTED_COMPONENTS"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_S_MULTIPLE_CONNECTED_COMPONENTSPropertyType", propOrder = {
+    "ge_S_MULTIPLE_CONNECTED_COMPONENTS"
+})
+public class SolidMultipleConnectedComponentsPropertyType {
+
+    @XmlElement(name = "GE_S_MULTIPLE_CONNECTED_COMPONENTS", required = true)
+    protected SolidMultipleConnectedComponentsType ge_S_MULTIPLE_CONNECTED_COMPONENTS;
+
+    /**
+     * Ruft den Wert der ge_S_MULTIPLE_CONNECTED_COMPONENTS-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link SolidMultipleConnectedComponentsType }
+     *     
+     */
+    public SolidMultipleConnectedComponentsType getGE_S_MULTIPLE_CONNECTED_COMPONENTS() {
+        return ge_S_MULTIPLE_CONNECTED_COMPONENTS;
+    }
+
+    /**
+     * Legt den Wert der ge_S_MULTIPLE_CONNECTED_COMPONENTS-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link SolidMultipleConnectedComponentsType }
+     *     
+     */
+    public void setGE_S_MULTIPLE_CONNECTED_COMPONENTS(SolidMultipleConnectedComponentsType value) {
+        this.ge_S_MULTIPLE_CONNECTED_COMPONENTS = value;
+    }
+
+    public boolean isSetGE_S_MULTIPLE_CONNECTED_COMPONENTS() {
+        return (this.ge_S_MULTIPLE_CONNECTED_COMPONENTS!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidMultipleConnectedComponentsType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidMultipleConnectedComponentsType.java
new file mode 100644
index 0000000000000000000000000000000000000000..d01c2fb621f8e6e54a482f37d561b33ba53ba4c4
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidMultipleConnectedComponentsType.java
@@ -0,0 +1,86 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_S_MULTIPLE_CONNECTED_COMPONENTSType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_S_MULTIPLE_CONNECTED_COMPONENTSType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractSolidErrorType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="components" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}ComponentListPropertyType" maxOccurs="unbounded"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_S_MULTIPLE_CONNECTED_COMPONENTSType", propOrder = {
+    "components"
+})
+public class SolidMultipleConnectedComponentsType
+    extends AbstractSolidErrorType
+{
+
+    @XmlElement(required = true)
+    protected List<ComponentListPropertyType> components;
+
+    /**
+     * Gets the value of the components property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the components property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getComponents().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link ComponentListPropertyType }
+     * 
+     * 
+     */
+    public List<ComponentListPropertyType> getComponents() {
+        if (components == null) {
+            components = new ArrayList<ComponentListPropertyType>();
+        }
+        return this.components;
+    }
+
+    public boolean isSetComponents() {
+        return ((this.components!= null)&&(!this.components.isEmpty()));
+    }
+
+    public void unsetComponents() {
+        this.components = null;
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNonManifoldEdgePropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNonManifoldEdgePropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..1786163dad0465726d414f0878218dfea9c5ee40
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNonManifoldEdgePropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_S_NON_MANIFOLD_EDGEPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_S_NON_MANIFOLD_EDGEPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GE_S_NON_MANIFOLD_EDGE"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_S_NON_MANIFOLD_EDGEPropertyType", propOrder = {
+    "ge_S_NON_MANIFOLD_EDGE"
+})
+public class SolidNonManifoldEdgePropertyType {
+
+    @XmlElement(name = "GE_S_NON_MANIFOLD_EDGE", required = true)
+    protected SolidNonManifoldEdgeType ge_S_NON_MANIFOLD_EDGE;
+
+    /**
+     * Ruft den Wert der ge_S_NON_MANIFOLD_EDGE-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link SolidNonManifoldEdgeType }
+     *     
+     */
+    public SolidNonManifoldEdgeType getGE_S_NON_MANIFOLD_EDGE() {
+        return ge_S_NON_MANIFOLD_EDGE;
+    }
+
+    /**
+     * Legt den Wert der ge_S_NON_MANIFOLD_EDGE-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link SolidNonManifoldEdgeType }
+     *     
+     */
+    public void setGE_S_NON_MANIFOLD_EDGE(SolidNonManifoldEdgeType value) {
+        this.ge_S_NON_MANIFOLD_EDGE = value;
+    }
+
+    public boolean isSetGE_S_NON_MANIFOLD_EDGE() {
+        return (this.ge_S_NON_MANIFOLD_EDGE!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNonManifoldEdgeType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNonManifoldEdgeType.java
new file mode 100644
index 0000000000000000000000000000000000000000..2eb2a9ad8d2569b35376a4441d875f69ac9be2d7
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNonManifoldEdgeType.java
@@ -0,0 +1,75 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_S_NON_MANIFOLD_EDGEType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_S_NON_MANIFOLD_EDGEType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractSolidErrorType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="edges" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}EdgeListPropertyType"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_S_NON_MANIFOLD_EDGEType", propOrder = {
+    "edges"
+})
+public class SolidNonManifoldEdgeType
+    extends AbstractSolidErrorType
+{
+
+    @XmlElement(required = true)
+    protected EdgeListPropertyType edges;
+
+    /**
+     * Ruft den Wert der edges-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link EdgeListPropertyType }
+     *     
+     */
+    public EdgeListPropertyType getEdges() {
+        return edges;
+    }
+
+    /**
+     * Legt den Wert der edges-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link EdgeListPropertyType }
+     *     
+     */
+    public void setEdges(EdgeListPropertyType value) {
+        this.edges = value;
+    }
+
+    public boolean isSetEdges() {
+        return (this.edges!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNonManifoldVertexPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNonManifoldVertexPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..f7e545394c6a29c9a075610d99e6f8741c2b292a
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNonManifoldVertexPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_S_NON_MANIFOLD_VERTEXPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_S_NON_MANIFOLD_VERTEXPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GE_S_NON_MANIFOLD_VERTEX"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_S_NON_MANIFOLD_VERTEXPropertyType", propOrder = {
+    "ge_S_NON_MANIFOLD_VERTEX"
+})
+public class SolidNonManifoldVertexPropertyType {
+
+    @XmlElement(name = "GE_S_NON_MANIFOLD_VERTEX", required = true)
+    protected SolidNonManifoldVertexType ge_S_NON_MANIFOLD_VERTEX;
+
+    /**
+     * Ruft den Wert der ge_S_NON_MANIFOLD_VERTEX-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link SolidNonManifoldVertexType }
+     *     
+     */
+    public SolidNonManifoldVertexType getGE_S_NON_MANIFOLD_VERTEX() {
+        return ge_S_NON_MANIFOLD_VERTEX;
+    }
+
+    /**
+     * Legt den Wert der ge_S_NON_MANIFOLD_VERTEX-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link SolidNonManifoldVertexType }
+     *     
+     */
+    public void setGE_S_NON_MANIFOLD_VERTEX(SolidNonManifoldVertexType value) {
+        this.ge_S_NON_MANIFOLD_VERTEX = value;
+    }
+
+    public boolean isSetGE_S_NON_MANIFOLD_VERTEX() {
+        return (this.ge_S_NON_MANIFOLD_VERTEX!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNonManifoldVertexType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNonManifoldVertexType.java
new file mode 100644
index 0000000000000000000000000000000000000000..4ff0ecf0afbbbcf6d64c723468a1ef73c63b971f
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNonManifoldVertexType.java
@@ -0,0 +1,76 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import net.opengis.gml.DirectPositionType;
+
+
+/**
+ * <p>Java-Klasse für GE_S_NON_MANIFOLD_VERTEXType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_S_NON_MANIFOLD_VERTEXType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractSolidErrorType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="vertex" type="{http://www.opengis.net/gml}DirectPositionType"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_S_NON_MANIFOLD_VERTEXType", propOrder = {
+    "vertex"
+})
+public class SolidNonManifoldVertexType
+    extends AbstractSolidErrorType
+{
+
+    @XmlElement(required = true)
+    protected DirectPositionType vertex;
+
+    /**
+     * Ruft den Wert der vertex-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link DirectPositionType }
+     *     
+     */
+    public DirectPositionType getVertex() {
+        return vertex;
+    }
+
+    /**
+     * Legt den Wert der vertex-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link DirectPositionType }
+     *     
+     */
+    public void setVertex(DirectPositionType value) {
+        this.vertex = value;
+    }
+
+    public boolean isSetVertex() {
+        return (this.vertex!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNotClosedPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNotClosedPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..9ee46ced1dbf0bf642c90b3cf9a8f2b79950e7be
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNotClosedPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_S_NOT_CLOSEDPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_S_NOT_CLOSEDPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GE_S_NOT_CLOSED"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_S_NOT_CLOSEDPropertyType", propOrder = {
+    "ge_S_NOT_CLOSED"
+})
+public class SolidNotClosedPropertyType {
+
+    @XmlElement(name = "GE_S_NOT_CLOSED", required = true)
+    protected SolidNotClosedType ge_S_NOT_CLOSED;
+
+    /**
+     * Ruft den Wert der ge_S_NOT_CLOSED-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link SolidNotClosedType }
+     *     
+     */
+    public SolidNotClosedType getGE_S_NOT_CLOSED() {
+        return ge_S_NOT_CLOSED;
+    }
+
+    /**
+     * Legt den Wert der ge_S_NOT_CLOSED-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link SolidNotClosedType }
+     *     
+     */
+    public void setGE_S_NOT_CLOSED(SolidNotClosedType value) {
+        this.ge_S_NOT_CLOSED = value;
+    }
+
+    public boolean isSetGE_S_NOT_CLOSED() {
+        return (this.ge_S_NOT_CLOSED!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNotClosedType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNotClosedType.java
new file mode 100644
index 0000000000000000000000000000000000000000..809250b74a5e4cba159d7e69f1fddcfa2270b840
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNotClosedType.java
@@ -0,0 +1,75 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_S_NOT_CLOSEDType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_S_NOT_CLOSEDType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractSolidErrorType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="edges" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}EdgeListPropertyType"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_S_NOT_CLOSEDType", propOrder = {
+    "edges"
+})
+public class SolidNotClosedType
+    extends AbstractSolidErrorType
+{
+
+    @XmlElement(required = true)
+    protected EdgeListPropertyType edges;
+
+    /**
+     * Ruft den Wert der edges-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link EdgeListPropertyType }
+     *     
+     */
+    public EdgeListPropertyType getEdges() {
+        return edges;
+    }
+
+    /**
+     * Legt den Wert der edges-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link EdgeListPropertyType }
+     *     
+     */
+    public void setEdges(EdgeListPropertyType value) {
+        this.edges = value;
+    }
+
+    public boolean isSetEdges() {
+        return (this.edges!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidPolygonWrongOrientationPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidPolygonWrongOrientationPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..accd6c518c072c6e35259ea4cb6b496d5293285c
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidPolygonWrongOrientationPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_S_POLYGON_WRONG_ORIENTATIONPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_S_POLYGON_WRONG_ORIENTATIONPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GE_S_POLYGON_WRONG_ORIENTATION"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_S_POLYGON_WRONG_ORIENTATIONPropertyType", propOrder = {
+    "ge_S_POLYGON_WRONG_ORIENTATION"
+})
+public class SolidPolygonWrongOrientationPropertyType {
+
+    @XmlElement(name = "GE_S_POLYGON_WRONG_ORIENTATION", required = true)
+    protected SolidPolygonWrongOrientationType ge_S_POLYGON_WRONG_ORIENTATION;
+
+    /**
+     * Ruft den Wert der ge_S_POLYGON_WRONG_ORIENTATION-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link SolidPolygonWrongOrientationType }
+     *     
+     */
+    public SolidPolygonWrongOrientationType getGE_S_POLYGON_WRONG_ORIENTATION() {
+        return ge_S_POLYGON_WRONG_ORIENTATION;
+    }
+
+    /**
+     * Legt den Wert der ge_S_POLYGON_WRONG_ORIENTATION-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link SolidPolygonWrongOrientationType }
+     *     
+     */
+    public void setGE_S_POLYGON_WRONG_ORIENTATION(SolidPolygonWrongOrientationType value) {
+        this.ge_S_POLYGON_WRONG_ORIENTATION = value;
+    }
+
+    public boolean isSetGE_S_POLYGON_WRONG_ORIENTATION() {
+        return (this.ge_S_POLYGON_WRONG_ORIENTATION!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidPolygonWrongOrientationType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidPolygonWrongOrientationType.java
new file mode 100644
index 0000000000000000000000000000000000000000..700fc251a421bad81d4bda0881ed7ddc8ee74c57
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidPolygonWrongOrientationType.java
@@ -0,0 +1,75 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_S_POLYGON_WRONG_ORIENTATIONType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_S_POLYGON_WRONG_ORIENTATIONType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractSolidErrorType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="edges" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}EdgeListPropertyType"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_S_POLYGON_WRONG_ORIENTATIONType", propOrder = {
+    "edges"
+})
+public class SolidPolygonWrongOrientationType
+    extends AbstractSolidErrorType
+{
+
+    @XmlElement(required = true)
+    protected EdgeListPropertyType edges;
+
+    /**
+     * Ruft den Wert der edges-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link EdgeListPropertyType }
+     *     
+     */
+    public EdgeListPropertyType getEdges() {
+        return edges;
+    }
+
+    /**
+     * Legt den Wert der edges-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link EdgeListPropertyType }
+     *     
+     */
+    public void setEdges(EdgeListPropertyType value) {
+        this.edges = value;
+    }
+
+    public boolean isSetEdges() {
+        return (this.edges!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidSelfIntersectionPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidSelfIntersectionPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..a067543593e7f830f5154ec9789b94da682b7b6e
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidSelfIntersectionPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_S_SELF_INTERSECTIONPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_S_SELF_INTERSECTIONPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GE_S_SELF_INTERSECTION"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_S_SELF_INTERSECTIONPropertyType", propOrder = {
+    "ge_S_SELF_INTERSECTION"
+})
+public class SolidSelfIntersectionPropertyType {
+
+    @XmlElement(name = "GE_S_SELF_INTERSECTION", required = true)
+    protected SolidSelfIntersectionType ge_S_SELF_INTERSECTION;
+
+    /**
+     * Ruft den Wert der ge_S_SELF_INTERSECTION-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link SolidSelfIntersectionType }
+     *     
+     */
+    public SolidSelfIntersectionType getGE_S_SELF_INTERSECTION() {
+        return ge_S_SELF_INTERSECTION;
+    }
+
+    /**
+     * Legt den Wert der ge_S_SELF_INTERSECTION-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link SolidSelfIntersectionType }
+     *     
+     */
+    public void setGE_S_SELF_INTERSECTION(SolidSelfIntersectionType value) {
+        this.ge_S_SELF_INTERSECTION = value;
+    }
+
+    public boolean isSetGE_S_SELF_INTERSECTION() {
+        return (this.ge_S_SELF_INTERSECTION!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidSelfIntersectionType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidSelfIntersectionType.java
new file mode 100644
index 0000000000000000000000000000000000000000..070b67f3e89ebc6df3014889cf87d330e99e2191
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidSelfIntersectionType.java
@@ -0,0 +1,107 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_S_SELF_INTERSECTIONType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_S_SELF_INTERSECTIONType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractSolidErrorType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="polygonId1" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *         &lt;element name="polygonId2" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_S_SELF_INTERSECTIONType", propOrder = {
+    "polygonId1",
+    "polygonId2"
+})
+public class SolidSelfIntersectionType
+    extends AbstractSolidErrorType
+{
+
+    @XmlElement(required = true)
+    protected String polygonId1;
+    @XmlElement(required = true)
+    protected String polygonId2;
+
+    /**
+     * Ruft den Wert der polygonId1-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getPolygonId1() {
+        return polygonId1;
+    }
+
+    /**
+     * Legt den Wert der polygonId1-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setPolygonId1(String value) {
+        this.polygonId1 = value;
+    }
+
+    public boolean isSetPolygonId1() {
+        return (this.polygonId1 != null);
+    }
+
+    /**
+     * Ruft den Wert der polygonId2-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getPolygonId2() {
+        return polygonId2;
+    }
+
+    /**
+     * Legt den Wert der polygonId2-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setPolygonId2(String value) {
+        this.polygonId2 = value;
+    }
+
+    public boolean isSetPolygonId2() {
+        return (this.polygonId2 != null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidTooFewPolygonsPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidTooFewPolygonsPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..4868f2fdc45858a047d576886aa67648d4f9f9b7
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidTooFewPolygonsPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_S_TOO_FEW_POLYGONSPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_S_TOO_FEW_POLYGONSPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GE_S_TOO_FEW_POLYGONS"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_S_TOO_FEW_POLYGONSPropertyType", propOrder = {
+    "ge_S_TOO_FEW_POLYGONS"
+})
+public class SolidTooFewPolygonsPropertyType {
+
+    @XmlElement(name = "GE_S_TOO_FEW_POLYGONS", required = true)
+    protected SolidTooFewPolygonsType ge_S_TOO_FEW_POLYGONS;
+
+    /**
+     * Ruft den Wert der ge_S_TOO_FEW_POLYGONS-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link SolidTooFewPolygonsType }
+     *     
+     */
+    public SolidTooFewPolygonsType getGE_S_TOO_FEW_POLYGONS() {
+        return ge_S_TOO_FEW_POLYGONS;
+    }
+
+    /**
+     * Legt den Wert der ge_S_TOO_FEW_POLYGONS-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link SolidTooFewPolygonsType }
+     *     
+     */
+    public void setGE_S_TOO_FEW_POLYGONS(SolidTooFewPolygonsType value) {
+        this.ge_S_TOO_FEW_POLYGONS = value;
+    }
+
+    public boolean isSetGE_S_TOO_FEW_POLYGONS() {
+        return (this.ge_S_TOO_FEW_POLYGONS!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidTooFewPolygonsType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidTooFewPolygonsType.java
new file mode 100644
index 0000000000000000000000000000000000000000..5fa025aca62a854e1fa7195d11922b074d22b6dc
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/SolidTooFewPolygonsType.java
@@ -0,0 +1,41 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für GE_S_TOO_FEW_POLYGONSType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="GE_S_TOO_FEW_POLYGONSType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractSolidErrorType"&gt;
+ *       &lt;sequence&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GE_S_TOO_FEW_POLYGONSType")
+public class SolidTooFewPolygonsType
+    extends AbstractSolidErrorType
+{
+
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/StatisticsPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/StatisticsPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..8ecfa78760492bf943bd446fa07452667641d375
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/StatisticsPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für StatisticsPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="StatisticsPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}Statistics"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "StatisticsPropertyType", propOrder = {
+    "statistics"
+})
+public class StatisticsPropertyType {
+
+    @XmlElement(name = "Statistics", required = true)
+    protected StatisticsType statistics;
+
+    /**
+     * Ruft den Wert der statistics-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link StatisticsType }
+     *     
+     */
+    public StatisticsType getStatistics() {
+        return statistics;
+    }
+
+    /**
+     * Legt den Wert der statistics-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link StatisticsType }
+     *     
+     */
+    public void setStatistics(StatisticsType value) {
+        this.statistics = value;
+    }
+
+    public boolean isSetStatistics() {
+        return (this.statistics!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/StatisticsType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/StatisticsType.java
new file mode 100644
index 0000000000000000000000000000000000000000..44cfda0bc3e9841066821c8effef2b3aa5bef7fa
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/StatisticsType.java
@@ -0,0 +1,265 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für StatisticsType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="StatisticsType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="numErrorBuildings" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}FeatureStatisticsPropertyType"/&gt;
+ *         &lt;element name="numErrorVegetation" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}FeatureStatisticsPropertyType"/&gt;
+ *         &lt;element name="numErrorLandObjects" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}FeatureStatisticsPropertyType"/&gt;
+ *         &lt;element name="numErrorBridgeObjects" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}FeatureStatisticsPropertyType"/&gt;
+ *         &lt;element name="numErrorWaterObjects" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}FeatureStatisticsPropertyType"/&gt;
+ *         &lt;element name="numErrorTransportation" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}FeatureStatisticsPropertyType"/&gt;
+ *         &lt;element name="errorStatistics" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}ErrorStatisticsPropertyType"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "StatisticsType", propOrder = {
+    "numErrorBuildings",
+    "numErrorVegetation",
+    "numErrorLandObjects",
+    "numErrorBridgeObjects",
+    "numErrorWaterObjects",
+    "numErrorTransportation",
+    "errorStatistics"
+})
+public class StatisticsType {
+
+    @XmlElement(required = true)
+    protected FeatureStatisticsPropertyType numErrorBuildings;
+    @XmlElement(required = true)
+    protected FeatureStatisticsPropertyType numErrorVegetation;
+    @XmlElement(required = true)
+    protected FeatureStatisticsPropertyType numErrorLandObjects;
+    @XmlElement(required = true)
+    protected FeatureStatisticsPropertyType numErrorBridgeObjects;
+    @XmlElement(required = true)
+    protected FeatureStatisticsPropertyType numErrorWaterObjects;
+    @XmlElement(required = true)
+    protected FeatureStatisticsPropertyType numErrorTransportation;
+    @XmlElement(required = true)
+    protected ErrorStatisticsPropertyType errorStatistics;
+
+    /**
+     * Ruft den Wert der numErrorBuildings-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link FeatureStatisticsPropertyType }
+     *     
+     */
+    public FeatureStatisticsPropertyType getNumErrorBuildings() {
+        return numErrorBuildings;
+    }
+
+    /**
+     * Legt den Wert der numErrorBuildings-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link FeatureStatisticsPropertyType }
+     *     
+     */
+    public void setNumErrorBuildings(FeatureStatisticsPropertyType value) {
+        this.numErrorBuildings = value;
+    }
+
+    public boolean isSetNumErrorBuildings() {
+        return (this.numErrorBuildings!= null);
+    }
+
+    /**
+     * Ruft den Wert der numErrorVegetation-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link FeatureStatisticsPropertyType }
+     *     
+     */
+    public FeatureStatisticsPropertyType getNumErrorVegetation() {
+        return numErrorVegetation;
+    }
+
+    /**
+     * Legt den Wert der numErrorVegetation-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link FeatureStatisticsPropertyType }
+     *     
+     */
+    public void setNumErrorVegetation(FeatureStatisticsPropertyType value) {
+        this.numErrorVegetation = value;
+    }
+
+    public boolean isSetNumErrorVegetation() {
+        return (this.numErrorVegetation!= null);
+    }
+
+    /**
+     * Ruft den Wert der numErrorLandObjects-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link FeatureStatisticsPropertyType }
+     *     
+     */
+    public FeatureStatisticsPropertyType getNumErrorLandObjects() {
+        return numErrorLandObjects;
+    }
+
+    /**
+     * Legt den Wert der numErrorLandObjects-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link FeatureStatisticsPropertyType }
+     *     
+     */
+    public void setNumErrorLandObjects(FeatureStatisticsPropertyType value) {
+        this.numErrorLandObjects = value;
+    }
+
+    public boolean isSetNumErrorLandObjects() {
+        return (this.numErrorLandObjects!= null);
+    }
+
+    /**
+     * Ruft den Wert der numErrorBridgeObjects-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link FeatureStatisticsPropertyType }
+     *     
+     */
+    public FeatureStatisticsPropertyType getNumErrorBridgeObjects() {
+        return numErrorBridgeObjects;
+    }
+
+    /**
+     * Legt den Wert der numErrorBridgeObjects-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link FeatureStatisticsPropertyType }
+     *     
+     */
+    public void setNumErrorBridgeObjects(FeatureStatisticsPropertyType value) {
+        this.numErrorBridgeObjects = value;
+    }
+
+    public boolean isSetNumErrorBridgeObjects() {
+        return (this.numErrorBridgeObjects!= null);
+    }
+
+    /**
+     * Ruft den Wert der numErrorWaterObjects-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link FeatureStatisticsPropertyType }
+     *     
+     */
+    public FeatureStatisticsPropertyType getNumErrorWaterObjects() {
+        return numErrorWaterObjects;
+    }
+
+    /**
+     * Legt den Wert der numErrorWaterObjects-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link FeatureStatisticsPropertyType }
+     *     
+     */
+    public void setNumErrorWaterObjects(FeatureStatisticsPropertyType value) {
+        this.numErrorWaterObjects = value;
+    }
+
+    public boolean isSetNumErrorWaterObjects() {
+        return (this.numErrorWaterObjects!= null);
+    }
+
+    /**
+     * Ruft den Wert der numErrorTransportation-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link FeatureStatisticsPropertyType }
+     *     
+     */
+    public FeatureStatisticsPropertyType getNumErrorTransportation() {
+        return numErrorTransportation;
+    }
+
+    /**
+     * Legt den Wert der numErrorTransportation-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link FeatureStatisticsPropertyType }
+     *     
+     */
+    public void setNumErrorTransportation(FeatureStatisticsPropertyType value) {
+        this.numErrorTransportation = value;
+    }
+
+    public boolean isSetNumErrorTransportation() {
+        return (this.numErrorTransportation!= null);
+    }
+
+    /**
+     * Ruft den Wert der errorStatistics-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link ErrorStatisticsPropertyType }
+     *     
+     */
+    public ErrorStatisticsPropertyType getErrorStatistics() {
+        return errorStatistics;
+    }
+
+    /**
+     * Legt den Wert der errorStatistics-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link ErrorStatisticsPropertyType }
+     *     
+     */
+    public void setErrorStatistics(ErrorStatisticsPropertyType value) {
+        this.errorStatistics = value;
+    }
+
+    public boolean isSetErrorStatistics() {
+        return (this.errorStatistics!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationPlanPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationPlanPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..1e8a1334040d41dee74d46c7a6f56563da62f782
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationPlanPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für ValidationPlanPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="ValidationPlanPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}ValidationPlan"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ValidationPlanPropertyType", propOrder = {
+    "validationPlan"
+})
+public class ValidationPlanPropertyType {
+
+    @XmlElement(name = "ValidationPlan", required = true)
+    protected ValidationPlanType validationPlan;
+
+    /**
+     * Ruft den Wert der validationPlan-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link ValidationPlanType }
+     *     
+     */
+    public ValidationPlanType getValidationPlan() {
+        return validationPlan;
+    }
+
+    /**
+     * Legt den Wert der validationPlan-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link ValidationPlanType }
+     *     
+     */
+    public void setValidationPlan(ValidationPlanType value) {
+        this.validationPlan = value;
+    }
+
+    public boolean isSetValidationPlan() {
+        return (this.validationPlan!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationPlanType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationPlanType.java
new file mode 100644
index 0000000000000000000000000000000000000000..f4e350056b40a6fc54419becfec32dc222e5ff26
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationPlanType.java
@@ -0,0 +1,137 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für ValidationPlanType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="ValidationPlanType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="globalParameters" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}GlobalParametersPropertyType"/&gt;
+ *         &lt;element name="filter" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}FilterPropertyType"/&gt;
+ *         &lt;element name="requirement" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}RequirementPropertyType"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ValidationPlanType", propOrder = {
+    "globalParameters",
+    "filter",
+    "requirement"
+})
+public class ValidationPlanType {
+
+    @XmlElement(required = true)
+    protected GlobalParametersPropertyType globalParameters;
+    @XmlElement(required = true)
+    protected FilterPropertyType filter;
+    @XmlElement(required = true)
+    protected RequirementPropertyType requirement;
+
+    /**
+     * Ruft den Wert der globalParameters-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link GlobalParametersPropertyType }
+     *     
+     */
+    public GlobalParametersPropertyType getGlobalParameters() {
+        return globalParameters;
+    }
+
+    /**
+     * Legt den Wert der globalParameters-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link GlobalParametersPropertyType }
+     *     
+     */
+    public void setGlobalParameters(GlobalParametersPropertyType value) {
+        this.globalParameters = value;
+    }
+
+    public boolean isSetGlobalParameters() {
+        return (this.globalParameters!= null);
+    }
+
+    /**
+     * Ruft den Wert der filter-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link FilterPropertyType }
+     *     
+     */
+    public FilterPropertyType getFilter() {
+        return filter;
+    }
+
+    /**
+     * Legt den Wert der filter-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link FilterPropertyType }
+     *     
+     */
+    public void setFilter(FilterPropertyType value) {
+        this.filter = value;
+    }
+
+    public boolean isSetFilter() {
+        return (this.filter!= null);
+    }
+
+    /**
+     * Ruft den Wert der requirement-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link RequirementPropertyType }
+     *     
+     */
+    public RequirementPropertyType getRequirement() {
+        return requirement;
+    }
+
+    /**
+     * Legt den Wert der requirement-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link RequirementPropertyType }
+     *     
+     */
+    public void setRequirement(RequirementPropertyType value) {
+        this.requirement = value;
+    }
+
+    public boolean isSetRequirement() {
+        return (this.requirement!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..87c0d950af16c592830e241152a91c94261de7f4
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationPropertyType.java
@@ -0,0 +1,324 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import org.w3._1999.xlink.ActuateType;
+import org.w3._1999.xlink.ShowType;
+import org.w3._1999.xlink.TypeType;
+
+
+/**
+ * <p>Java-Klasse für ValidationPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="ValidationPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence minOccurs="0"&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}Validation"/&gt;
+ *       &lt;/sequence&gt;
+ *       &lt;attGroup ref="{http://www.opengis.net/gml}AssociationAttributeGroup"/&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ValidationPropertyType", propOrder = {
+    "validation"
+})
+public class ValidationPropertyType {
+
+    @XmlElement(name = "Validation")
+    protected ValidationType validation;
+    @XmlAttribute(name = "remoteSchema", namespace = "http://www.opengis.net/gml")
+    @XmlSchemaType(name = "anyURI")
+    protected String remoteSchema;
+    @XmlAttribute(name = "type", namespace = "http://www.w3.org/1999/xlink")
+    protected TypeType type;
+    @XmlAttribute(name = "href", namespace = "http://www.w3.org/1999/xlink")
+    protected String href;
+    @XmlAttribute(name = "role", namespace = "http://www.w3.org/1999/xlink")
+    protected String role;
+    @XmlAttribute(name = "arcrole", namespace = "http://www.w3.org/1999/xlink")
+    protected String arcrole;
+    @XmlAttribute(name = "title", namespace = "http://www.w3.org/1999/xlink")
+    protected String title;
+    @XmlAttribute(name = "show", namespace = "http://www.w3.org/1999/xlink")
+    protected ShowType show;
+    @XmlAttribute(name = "actuate", namespace = "http://www.w3.org/1999/xlink")
+    protected ActuateType actuate;
+
+    /**
+     * Ruft den Wert der validation-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link ValidationType }
+     *     
+     */
+    public ValidationType getValidation() {
+        return validation;
+    }
+
+    /**
+     * Legt den Wert der validation-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link ValidationType }
+     *     
+     */
+    public void setValidation(ValidationType value) {
+        this.validation = value;
+    }
+
+    public boolean isSetValidation() {
+        return (this.validation!= null);
+    }
+
+    /**
+     * Ruft den Wert der remoteSchema-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getRemoteSchema() {
+        return remoteSchema;
+    }
+
+    /**
+     * Legt den Wert der remoteSchema-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setRemoteSchema(String value) {
+        this.remoteSchema = value;
+    }
+
+    public boolean isSetRemoteSchema() {
+        return (this.remoteSchema!= null);
+    }
+
+    /**
+     * Ruft den Wert der type-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link TypeType }
+     *     
+     */
+    public TypeType getType() {
+        if (type == null) {
+            return TypeType.SIMPLE;
+        } else {
+            return type;
+        }
+    }
+
+    /**
+     * Legt den Wert der type-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link TypeType }
+     *     
+     */
+    public void setType(TypeType value) {
+        this.type = value;
+    }
+
+    public boolean isSetType() {
+        return (this.type!= null);
+    }
+
+    /**
+     * Ruft den Wert der href-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getHref() {
+        return href;
+    }
+
+    /**
+     * Legt den Wert der href-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setHref(String value) {
+        this.href = value;
+    }
+
+    public boolean isSetHref() {
+        return (this.href!= null);
+    }
+
+    /**
+     * Ruft den Wert der role-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getRole() {
+        return role;
+    }
+
+    /**
+     * Legt den Wert der role-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setRole(String value) {
+        this.role = value;
+    }
+
+    public boolean isSetRole() {
+        return (this.role!= null);
+    }
+
+    /**
+     * Ruft den Wert der arcrole-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getArcrole() {
+        return arcrole;
+    }
+
+    /**
+     * Legt den Wert der arcrole-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setArcrole(String value) {
+        this.arcrole = value;
+    }
+
+    public boolean isSetArcrole() {
+        return (this.arcrole!= null);
+    }
+
+    /**
+     * Ruft den Wert der title-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * Legt den Wert der title-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setTitle(String value) {
+        this.title = value;
+    }
+
+    public boolean isSetTitle() {
+        return (this.title!= null);
+    }
+
+    /**
+     * Ruft den Wert der show-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link ShowType }
+     *     
+     */
+    public ShowType getShow() {
+        return show;
+    }
+
+    /**
+     * Legt den Wert der show-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link ShowType }
+     *     
+     */
+    public void setShow(ShowType value) {
+        this.show = value;
+    }
+
+    public boolean isSetShow() {
+        return (this.show!= null);
+    }
+
+    /**
+     * Ruft den Wert der actuate-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link ActuateType }
+     *     
+     */
+    public ActuateType getActuate() {
+        return actuate;
+    }
+
+    /**
+     * Legt den Wert der actuate-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link ActuateType }
+     *     
+     */
+    public void setActuate(ActuateType value) {
+        this.actuate = value;
+    }
+
+    public boolean isSetActuate() {
+        return (this.actuate!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationResultPropertyType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationResultPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..ec07d19db53ff08ab9c21a0383b65b47309e49c4
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationResultPropertyType.java
@@ -0,0 +1,73 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für ValidationResultPropertyType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="ValidationResultPropertyType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element ref="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}ValidationResult"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ValidationResultPropertyType", propOrder = {
+    "validationResult"
+})
+public class ValidationResultPropertyType {
+
+    @XmlElement(name = "ValidationResult", required = true)
+    protected ValidationResultType validationResult;
+
+    /**
+     * Ruft den Wert der validationResult-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link ValidationResultType }
+     *     
+     */
+    public ValidationResultType getValidationResult() {
+        return validationResult;
+    }
+
+    /**
+     * Legt den Wert der validationResult-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link ValidationResultType }
+     *     
+     */
+    public void setValidationResult(ValidationResultType value) {
+        this.validationResult = value;
+    }
+
+    public boolean isSetValidationResult() {
+        return (this.validationResult!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationResultType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationResultType.java
new file mode 100644
index 0000000000000000000000000000000000000000..4532f61b51fb8e31f3311eaa3b3bf58c61aa799b
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationResultType.java
@@ -0,0 +1,149 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java-Klasse für ValidationResultType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="ValidationResultType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="validationPlanID" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}ValidationPropertyType"/&gt;
+ *         &lt;element name="error" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}AbstractErrorPropertyType" maxOccurs="unbounded" minOccurs="0"/&gt;
+ *         &lt;element name="resultType" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}ResultTypeType"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ValidationResultType", propOrder = {
+    "validationPlanID",
+    "error",
+    "resultType"
+})
+public class ValidationResultType {
+
+    @XmlElement(required = true)
+    protected ValidationPropertyType validationPlanID;
+    protected List<AbstractErrorPropertyType> error;
+    @XmlElement(required = true)
+    @XmlSchemaType(name = "string")
+    protected ResultTypeType resultType;
+
+    /**
+     * Ruft den Wert der validationPlanID-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link ValidationPropertyType }
+     *     
+     */
+    public ValidationPropertyType getValidationPlanID() {
+        return validationPlanID;
+    }
+
+    /**
+     * Legt den Wert der validationPlanID-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link ValidationPropertyType }
+     *     
+     */
+    public void setValidationPlanID(ValidationPropertyType value) {
+        this.validationPlanID = value;
+    }
+
+    public boolean isSetValidationPlanID() {
+        return (this.validationPlanID!= null);
+    }
+
+    /**
+     * Gets the value of the error property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the error property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getError().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link AbstractErrorPropertyType }
+     * 
+     * 
+     */
+    public List<AbstractErrorPropertyType> getError() {
+        if (error == null) {
+            error = new ArrayList<AbstractErrorPropertyType>();
+        }
+        return this.error;
+    }
+
+    public boolean isSetError() {
+        return ((this.error!= null)&&(!this.error.isEmpty()));
+    }
+
+    public void unsetError() {
+        this.error = null;
+    }
+
+    /**
+     * Ruft den Wert der resultType-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link ResultTypeType }
+     *     
+     */
+    public ResultTypeType getResultType() {
+        return resultType;
+    }
+
+    /**
+     * Legt den Wert der resultType-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link ResultTypeType }
+     *     
+     */
+    public void setResultType(ResultTypeType value) {
+        this.resultType = value;
+    }
+
+    public boolean isSetResultType() {
+        return (this.resultType!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationType.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationType.java
new file mode 100644
index 0000000000000000000000000000000000000000..198b0652b69f93af218685dc130b2879680c0046
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationType.java
@@ -0,0 +1,174 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.datatype.XMLGregorianCalendar;
+import net.opengis.gml.AbstractFeatureType;
+
+
+/**
+ * <p>Java-Klasse für ValidationType complex type.
+ * 
+ * <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
+ * 
+ * <pre>
+ * &lt;complexType name="ValidationType"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;extension base="{http://www.opengis.net/gml}AbstractFeatureType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="validationDate" type="{http://www.w3.org/2001/XMLSchema}dateTime"/&gt;
+ *         &lt;element name="validationSoftware" type="{http://www.w3.org/2001/XMLSchema}string"/&gt;
+ *         &lt;element name="statistics" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}StatisticsPropertyType" minOccurs="0"/&gt;
+ *         &lt;element name="validationPlan" type="{https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4}ValidationPlanPropertyType"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/extension&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ValidationType", propOrder = {
+    "validationDate",
+    "validationSoftware",
+    "statistics",
+    "validationPlan"
+})
+public class ValidationType
+    extends AbstractFeatureType
+{
+
+    @XmlElement(required = true)
+    @XmlSchemaType(name = "dateTime")
+    protected XMLGregorianCalendar validationDate;
+    @XmlElement(required = true)
+    protected String validationSoftware;
+    protected StatisticsPropertyType statistics;
+    @XmlElement(required = true)
+    protected ValidationPlanPropertyType validationPlan;
+
+    /**
+     * Ruft den Wert der validationDate-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public XMLGregorianCalendar getValidationDate() {
+        return validationDate;
+    }
+
+    /**
+     * Legt den Wert der validationDate-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link XMLGregorianCalendar }
+     *     
+     */
+    public void setValidationDate(XMLGregorianCalendar value) {
+        this.validationDate = value;
+    }
+
+    public boolean isSetValidationDate() {
+        return (this.validationDate!= null);
+    }
+
+    /**
+     * Ruft den Wert der validationSoftware-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getValidationSoftware() {
+        return validationSoftware;
+    }
+
+    /**
+     * Legt den Wert der validationSoftware-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setValidationSoftware(String value) {
+        this.validationSoftware = value;
+    }
+
+    public boolean isSetValidationSoftware() {
+        return (this.validationSoftware!= null);
+    }
+
+    /**
+     * Ruft den Wert der statistics-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link StatisticsPropertyType }
+     *     
+     */
+    public StatisticsPropertyType getStatistics() {
+        return statistics;
+    }
+
+    /**
+     * Legt den Wert der statistics-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link StatisticsPropertyType }
+     *     
+     */
+    public void setStatistics(StatisticsPropertyType value) {
+        this.statistics = value;
+    }
+
+    public boolean isSetStatistics() {
+        return (this.statistics!= null);
+    }
+
+    /**
+     * Ruft den Wert der validationPlan-Eigenschaft ab.
+     * 
+     * @return
+     *     possible object is
+     *     {@link ValidationPlanPropertyType }
+     *     
+     */
+    public ValidationPlanPropertyType getValidationPlan() {
+        return validationPlan;
+    }
+
+    /**
+     * Legt den Wert der validationPlan-Eigenschaft fest.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link ValidationPlanPropertyType }
+     *     
+     */
+    public void setValidationPlan(ValidationPlanPropertyType value) {
+        this.validationPlan = value;
+    }
+
+    public boolean isSetValidationPlan() {
+        return (this.validationPlan!= null);
+    }
+
+}
diff --git a/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/package-info.java b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/package-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..39249f116470d7d841e019e31000f4afe8a39a8c
--- /dev/null
+++ b/citygml4j-quality-ade/src-gen/main/java/de/hft/stuttgart/quality/model/jaxb/package-info.java
@@ -0,0 +1,11 @@
+//
+// Generated with ade-xjc - XML Schema binding compiler for CityGML ADEs, version 2.10.0
+// ade-xjc is part of the citygml4j project, see https://github.com/citygml4j
+// Any modifications to this file will be lost upon recompilation of the source
+// Generated: Fri Nov 19 14:36:13 CET 2021
+//
+
+@javax.xml.bind.annotation.XmlSchema(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED, xmlns = {
+    @javax.xml.bind.annotation.XmlNs(namespaceURI = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4", prefix = "qual")
+})
+package de.hft.stuttgart.quality.model.jaxb;
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 f1e7d58cdf742678cc3a8ed408f4cbc331ef53a0..83de6d3e96f78352f4f5e4ae39e09f47cc712326 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
@@ -1,5 +1,5 @@
-/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+/*
+ * Copyright 2021 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.
@@ -13,41 +13,63 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package de.hft.stuttgart.quality;
 
-import java.util.Collections;
-import java.util.List;
+package de.hft.stuttgart.quality;
 
+import de.hft.stuttgart.quality.bind.QualityADEMarshaller;
+import de.hft.stuttgart.quality.bind.QualityADEUnmarshaller;
 import org.citygml4j.model.citygml.ade.binding.ADEContext;
 import org.citygml4j.model.citygml.ade.binding.ADEMarshaller;
 import org.citygml4j.model.citygml.ade.binding.ADEUnmarshaller;
+import org.citygml4j.model.citygml.ade.binding.ADEWalker;
 import org.citygml4j.model.module.ade.ADEModule;
+import org.citygml4j.util.walker.FeatureFunctionWalker;
+import org.citygml4j.util.walker.FeatureWalker;
+import org.citygml4j.util.walker.GMLFunctionWalker;
+import org.citygml4j.util.walker.GMLWalker;
 
-import de.hft.stuttgart.quality.marshaller.QualityAdeMarshaller;
-import de.hft.stuttgart.quality.marshaller.QualityAdeUnmarshaller;
+import java.util.Collections;
+import java.util.List;
 
 public class QualityADEContext implements ADEContext {
-	
-	private final List<ADEModule> modules = Collections.singletonList(QualityADEModule.V0_1_3);
 
-	@Override
-	public List<ADEModule> getADEModules() {
-		return modules;
-	}
+    @Override
+    public List<ADEModule> getADEModules() {
+        return Collections.singletonList(QualityADEModule.v0_1_4);
+    }
+
+    @Override
+    public List<String> getModelPackageNames() {
+        return Collections.singletonList("de.hft.stuttgart.quality.model");
+    }
+
+    @Override
+    public ADEMarshaller createADEMarshaller() {
+        return new QualityADEMarshaller();
+    }
+
+    @Override
+    public ADEUnmarshaller createADEUnmarshaller() {
+        return new QualityADEUnmarshaller();
+    }
 
-	@Override
-	public List<String> getModelPackageNames() {
-		return Collections.singletonList("de.hft.stuttgart.quality.model");
-	}
+    @Override
+    public ADEWalker<FeatureWalker> createDefaultFeatureWalker() {
+        return new de.hft.stuttgart.quality.walker.FeatureWalker();
+    }
 
-	@Override
-	public ADEMarshaller createADEMarshaller() {
-		return new QualityAdeMarshaller();
-	}
+    @Override
+    public ADEWalker<GMLWalker> createDefaultGMLWalker() {
+        return new de.hft.stuttgart.quality.walker.GMLWalker();
+    }
 
-	@Override
-	public ADEUnmarshaller createADEUnmarshaller() {
-		return new QualityAdeUnmarshaller();
-	}
+    @Override
+    public <T> ADEWalker<FeatureFunctionWalker<T>> createDefaultFeatureFunctionWalker() {
+        return new de.hft.stuttgart.quality.walker.FeatureFunctionWalker<>();
+    }
 
+    @Override
+    public <T> ADEWalker<GMLFunctionWalker<T>> createDefaultGMLFunctionWalker() {
+        return new de.hft.stuttgart.quality.walker.GMLFunctionWalker<>();
+    }
 }
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 9270a2539ecc1c8915c3513663a16c15822639a3..bb90c3fbf3ab80ce6ff9a204eb96e6705c01cbe4 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
@@ -1,5 +1,5 @@
-/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+/*
+ * Copyright 2021 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.
@@ -13,69 +13,77 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package de.hft.stuttgart.quality;
 
+import de.hft.stuttgart.quality.model.Validation;
+import org.citygml4j.model.gml.feature.AbstractFeature;
+import org.citygml4j.model.module.ade.ADEModule;
+import org.citygml4j.model.module.citygml.CityGMLVersion;
+
+import javax.xml.namespace.QName;
 import java.net.URL;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import javax.xml.namespace.QName;
-
-import org.citygml4j.model.gml.feature.AbstractFeature;
-import org.citygml4j.model.module.ade.ADEModule;
-import org.citygml4j.model.module.citygml.CityGMLVersion;
-
 public class QualityADEModule extends ADEModule {
+    public static final QualityADEModule v0_1_4 = new QualityADEModule();
+    private final Map<String, Class<? extends AbstractFeature>> features;
 
-	public static final String NAMESPACE_URI = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3";
+    private QualityADEModule() {
+        super("https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4",
+                "qual",
+                CityGMLVersion.v2_0_0);
 
-	public static final QualityADEModule V0_1_3 = new QualityADEModule();
-	
-	private static final long serialVersionUID = -8208579547274734280L;
+        features = new HashMap<>();
+        features.put("Validation", Validation.class);
+    }
 
-	public QualityADEModule() {
-		super(NAMESPACE_URI, "qual", CityGMLVersion.v2_0_0);
-	}
-	
-	@Override
-	public URL getSchemaResource() {
-        return QualityADEContext.class.getResource("/qualityAde.xsd");
-	}
+    @Override
+    public URL getSchemaResource() {
+        return getClass().getResource("/de/hft/stuttgart/quality/schema/qualityAde.xsd");
+    }
 
-	@Override
-	public List<String> getJAXBPackageNames() {
-		return Collections.singletonList("de.hft.stuttgart.quality.model.jaxb");
-	}
+    @Override
+    public List<String> getJAXBPackageNames() {
+        return Collections.singletonList("de.hft.stuttgart.quality.model.jaxb");
+    }
 
-	@Override
-	public boolean hasFeatureProperty(String name) {
-		return false;
-	}
+    @Override
+    public boolean hasFeatureProperty(String name) {
+        return false;
+    }
 
-	@Override
-	public boolean hasFeature(String name) {
-		return false;
-	}
+    @Override
+    public boolean hasFeature(String name) {
+        return features.containsKey(name);
+    }
 
-	@Override
-	public Class<? extends AbstractFeature> getFeatureClass(String name) {
-		throw new IllegalStateException("No feature classes available");
-	}
+    @Override
+    public Class<? extends AbstractFeature> getFeatureClass(String name) {
+        return features.get(name);
+    }
 
-	@Override
-	public QName getFeatureName(Class<? extends AbstractFeature> featureClass) {
-        return null;
-	}
+    @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());
+            }
+        }
 
-	@Override
-	public Map<String, Class<? extends AbstractFeature>> getFeatures() {
-		return Collections.emptyMap();
-	}
+        return null;
+    }
 
-	@Override
-	public boolean isTopLevelFeature(String name) {
-		return false;
-	}
+    @Override
+    public Map<String, Class<? extends AbstractFeature>> getFeatures() {
+        return new HashMap<>(features);
+    }
 
+    @Override
+    public boolean isTopLevelFeature(String name) {
+        return true;
+    }
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/bind/QualityADEMarshaller.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/bind/QualityADEMarshaller.java
new file mode 100644
index 0000000000000000000000000000000000000000..2765b5edfe6f17bba2d1be0c756d5017f756aee7
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/bind/QualityADEMarshaller.java
@@ -0,0 +1,822 @@
+/*
+ * Copyright 2021 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.bind;
+
+import de.hft.stuttgart.quality.model.ErrorType;
+import de.hft.stuttgart.quality.model.*;
+import de.hft.stuttgart.quality.model.jaxb.RequirementType;
+import de.hft.stuttgart.quality.model.jaxb.*;
+import org.citygml4j.builder.jaxb.marshal.citygml.ade.ADEMarshallerHelper;
+import org.citygml4j.model.citygml.ade.binding.ADEMarshaller;
+import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
+import org.citygml4j.util.mapper.TypeMapper;
+import org.w3._1999.xlink.ActuateType;
+import org.w3._1999.xlink.ShowType;
+import org.w3._1999.xlink.TypeType;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.datatype.DatatypeConstants;
+import javax.xml.datatype.XMLGregorianCalendar;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+
+public class QualityADEMarshaller implements ADEMarshaller {
+    private final ObjectFactory factory = new ObjectFactory();
+    private TypeMapper<JAXBElement<?>> elementMapper;
+    private TypeMapper<Object> typeMapper;
+    private ADEMarshallerHelper helper;
+
+    private synchronized TypeMapper<JAXBElement<?>> getElementMapper() {
+        if (elementMapper == null) {
+            elementMapper = TypeMapper.<JAXBElement<?>>create()
+                    .with(PolygonHoleOutside.class, this::createPolygonHoleOutside)
+                    .with(PolygonInnerRingsNested.class, this::createPolygonInnerRingsNested)
+                    .with(PolygonInteriorDisconnected.class, this::createPolygonInteriorDisconnected)
+                    .with(PolygonIntersectingRings.class, this::createPolygonIntersectingRings)
+                    .with(PolygonNonPlanarDistancePlane.class, this::createPolygonNonPlanarDistancePlane)
+                    .with(PolygonNonPlanarNormalsDeviation.class, this::createPolygonNonPlanarNormalsDeviation)
+                    .with(PolygonOrientationRingsSame.class, this::createPolygonOrientationRingsSame)
+                    .with(RingConsecutivePointsSame.class, this::createRingConsecutivePointsSame)
+                    .with(RingNotClosed.class, this::createRingNotClosed)
+                    .with(RingSelfIntersection.class, this::createRingSelfIntersection)
+                    .with(RingTooFewPoints.class, this::createRingTooFewPoints)
+                    .with(SemanticAttributeMissing.class, this::createSemanticAttributeMissing)
+                    .with(SemanticAttributeWrongValue.class, this::createSemanticAttributeWrongValue)
+                    .with(SolidAllPolygonsWrongOrientation.class, this::createSolidAllPolygonsWrongOrientation)
+                    .with(SolidMultipleConnectedComponents.class, this::createSolidMultipleConnectedComponents)
+                    .with(SolidNonManifoldEdge.class, this::createSolidNonManifoldEdge)
+                    .with(SolidNonManifoldVertex.class, this::createSolidNonManifoldVertex)
+                    .with(SolidNotClosed.class, this::createSolidNotClosed)
+                    .with(SolidPolygonWrongOrientation.class, this::createSolidPolygonWrongOrientation)
+                    .with(SolidSelfIntersection.class, this::createSolidSelfIntersection)
+                    .with(SolidTooFewPolygons.class, this::createSolidTooFewPolygons)
+                    .with(Validation.class, this::createValidation)
+                    .with(ValidationResultPropertyElement.class, this::createValidationResultPropertyElement);
+        }
+
+        return elementMapper;
+    }
+
+    private synchronized TypeMapper<Object> getTypeMapper() {
+        if (typeMapper == null) {
+            typeMapper = TypeMapper.create()
+                    .with(Edge.class, this::marshalEdge)
+                    .with(ErrorStatistics.class, this::marshalErrorStatistics)
+                    .with(FeatureStatistics.class, this::marshalFeatureStatistics)
+                    .with(Filter.class, this::marshalFilter)
+                    .with(Parameter.class, this::marshalParameter)
+                    .with(PolygonHoleOutside.class, this::marshalPolygonHoleOutside)
+                    .with(PolygonInnerRingsNested.class, this::marshalPolygonInnerRingsNested)
+                    .with(PolygonInteriorDisconnected.class, this::marshalPolygonInteriorDisconnected)
+                    .with(PolygonIntersectingRings.class, this::marshalPolygonIntersectingRings)
+                    .with(PolygonNonPlanarDistancePlane.class, this::marshalPolygonNonPlanarDistancePlane)
+                    .with(PolygonNonPlanarNormalsDeviation.class, this::marshalPolygonNonPlanarNormalsDeviation)
+                    .with(PolygonOrientationRingsSame.class, this::marshalPolygonOrientationRingsSame)
+                    .with(Parameter.class, this::marshalParameter)
+                    .with(RingConsecutivePointsSame.class, this::marshalRingConsecutivePointsSame)
+                    .with(RingNotClosed.class, this::marshalRingNotClosed)
+                    .with(RingSelfIntersection.class, this::marshalRingSelfIntersection)
+                    .with(RingTooFewPoints.class, this::marshalRingTooFewPoints)
+                    .with(SemanticAttributeMissing.class, this::marshalSemanticAttributeMissing)
+                    .with(SemanticAttributeWrongValue.class, this::marshalSemanticAttributeWrongValue)
+                    .with(SolidAllPolygonsWrongOrientation.class, this::marshalSolidAllPolygonsWrongOrientation)
+                    .with(SolidMultipleConnectedComponents.class, this::marshalSolidMultipleConnectedComponents)
+                    .with(SolidNonManifoldEdge.class, this::marshalSolidNonManifoldEdge)
+                    .with(SolidNonManifoldVertex.class, this::marshalSolidNonManifoldVertex)
+                    .with(SolidNotClosed.class, this::marshalSolidNotClosed)
+                    .with(SolidPolygonWrongOrientation.class, this::marshalSolidPolygonWrongOrientation)
+                    .with(SolidSelfIntersection.class, this::marshalSolidSelfIntersection)
+                    .with(SolidTooFewPolygons.class, this::marshalSolidTooFewPolygons)
+                    .with(Statistics.class, this::marshalStatistics)
+                    .with(Validation.class, this::marshalValidation)
+                    .with(ValidationPlan.class, this::marshalValidationPlan)
+                    .with(ValidationProperty.class, this::marshalValidationProperty)
+                    .with(ValidationResult.class, this::marshalValidationResult)
+                    .with(ValidationResultProperty.class, this::marshalValidationResultProperty);
+        }
+
+        return typeMapper;
+    }
+
+    @Override
+    public void setADEMarshallerHelper(ADEMarshallerHelper helper) {
+        this.helper = helper;
+    }
+
+    @Override
+    public JAXBElement<?> marshalJAXBElement(ADEModelObject src) {
+        TypeMapper<JAXBElement<?>> elementMapper = getElementMapper();
+        return elementMapper != null ? elementMapper.apply(src) : null;
+    }
+
+    @Override
+    public Object marshal(ADEModelObject src) {
+        TypeMapper<Object> typeMapper = getTypeMapper();
+        return typeMapper != null ? typeMapper.apply(src) : null;
+    }
+
+    private void marshalAbstractPolygonError(AbstractPolygonError src, AbstractPolygonErrorType dest) {
+        if (src.getPolygonId() != null) {
+            dest.setPolygonId(src.getPolygonId());
+        }
+    }
+
+    private void marshalAbstractRingError(AbstractRingError src, AbstractRingErrorType dest) {
+        if (src.getLinearRingId() != null) {
+            dest.setLinearRingId(src.getLinearRingId());
+        }
+    }
+
+    private void marshalAbstractSolidError(AbstractSolidError src, AbstractSolidErrorType dest) {
+        if (src.getGeometryId() != null) {
+            dest.setGeometryId(src.getGeometryId());
+        }
+    }
+
+    private EdgeType marshalEdge(Edge src) {
+        EdgeType dest = factory.createEdgeType();
+
+        if (src.getFrom() != null) {
+            dest.setFrom(helper.getGMLMarshaller().marshalDirectPosition(src.getFrom()));
+        }
+
+        if (src.getTo() != null) {
+            dest.setTo(helper.getGMLMarshaller().marshalDirectPosition(src.getTo()));
+        }
+
+        return dest;
+    }
+
+    private ErrorStatisticsType marshalErrorStatistics(ErrorStatistics src) {
+        ErrorStatisticsType dest = factory.createErrorStatisticsType();
+
+        dest.setOccurrences(BigInteger.valueOf(src.getOccurrences()));
+
+        if (src.isSetErrors()) {
+            for (ErrorType errorType : src.getErrors()) {
+                de.hft.stuttgart.quality.model.jaxb.ErrorType error = factory.createErrorType();
+                error.setName(ErrorTypeType.fromValue(errorType.name()));
+                ErrorPropertyType property = factory.createErrorPropertyType();
+                property.setError(error);
+                dest.getError().add(property);
+            }
+        }
+
+        return dest;
+    }
+
+    private FeatureStatisticsType marshalFeatureStatistics(FeatureStatistics src) {
+        FeatureStatisticsType dest = factory.createFeatureStatisticsType();
+
+        dest.setNumChecked(BigInteger.valueOf(src.getNumChecked()));
+        dest.setNumErrors(BigInteger.valueOf(src.getNumErrors()));
+
+        return dest;
+    }
+
+    private FilterType marshalFilter(Filter src) {
+        FilterType dest = factory.createFilterType();
+
+        if (src.isSetFeatureTypes()) {
+            for (FeatureType featureType : src.getFeatureTypes()) {
+                CheckingType checking = factory.createCheckingType();
+                checking.setFeatureType(FeatureTypeType.fromValue(featureType.name()));
+                CheckingPropertyType property = factory.createCheckingPropertyType();
+                property.setChecking(checking);
+                dest.getChecking().add(property);
+            }
+        }
+
+        return dest;
+    }
+
+    private ParameterType marshalParameter(Parameter src) {
+        ParameterType dest = factory.createParameterType();
+
+        if (src.getName() != null) {
+            dest.setName(src.getName());
+        }
+
+        if (src.getUom() != null) {
+            dest.setUom(src.getUom());
+        }
+
+        if (src.getValue() != null) {
+            dest.setValue(src.getValue());
+        }
+
+        return dest;
+    }
+
+    private PolygonHoleOutsideType marshalPolygonHoleOutside(PolygonHoleOutside src) {
+        PolygonHoleOutsideType dest = factory.createPolygonHoleOutsideType();
+        marshalAbstractPolygonError(src, dest);
+
+        if (src.getLinearRingId() != null) {
+            dest.setLinearRingId(src.getLinearRingId());
+        }
+
+        return dest;
+    }
+
+    private PolygonInnerRingsNestedType marshalPolygonInnerRingsNested(PolygonInnerRingsNested src) {
+        PolygonInnerRingsNestedType dest = factory.createPolygonInnerRingsNestedType();
+        marshalAbstractPolygonError(src, dest);
+
+        if (src.getLinearRingId1() != null) {
+            dest.setLinearRingId1(src.getLinearRingId1());
+        }
+
+        if (src.getLinearRingId2() != null) {
+            dest.setLinearRingId2(src.getLinearRingId2());
+        }
+
+        return dest;
+    }
+
+    private PolygonInteriorDisconnectedType marshalPolygonInteriorDisconnected(PolygonInteriorDisconnected src) {
+        PolygonInteriorDisconnectedType dest = factory.createPolygonInteriorDisconnectedType();
+        marshalAbstractPolygonError(src, dest);
+        return dest;
+    }
+
+    private PolygonIntersectingRingsType marshalPolygonIntersectingRings(PolygonIntersectingRings src) {
+        PolygonIntersectingRingsType dest = factory.createPolygonIntersectingRingsType();
+        marshalAbstractPolygonError(src, dest);
+
+        if (src.getLinearRingId1() != null) {
+            dest.setLinearRingId1(src.getLinearRingId1());
+        }
+
+        if (src.getLinearRingId2() != null) {
+            dest.setLinearRingId2(src.getLinearRingId2());
+        }
+
+        return dest;
+    }
+
+    private PolygonNonPlanarDistancePlaneType marshalPolygonNonPlanarDistancePlane(PolygonNonPlanarDistancePlane src) {
+        PolygonNonPlanarDistancePlaneType dest = factory.createPolygonNonPlanarDistancePlaneType();
+        marshalAbstractPolygonError(src, dest);
+
+        if (src.getDistance() != null) {
+            dest.setDistance(helper.getGMLMarshaller().marshalLength(src.getDistance()));
+        }
+
+        if (src.getVertex() != null) {
+            dest.setVertex(helper.getGMLMarshaller().marshalDirectPosition(src.getVertex()));
+        }
+
+        return dest;
+    }
+
+    private PolygonNonPlanarNormalsDeviationType marshalPolygonNonPlanarNormalsDeviation(PolygonNonPlanarNormalsDeviation src) {
+        PolygonNonPlanarNormalsDeviationType dest = factory.createPolygonNonPlanarNormalsDeviationType();
+        marshalAbstractPolygonError(src, dest);
+
+        if (src.getDeviation() != null) {
+            dest.setDeviation(helper.getGMLMarshaller().marshalAngle(src.getDeviation()));
+        }
+
+        return dest;
+    }
+
+    private PolygonOrientationRingsSameType marshalPolygonOrientationRingsSame(PolygonOrientationRingsSame src) {
+        PolygonOrientationRingsSameType dest = factory.createPolygonOrientationRingsSameType();
+        marshalAbstractPolygonError(src, dest);
+
+        if (src.getLinearRingId() != null) {
+            dest.setLinearRingId(src.getLinearRingId());
+        }
+
+        return dest;
+    }
+
+    private RequirementType marshalRequirement(Requirement src) {
+        RequirementType dest = factory.createRequirementType();
+
+        dest.setEnabled(src.isEnabled());
+
+        if (src.getRequirementType() != null) {
+            dest.setRequirementType(RequirementTypeType.fromValue(src.getRequirementType().name()));
+        }
+
+        if (src.isSetParameters()) {
+            for (Parameter parameter : src.getParameters()) {
+                ParameterPropertyType property = factory.createParameterPropertyType();
+                property.setParameter(marshalParameter(parameter));
+                dest.getParameter().add(property);
+            }
+        }
+
+        return dest;
+    }
+
+    private RingConsecutivePointsSameType marshalRingConsecutivePointsSame(RingConsecutivePointsSame src) {
+        RingConsecutivePointsSameType dest = factory.createRingConsecutivePointsSameType();
+        marshalAbstractRingError(src, dest);
+
+        if (src.getVertex1() != null) {
+            dest.setVertex1(helper.getGMLMarshaller().marshalDirectPosition(src.getVertex1()));
+        }
+
+        if (src.getVertex2() != null) {
+            dest.setVertex2(helper.getGMLMarshaller().marshalDirectPosition(src.getVertex2()));
+        }
+
+        return dest;
+    }
+
+    private RingNotClosedType marshalRingNotClosed(RingNotClosed src) {
+        RingNotClosedType dest = factory.createRingNotClosedType();
+        marshalAbstractRingError(src, dest);
+        return dest;
+    }
+
+    private RingSelfIntersectionType marshalRingSelfIntersection(RingSelfIntersection src) {
+        RingSelfIntersectionType dest = factory.createRingSelfIntersectionType();
+        marshalAbstractRingError(src, dest);
+
+        if (src.getEdge1() != null) {
+            EdgePropertyType property = factory.createEdgePropertyType();
+            property.setEdge(marshalEdge(src.getEdge1()));
+            dest.setEdge1(property);
+        }
+
+        if (src.getEdge2() != null) {
+            EdgePropertyType property = factory.createEdgePropertyType();
+            property.setEdge(marshalEdge(src.getEdge2()));
+            dest.setEdge2(property);
+        }
+
+        if (src.getType() != null) {
+            dest.setType(src.getType());
+        }
+
+        if (src.getVertex() != null) {
+            dest.setVertex(helper.getGMLMarshaller().marshalDirectPosition(src.getVertex()));
+        }
+
+        return dest;
+    }
+
+    private RingTooFewPointsType marshalRingTooFewPoints(RingTooFewPoints src) {
+        RingTooFewPointsType dest = factory.createRingTooFewPointsType();
+        marshalAbstractRingError(src, dest);
+        return dest;
+    }
+
+    private SemanticAttributeMissingType marshalSemanticAttributeMissing(SemanticAttributeMissing src) {
+        SemanticAttributeMissingType dest = factory.createSemanticAttributeMissingType();
+
+        if (src.getAttributeName() != null) {
+            dest.setAttributeName(src.getAttributeName());
+        }
+
+        if (src.getChildId() != null) {
+            dest.setChildId(src.getChildId());
+        }
+
+        dest.setGeneric(src.isGeneric());
+
+        return dest;
+    }
+
+    private SemanticAttributeWrongValueType marshalSemanticAttributeWrongValue(SemanticAttributeWrongValue src) {
+        SemanticAttributeWrongValueType dest = factory.createSemanticAttributeWrongValueType();
+
+        if (src.getAttributeName() != null) {
+            dest.setAttributeName(src.getAttributeName());
+        }
+
+        if (src.getChildId() != null) {
+            dest.setChildId(src.getChildId());
+        }
+
+        dest.setGeneric(src.isGeneric());
+
+        return dest;
+    }
+
+    private SolidAllPolygonsWrongOrientationType marshalSolidAllPolygonsWrongOrientation(SolidAllPolygonsWrongOrientation src) {
+        SolidAllPolygonsWrongOrientationType dest = factory.createSolidAllPolygonsWrongOrientationType();
+        marshalAbstractSolidError(src, dest);
+        return dest;
+    }
+
+    private SolidMultipleConnectedComponentsType marshalSolidMultipleConnectedComponents(SolidMultipleConnectedComponents src) {
+        SolidMultipleConnectedComponentsType dest = factory.createSolidMultipleConnectedComponentsType();
+        marshalAbstractSolidError(src, dest);
+
+        if (src.isSetComponents()) {
+            for (Component component : src.getComponents()) {
+                ComponentListType componentList = factory.createComponentListType();
+                if (component.isSetPolygonIds()) {
+                    for (String polygonId : component.getPolygonIds()) {
+                        PolygonIdListType polygonIdList = factory.createPolygonIdListType();
+                        polygonIdList.setPolygonId(polygonId);
+                        PolygonIdListPropertyType property = factory.createPolygonIdListPropertyType();
+                        property.setPolygonIdList(polygonIdList);
+                        componentList.getComponent().add(property);
+                    }
+                }
+
+                ComponentListPropertyType property = factory.createComponentListPropertyType();
+                property.setComponentList(componentList);
+                dest.getComponents().add(property);
+            }
+        }
+
+        return dest;
+    }
+
+    private SolidNonManifoldEdgeType marshalSolidNonManifoldEdge(SolidNonManifoldEdge src) {
+        SolidNonManifoldEdgeType dest = factory.createSolidNonManifoldEdgeType();
+        marshalAbstractSolidError(src, dest);
+
+        if (src.isSetEdges()) {
+            EdgeListType edgeList = factory.createEdgeListType();
+            for (Edge edge : src.getEdges()) {
+                EdgePropertyType property = factory.createEdgePropertyType();
+                property.setEdge(marshalEdge(edge));
+                edgeList.getEdge().add(property);
+            }
+
+            EdgeListPropertyType property = factory.createEdgeListPropertyType();
+            dest.setEdges(property);
+        }
+
+        return dest;
+    }
+
+    private SolidNonManifoldVertexType marshalSolidNonManifoldVertex(SolidNonManifoldVertex src) {
+        SolidNonManifoldVertexType dest = factory.createSolidNonManifoldVertexType();
+        marshalAbstractSolidError(src, dest);
+
+        if (src.getVertex() != null) {
+            dest.setVertex(helper.getGMLMarshaller().marshalDirectPosition(src.getVertex()));
+        }
+
+        return dest;
+    }
+
+    private SolidNotClosedType marshalSolidNotClosed(SolidNotClosed src) {
+        SolidNotClosedType dest = factory.createSolidNotClosedType();
+        marshalAbstractSolidError(src, dest);
+
+        if (src.isSetEdges()) {
+            EdgeListType edgeList = factory.createEdgeListType();
+            for (Edge edge : src.getEdges()) {
+                EdgePropertyType property = factory.createEdgePropertyType();
+                property.setEdge(marshalEdge(edge));
+                edgeList.getEdge().add(property);
+            }
+
+            EdgeListPropertyType property = factory.createEdgeListPropertyType();
+            dest.setEdges(property);
+        }
+
+        return dest;
+    }
+
+    private SolidPolygonWrongOrientationType marshalSolidPolygonWrongOrientation(SolidPolygonWrongOrientation src) {
+        SolidPolygonWrongOrientationType dest = factory.createSolidPolygonWrongOrientationType();
+        marshalAbstractSolidError(src, dest);
+
+        if (src.isSetEdges()) {
+            EdgeListType edgeList = factory.createEdgeListType();
+            for (Edge edge : src.getEdges()) {
+                EdgePropertyType property = factory.createEdgePropertyType();
+                property.setEdge(marshalEdge(edge));
+                edgeList.getEdge().add(property);
+            }
+
+            EdgeListPropertyType property = factory.createEdgeListPropertyType();
+            dest.setEdges(property);
+        }
+
+        return dest;
+    }
+
+    private SolidSelfIntersectionType marshalSolidSelfIntersection(SolidSelfIntersection src) {
+        SolidSelfIntersectionType dest = factory.createSolidSelfIntersectionType();
+        marshalAbstractSolidError(src, dest);
+
+        if (src.getPolygonId1() != null) {
+            dest.setPolygonId1(src.getPolygonId1());
+        }
+
+        if (src.getPolygonId2() != null) {
+            dest.setPolygonId2(src.getPolygonId2());
+        }
+
+        return dest;
+    }
+
+    private SolidTooFewPolygonsType marshalSolidTooFewPolygons(SolidTooFewPolygons src) {
+        SolidTooFewPolygonsType dest = factory.createSolidTooFewPolygonsType();
+        marshalAbstractSolidError(src, dest);
+        return dest;
+    }
+
+    private StatisticsType marshalStatistics(Statistics src) {
+        StatisticsType dest = factory.createStatisticsType();
+
+        if (src.getNumErrorBridgeObjects() != null) {
+            FeatureStatisticsPropertyType property = factory.createFeatureStatisticsPropertyType();
+            property.setFeatureStatistics(marshalFeatureStatistics(src.getNumErrorBridgeObjects()));
+            dest.setNumErrorBridgeObjects(property);
+        }
+
+        if (src.getNumErrorBuildings() != null) {
+            FeatureStatisticsPropertyType property = factory.createFeatureStatisticsPropertyType();
+            property.setFeatureStatistics(marshalFeatureStatistics(src.getNumErrorBuildings()));
+            dest.setNumErrorBuildings(property);
+        }
+
+        if (src.getNumErrorLandObjects() != null) {
+            FeatureStatisticsPropertyType property = factory.createFeatureStatisticsPropertyType();
+            property.setFeatureStatistics(marshalFeatureStatistics(src.getNumErrorLandObjects()));
+            dest.setNumErrorLandObjects(property);
+        }
+
+        if (src.getNumErrorTransportation() != null) {
+            FeatureStatisticsPropertyType property = factory.createFeatureStatisticsPropertyType();
+            property.setFeatureStatistics(marshalFeatureStatistics(src.getNumErrorTransportation()));
+            dest.setNumErrorTransportation(property);
+        }
+
+        if (src.getNumErrorVegetation() != null) {
+            FeatureStatisticsPropertyType property = factory.createFeatureStatisticsPropertyType();
+            property.setFeatureStatistics(marshalFeatureStatistics(src.getNumErrorVegetation()));
+            dest.setNumErrorVegetation(property);
+        }
+
+        if (src.getNumErrorWaterObjects() != null) {
+            FeatureStatisticsPropertyType property = factory.createFeatureStatisticsPropertyType();
+            property.setFeatureStatistics(marshalFeatureStatistics(src.getNumErrorWaterObjects()));
+            dest.setNumErrorWaterObjects(property);
+        }
+
+        if (src.getErrorStatistics() != null) {
+            ErrorStatisticsPropertyType property = factory.createErrorStatisticsPropertyType();
+            property.setErrorStatistics(marshalErrorStatistics(src.getErrorStatistics()));
+            dest.setErrorStatistics(property);
+        }
+
+        return dest;
+    }
+
+    public ValidationType marshalValidation(Validation src) {
+        ValidationType dest = factory.createValidationType();
+        helper.getGMLMarshaller().marshalAbstractFeature(src, dest);
+
+        if (src.getValidationDate() != null) {
+            ZonedDateTime validationDate = src.getValidationDate();
+            XMLGregorianCalendar value = helper.getJAXBMarshaller().getDataTypeFactory().newXMLGregorianCalendar(
+                    validationDate.getYear(),
+                    validationDate.getMonthValue(),
+                    validationDate.getDayOfMonth(),
+                    validationDate.getHour(),
+                    validationDate.getMinute(),
+                    validationDate.getSecond(),
+                    DatatypeConstants.FIELD_UNDEFINED,
+                    validationDate.getOffset() != ZoneOffset.UTC ?
+                            validationDate.getOffset().getTotalSeconds() / 60 :
+                            DatatypeConstants.FIELD_UNDEFINED);
+
+            if (validationDate.getNano() != 0) {
+                value.setFractionalSecond(BigDecimal.valueOf(validationDate.getNano(), 9).stripTrailingZeros());
+            }
+
+            dest.setValidationDate(value);
+        }
+
+        if (src.getValidationSoftware() != null) {
+            dest.setValidationSoftware(src.getValidationSoftware());
+        }
+
+        if (src.getValidationPlan() != null) {
+            ValidationPlanPropertyType property = factory.createValidationPlanPropertyType();
+            property.setValidationPlan(marshalValidationPlan(src.getValidationPlan()));
+            dest.setValidationPlan(property);
+        }
+
+        if (src.getStatistics() != null) {
+            StatisticsPropertyType property = factory.createStatisticsPropertyType();
+            property.setStatistics(marshalStatistics(src.getStatistics()));
+            dest.setStatistics(property);
+        }
+
+        return dest;
+    }
+
+    public ValidationPlanType marshalValidationPlan(ValidationPlan src) {
+        ValidationPlanType dest = factory.createValidationPlanType();
+
+        if (src.isSetGlobalParameters()) {
+            GlobalParametersType globalParameters = factory.createGlobalParametersType();
+            for (Parameter parameter : src.getGlobalParameters()) {
+                ParameterPropertyType property = factory.createParameterPropertyType();
+                property.setParameter(marshalParameter(parameter));
+                globalParameters.getParameter().add(property);
+            }
+
+            GlobalParametersPropertyType property = factory.createGlobalParametersPropertyType();
+            property.setGlobalParameters(globalParameters);
+            dest.setGlobalParameters(property);
+        }
+
+        if (src.getFilter() != null) {
+            FilterPropertyType property = factory.createFilterPropertyType();
+            property.setFilter(marshalFilter(src.getFilter()));
+            dest.setFilter(property);
+        }
+
+        if (src.getRequirement() != null) {
+            RequirementPropertyType property = factory.createRequirementPropertyType();
+            property.setRequirement(marshalRequirement(src.getRequirement()));
+            dest.setRequirement(property);
+        }
+
+        return dest;
+    }
+
+    public ValidationPropertyType marshalValidationProperty(ValidationProperty src) {
+        ValidationPropertyType dest = factory.createValidationPropertyType();
+
+        if (src.isSetFeature()) {
+            dest.setValidation(marshalValidation(src.getFeature()));
+        }
+
+        if (src.isSetRemoteSchema())
+            dest.setRemoteSchema(src.getRemoteSchema());
+
+        if (src.isSetType())
+            dest.setType(TypeType.fromValue(src.getType().getValue()));
+
+        if (src.isSetHref())
+            dest.setHref(src.getHref());
+
+        if (src.isSetRole())
+            dest.setRole(src.getRole());
+
+        if (src.isSetArcrole())
+            dest.setArcrole(src.getArcrole());
+
+        if (src.isSetTitle())
+            dest.setTitle(src.getTitle());
+
+        if (src.isSetShow())
+            dest.setShow(ShowType.fromValue(src.getShow().getValue()));
+
+        if (src.isSetActuate())
+            dest.setActuate(ActuateType.fromValue(src.getActuate().getValue()));
+
+        return dest;
+    }
+
+    @SuppressWarnings("unchecked")
+    private ValidationResultType marshalValidationResult(ValidationResult src) {
+        ValidationResultType dest = factory.createValidationResultType();
+
+        if (src.getValidation() != null) {
+            dest.setValidationPlanID(marshalValidationProperty(src.getValidation()));
+        }
+
+        if (src.isSetErrors()) {
+            for (AbstractError error : src.getErrors()) {
+                JAXBElement<?> element = helper.getJAXBMarshaller().marshalJAXBElement(error);
+                if (element != null && element.getValue() instanceof AbstractErrorType) {
+                    AbstractErrorPropertyType property = factory.createAbstractErrorPropertyType();
+                    property.setAbstractError((JAXBElement<? extends AbstractErrorType> ) element);
+                    dest.getError().add(property);
+                }
+            }
+        }
+
+        if (src.getResultType() != null) {
+            dest.setResultType(ResultTypeType.fromValue(src.getResultType().name()));
+        }
+
+        return dest;
+    }
+
+    public ValidationResultPropertyType marshalValidationResultProperty(ValidationResultProperty src) {
+        ValidationResultPropertyType dest = factory.createValidationResultPropertyType();
+
+        if (src.isSetObject()) {
+            dest.setValidationResult(marshalValidationResult(src.getObject()));
+        }
+
+        return dest;
+    }
+
+    private JAXBElement<?> createPolygonHoleOutside(PolygonHoleOutside src) {
+        return factory.createPolygonHoleOutside(marshalPolygonHoleOutside(src));
+    }
+
+    private JAXBElement<?> createPolygonInnerRingsNested(PolygonInnerRingsNested src) {
+        return factory.createPolygonInnerRingsNested(marshalPolygonInnerRingsNested(src));
+    }
+
+    private JAXBElement<?> createPolygonInteriorDisconnected(PolygonInteriorDisconnected src) {
+        return factory.createPolygonInteriorDisconnected(marshalPolygonInteriorDisconnected(src));
+    }
+
+    private JAXBElement<?> createPolygonIntersectingRings(PolygonIntersectingRings src) {
+        return factory.createPolygonIntersectingRings(marshalPolygonIntersectingRings(src));
+    }
+
+    private JAXBElement<?> createPolygonNonPlanarDistancePlane(PolygonNonPlanarDistancePlane src) {
+        return factory.createPolygonNonPlanarDistancePlane(marshalPolygonNonPlanarDistancePlane(src));
+    }
+
+    private JAXBElement<?> createPolygonNonPlanarNormalsDeviation(PolygonNonPlanarNormalsDeviation src) {
+        return factory.createPolygonNonPlanarNormalsDeviation(marshalPolygonNonPlanarNormalsDeviation(src));
+    }
+
+    private JAXBElement<?> createPolygonOrientationRingsSame(PolygonOrientationRingsSame src) {
+        return factory.createPolygonOrientationRingsSame(marshalPolygonOrientationRingsSame(src));
+    }
+
+    private JAXBElement<?> createRingConsecutivePointsSame(RingConsecutivePointsSame src) {
+        return factory.createRingConsecutivePointsSame(marshalRingConsecutivePointsSame(src));
+    }
+
+    private JAXBElement<?> createRingNotClosed(RingNotClosed src) {
+        return factory.createRingNotClosed(marshalRingNotClosed(src));
+    }
+
+    private JAXBElement<?> createRingSelfIntersection(RingSelfIntersection src) {
+        return factory.createRingSelfIntersection(marshalRingSelfIntersection(src));
+    }
+
+    private JAXBElement<?> createRingTooFewPoints(RingTooFewPoints src) {
+        return factory.createRingTooFewPoints(marshalRingTooFewPoints(src));
+    }
+
+    private JAXBElement<?> createSemanticAttributeMissing(SemanticAttributeMissing src) {
+        return factory.createSemanticAttributeMissing(marshalSemanticAttributeMissing(src));
+    }
+
+    private JAXBElement<?> createSemanticAttributeWrongValue(SemanticAttributeWrongValue src) {
+        return factory.createSemanticAttributeWrongValue(marshalSemanticAttributeWrongValue(src));
+    }
+
+    private JAXBElement<?> createSolidAllPolygonsWrongOrientation(SolidAllPolygonsWrongOrientation src) {
+        return factory.createSolidAllPolygonsWrongOrientation(marshalSolidAllPolygonsWrongOrientation(src));
+    }
+
+    private JAXBElement<?> createSolidMultipleConnectedComponents(SolidMultipleConnectedComponents src) {
+        return factory.createSolidMultipleConnectedComponents(marshalSolidMultipleConnectedComponents(src));
+    }
+
+    private JAXBElement<?> createSolidNonManifoldEdge(SolidNonManifoldEdge src) {
+        return factory.createSolidNonManifoldEdge(marshalSolidNonManifoldEdge(src));
+    }
+
+    private JAXBElement<?> createSolidNonManifoldVertex(SolidNonManifoldVertex src) {
+        return factory.createSolidNonManifoldVertex(marshalSolidNonManifoldVertex(src));
+    }
+
+    private JAXBElement<?> createSolidNotClosed(SolidNotClosed src) {
+        return factory.createSolidNotClosed(marshalSolidNotClosed(src));
+    }
+
+    private JAXBElement<?> createSolidPolygonWrongOrientation(SolidPolygonWrongOrientation src) {
+        return factory.createSolidPolygonWrongOrientation(marshalSolidPolygonWrongOrientation(src));
+    }
+
+    private JAXBElement<?> createSolidSelfIntersection(SolidSelfIntersection src) {
+        return factory.createSolidSelfIntersection(marshalSolidSelfIntersection(src));
+    }
+
+    private JAXBElement<?> createSolidTooFewPolygons(SolidTooFewPolygons src) {
+        return factory.createSolidTooFewPolygons(marshalSolidTooFewPolygons(src));
+    }
+
+    public JAXBElement<?> createValidation(Validation src) {
+        return factory.createValidation(marshalValidation(src));
+    }
+
+    public JAXBElement<?> createValidationResultPropertyElement(ValidationResultPropertyElement src) {
+        return factory.createValidationResultProperty(marshalValidationResultProperty(src.getValue()));
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/bind/QualityADEUnmarshaller.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/bind/QualityADEUnmarshaller.java
new file mode 100644
index 0000000000000000000000000000000000000000..1cb06907c421291357001eb2e1c4d0a813dc06de
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/bind/QualityADEUnmarshaller.java
@@ -0,0 +1,674 @@
+/*
+ * Copyright 2021 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.bind;
+
+import de.hft.stuttgart.quality.model.ErrorType;
+import de.hft.stuttgart.quality.model.RequirementType;
+import de.hft.stuttgart.quality.model.*;
+import de.hft.stuttgart.quality.model.jaxb.*;
+import org.citygml4j.builder.jaxb.unmarshal.citygml.ade.ADEUnmarshallerHelper;
+import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
+import org.citygml4j.model.citygml.ade.binding.ADEUnmarshaller;
+import org.citygml4j.model.common.base.ModelObject;
+import org.citygml4j.model.gml.xlink.XLinkActuate;
+import org.citygml4j.model.gml.xlink.XLinkShow;
+import org.citygml4j.model.gml.xlink.XLinkType;
+import org.citygml4j.util.mapper.CheckedTypeMapper;
+import org.citygml4j.xml.io.reader.MissingADESchemaException;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.datatype.DatatypeConstants;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+public class QualityADEUnmarshaller implements ADEUnmarshaller {
+    private CheckedTypeMapper<ADEModelObject> typeMapper;
+    private ADEUnmarshallerHelper helper;
+
+    private synchronized CheckedTypeMapper<ADEModelObject> getTypeMapper() {
+        if (typeMapper == null) {
+            typeMapper = CheckedTypeMapper.<ADEModelObject>create()
+                    .with(EdgeType.class, this::unmarshalEdge)
+                    .with(ErrorStatisticsType.class, this::unmarshalErrorStatistics)
+                    .with(FeatureStatisticsType.class, this::unmarshalFeatureStatistics)
+                    .with(FilterType.class, this::unmarshalFilter)
+                    .with(ParameterType.class, this::unmarshalParameter)
+                    .with(PolygonHoleOutsideType.class, this::unmarshalPolygonHoleOutside)
+                    .with(PolygonInnerRingsNestedType.class, this::unmarshalPolygonInnerRingsNested)
+                    .with(PolygonInteriorDisconnectedType.class, this::unmarshalPolygonInteriorDisconnected)
+                    .with(PolygonIntersectingRingsType.class, this::unmarshalPolygonIntersectingRings)
+                    .with(PolygonNonPlanarDistancePlaneType.class, this::unmarshalPolygonNonPlanarDistancePlane)
+                    .with(PolygonNonPlanarNormalsDeviationType.class, this::unmarshalPolygonNonPlanarNormalsDeviation)
+                    .with(PolygonOrientationRingsSameType.class, this::unmarshalPolygonOrientationRingsSame)
+                    .with(de.hft.stuttgart.quality.model.jaxb.RequirementType.class, this::unmarshalRequirement)
+                    .with(RingConsecutivePointsSameType.class, this::unmarshalRingConsecutivePointsSame)
+                    .with(RingNotClosedType.class, this::unmarshalRingNotClosed)
+                    .with(RingSelfIntersectionType.class, this::unmarshalRingSelfIntersection)
+                    .with(RingTooFewPointsType.class, this::unmarshalRingTooFewPoints)
+                    .with(SemanticAttributeMissingType.class, this::unmarshalSemanticAttributeMissing)
+                    .with(SemanticAttributeWrongValueType.class, this::unmarshalSemanticAttributeWrongValue)
+                    .with(SolidAllPolygonsWrongOrientationType.class, this::unmarshalSolidAllPolygonsWrongOrientation)
+                    .with(SolidMultipleConnectedComponentsType.class, this::unmarshalSolidMultipleConnectedComponents)
+                    .with(SolidNonManifoldEdgeType.class, this::unmarshalSolidNonManifoldEdge)
+                    .with(SolidNonManifoldVertexType.class, this::unmarshalSolidNonManifoldVertex)
+                    .with(SolidNotClosedType.class, this::unmarshalSolidNotClosed)
+                    .with(SolidPolygonWrongOrientationType.class, this::unmarshalSolidPolygonWrongOrientation)
+                    .with(SolidSelfIntersectionType.class, this::unmarshalSolidSelfIntersection)
+                    .with(SolidTooFewPolygonsType.class, this::unmarshalSolidTooFewPolygons)
+                    .with(StatisticsType.class, this::unmarshalStatistics)
+                    .with(ValidationType.class, this::unmarshalValidation)
+                    .with(ValidationPlanType.class, this::unmarshalValidationPlan)
+                    .with(ValidationPropertyType.class, this::unmarshalValidationProperty)
+                    .with(ValidationResultType.class, this::unmarshalValidationResult)
+                    .with(ValidationResultPropertyType.class, this::unmarshalValidationResultProperty);
+        }
+
+        return typeMapper;
+    }
+
+    @Override
+    public void setADEUnmarshallerHelper(ADEUnmarshallerHelper helper) {
+        this.helper = helper;
+    }
+
+    @Override
+    public ADEModelObject unmarshal(JAXBElement<?> src) throws MissingADESchemaException {
+        final Object value = src.getValue();
+
+        // generic application properties
+        if ("validationResult".equals(src.getName().getLocalPart())) {
+            return new ValidationResultPropertyElement(unmarshalValidationResultProperty((ValidationResultPropertyType) src.getValue()));
+        } else {
+            return unmarshal(value);
+        }
+    }
+
+    @Override
+    public ADEModelObject unmarshal(Object src) throws MissingADESchemaException {
+        CheckedTypeMapper<ADEModelObject> typeMapper = getTypeMapper();
+        return typeMapper != null ? typeMapper.apply(src) : null;
+    }
+
+    private void unmarshalAbstractPolygonError(AbstractPolygonErrorType src, AbstractPolygonError dest) {
+        if (src.isSetPolygonId()) {
+            dest.setPolygonId(src.getPolygonId());
+        }
+    }
+
+    private void unmarshalAbstractRingError(AbstractRingErrorType src, AbstractRingError dest) {
+        if (src.isSetLinearRingId()) {
+            dest.setLinearRingId(src.getLinearRingId());
+        }
+    }
+
+    private void unmarshalAbstractSolidError(AbstractSolidErrorType src, AbstractSolidError dest) {
+        if (src.isSetGeometryId()) {
+            dest.setGeometryId(src.getGeometryId());
+        }
+    }
+
+    private Edge unmarshalEdge(EdgeType src) {
+        Edge dest = new Edge();
+
+        if (src.isSetFrom()) {
+            dest.setFrom(helper.getGMLUnmarshaller().unmarshalDirectPosition(src.getFrom()));
+        }
+
+        if (src.isSetTo()) {
+            dest.setTo(helper.getGMLUnmarshaller().unmarshalDirectPosition(src.getTo()));
+        }
+
+        return dest;
+    }
+
+    private ErrorStatistics unmarshalErrorStatistics(ErrorStatisticsType src) {
+        ErrorStatistics dest = new ErrorStatistics();
+
+        if (src.isSetOccurrences()) {
+            dest.setOccurrences(src.getOccurrences().intValue());
+        }
+
+        if (src.isSetError()) {
+            for (ErrorPropertyType property : src.getError()) {
+                if (property.isSetError() && property.getError().isSetName()) {
+                    dest.getErrors().add(ErrorType.fromValue(property.getError().getName().value()));
+                }
+            }
+        }
+
+        return dest;
+    }
+
+    private FeatureStatistics unmarshalFeatureStatistics(FeatureStatisticsType src) {
+        FeatureStatistics dest = new FeatureStatistics();
+
+        if (src.isSetNumChecked()) {
+            dest.setNumChecked(src.getNumChecked().intValue());
+        }
+
+        if (src.isSetNumErrors()) {
+            dest.setNumErrors(src.getNumErrors().intValue());
+        }
+
+        return dest;
+    }
+
+    private Filter unmarshalFilter(FilterType src) {
+        Filter dest = new Filter();
+
+        if (src.isSetChecking()) {
+            for (CheckingPropertyType property : src.getChecking()) {
+                if (property.isSetChecking()
+                        && property.getChecking().isSetFeatureType()) {
+                    dest.getFeatureTypes().add(FeatureType.fromValue(property.getChecking().getFeatureType().value()));
+                }
+            }
+        }
+
+        return dest;
+    }
+
+    private Parameter unmarshalParameter(ParameterType src) {
+        Parameter dest = new Parameter();
+
+        if (src.isSetName()) {
+            dest.setName(src.getName());
+        }
+
+        if (src.isSetUom()) {
+            dest.setUom(src.getUom());
+        }
+
+        if (src.isSetValue()) {
+            dest.setValue(src.getValue());
+        }
+
+        return dest;
+    }
+
+    private PolygonHoleOutside unmarshalPolygonHoleOutside(PolygonHoleOutsideType src) {
+        PolygonHoleOutside dest = new PolygonHoleOutside();
+        unmarshalAbstractPolygonError(src, dest);
+
+        if (src.isSetLinearRingId()) {
+            dest.setLinearRingId(src.getLinearRingId());
+        }
+
+        return dest;
+    }
+
+    private PolygonInnerRingsNested unmarshalPolygonInnerRingsNested(PolygonInnerRingsNestedType src) {
+        PolygonInnerRingsNested dest = new PolygonInnerRingsNested();
+        unmarshalAbstractPolygonError(src, dest);
+
+        if (src.isSetLinearRingId1()) {
+            dest.setLinearRingId1(src.getLinearRingId1());
+        }
+
+        if (src.isSetLinearRingId2()) {
+            dest.setLinearRingId2(src.getLinearRingId2());
+        }
+
+        return dest;
+    }
+
+    private PolygonInteriorDisconnected unmarshalPolygonInteriorDisconnected(PolygonInteriorDisconnectedType src) {
+        PolygonInteriorDisconnected dest = new PolygonInteriorDisconnected();
+        unmarshalAbstractPolygonError(src, dest);
+        return dest;
+    }
+
+    private PolygonIntersectingRings unmarshalPolygonIntersectingRings(PolygonIntersectingRingsType src) {
+        PolygonIntersectingRings dest = new PolygonIntersectingRings();
+        unmarshalAbstractPolygonError(src, dest);
+
+        if (src.isSetLinearRingId1()) {
+            dest.setLinearRingId1(src.getLinearRingId1());
+        }
+
+        if (src.isSetLinearRingId2()) {
+            dest.setLinearRingId2(src.getLinearRingId2());
+        }
+
+        return dest;
+    }
+
+    private PolygonNonPlanarDistancePlane unmarshalPolygonNonPlanarDistancePlane(PolygonNonPlanarDistancePlaneType src) {
+        PolygonNonPlanarDistancePlane dest = new PolygonNonPlanarDistancePlane();
+        unmarshalAbstractPolygonError(src, dest);
+
+        if (src.isSetDistance()) {
+            dest.setDistance(helper.getGMLUnmarshaller().unmarshalLength(src.getDistance()));
+        }
+
+        if (src.isSetVertex()) {
+            dest.setVertex(helper.getGMLUnmarshaller().unmarshalDirectPosition(src.getVertex()));
+        }
+
+        return dest;
+    }
+
+    private PolygonNonPlanarNormalsDeviation unmarshalPolygonNonPlanarNormalsDeviation(PolygonNonPlanarNormalsDeviationType src) {
+        PolygonNonPlanarNormalsDeviation dest = new PolygonNonPlanarNormalsDeviation();
+        unmarshalAbstractPolygonError(src, dest);
+
+        if (src.isSetDeviation()) {
+            dest.setDeviation(helper.getGMLUnmarshaller().unmarshalAngle(src.getDeviation()));
+        }
+
+        return dest;
+    }
+
+    private PolygonOrientationRingsSame unmarshalPolygonOrientationRingsSame(PolygonOrientationRingsSameType src) {
+        PolygonOrientationRingsSame dest = new PolygonOrientationRingsSame();
+        unmarshalAbstractPolygonError(src, dest);
+
+        if (src.isSetLinearRingId()) {
+            dest.setLinearRingId(src.getLinearRingId());
+        }
+
+        return dest;
+    }
+
+    private Requirement unmarshalRequirement(de.hft.stuttgart.quality.model.jaxb.RequirementType src) {
+        Requirement dest = new Requirement();
+
+        dest.setEnabled(src.isEnabled());
+
+        if (src.isSetRequirementType()) {
+            dest.setRequirementType(RequirementType.fromValue(src.getRequirementType().value()));
+        }
+
+        if (src.isSetParameter()) {
+            for (ParameterPropertyType property : src.getParameter()) {
+                if (property.isSetParameter()) {
+                    dest.getParameters().add(unmarshalParameter(property.getParameter()));
+                }
+            }
+        }
+
+        return dest;
+    }
+
+    private RingConsecutivePointsSame unmarshalRingConsecutivePointsSame(RingConsecutivePointsSameType src) {
+        RingConsecutivePointsSame dest = new RingConsecutivePointsSame();
+        unmarshalAbstractRingError(src, dest);
+
+        if (src.isSetVertex1()) {
+            dest.setVertex1(helper.getGMLUnmarshaller().unmarshalDirectPosition(src.getVertex1()));
+        }
+
+        if (src.isSetVertex2()) {
+            dest.setVertex2(helper.getGMLUnmarshaller().unmarshalDirectPosition(src.getVertex2()));
+        }
+
+        return dest;
+    }
+
+    private RingNotClosed unmarshalRingNotClosed(RingNotClosedType src) {
+        RingNotClosed dest = new RingNotClosed();
+        unmarshalAbstractRingError(src, dest);
+        return dest;
+    }
+
+    private RingSelfIntersection unmarshalRingSelfIntersection(RingSelfIntersectionType src) {
+        RingSelfIntersection dest = new RingSelfIntersection();
+        unmarshalAbstractRingError(src, dest);
+
+        if (src.isSetEdge1() && src.getEdge1() != null) {
+            dest.setEdge1(unmarshalEdge(src.getEdge1().getEdge()));
+        }
+
+        if (src.isSetEdge2() && src.getEdge2() != null) {
+            dest.setEdge2(unmarshalEdge(src.getEdge2().getEdge()));
+        }
+
+        if (src.isSetType()) {
+            dest.setType(src.getType());
+        }
+
+        if (src.isSetVertex()) {
+            dest.setVertex(helper.getGMLUnmarshaller().unmarshalDirectPosition(src.getVertex()));
+        }
+
+        return dest;
+    }
+
+    private RingTooFewPoints unmarshalRingTooFewPoints(RingTooFewPointsType src) {
+        RingTooFewPoints dest = new RingTooFewPoints();
+        unmarshalAbstractRingError(src, dest);
+        return dest;
+    }
+
+    private SemanticAttributeMissing unmarshalSemanticAttributeMissing(SemanticAttributeMissingType src) {
+        SemanticAttributeMissing dest = new SemanticAttributeMissing();
+
+        if (src.isSetAttributeName()) {
+            dest.setAttributeName(src.getAttributeName());
+        }
+
+        if (src.isSetChildId()) {
+            dest.setChildId(src.getChildId());
+        }
+
+        dest.setGeneric(src.isGeneric());
+
+        return dest;
+    }
+
+    private SemanticAttributeWrongValue unmarshalSemanticAttributeWrongValue(SemanticAttributeWrongValueType src) {
+        SemanticAttributeWrongValue dest = new SemanticAttributeWrongValue();
+
+        if (src.isSetAttributeName()) {
+            dest.setAttributeName(src.getAttributeName());
+        }
+
+        if (src.isSetChildId()) {
+            dest.setChildId(src.getChildId());
+        }
+
+        dest.setGeneric(src.isGeneric());
+
+        return dest;
+    }
+
+    private SolidAllPolygonsWrongOrientation unmarshalSolidAllPolygonsWrongOrientation(SolidAllPolygonsWrongOrientationType src) {
+        SolidAllPolygonsWrongOrientation dest = new SolidAllPolygonsWrongOrientation();
+        unmarshalAbstractSolidError(src, dest);
+        return dest;
+    }
+
+    private SolidMultipleConnectedComponents unmarshalSolidMultipleConnectedComponents(SolidMultipleConnectedComponentsType src) {
+        SolidMultipleConnectedComponents dest = new SolidMultipleConnectedComponents();
+        unmarshalAbstractSolidError(src, dest);
+
+        if (src.isSetComponents()) {
+            for (ComponentListPropertyType componentProperty : src.getComponents()) {
+                Component component = new Component();
+                dest.getComponents().add(component);
+
+                if (componentProperty.isSetComponentList()
+                        && componentProperty.getComponentList().isSetComponent()) {
+                    for (PolygonIdListPropertyType property : componentProperty.getComponentList().getComponent()) {
+                        if (property.isSetPolygonIdList()
+                                && property.getPolygonIdList().isSetPolygonId()) {
+                            component.getPolygonIds().add(property.getPolygonIdList().getPolygonId());
+                        }
+                    }
+                }
+            }
+        }
+
+        return dest;
+    }
+
+    private SolidNonManifoldEdge unmarshalSolidNonManifoldEdge(SolidNonManifoldEdgeType src) {
+        SolidNonManifoldEdge dest = new SolidNonManifoldEdge();
+        unmarshalAbstractSolidError(src, dest);
+
+        if (src.isSetEdges()
+                && src.getEdges().isSetEdgeList()
+                && src.getEdges().getEdgeList().isSetEdge()) {
+            for (EdgePropertyType property : src.getEdges().getEdgeList().getEdge()) {
+                if (property.isSetEdge()) {
+                    dest.getEdges().add(unmarshalEdge(property.getEdge()));
+                }
+            }
+        }
+
+        return dest;
+    }
+
+    private SolidNonManifoldVertex unmarshalSolidNonManifoldVertex(SolidNonManifoldVertexType src) {
+        SolidNonManifoldVertex dest = new SolidNonManifoldVertex();
+        unmarshalAbstractSolidError(src, dest);
+
+        if (src.isSetVertex()) {
+            dest.setVertex(helper.getGMLUnmarshaller().unmarshalDirectPosition(src.getVertex()));
+        }
+
+        return dest;
+    }
+
+    private SolidNotClosed unmarshalSolidNotClosed(SolidNotClosedType src) {
+        SolidNotClosed dest = new SolidNotClosed();
+        unmarshalAbstractSolidError(src, dest);
+
+        if (src.isSetEdges()
+                && src.getEdges().isSetEdgeList()
+                && src.getEdges().getEdgeList().isSetEdge()) {
+            for (EdgePropertyType property : src.getEdges().getEdgeList().getEdge()) {
+                if (property.isSetEdge()) {
+                    dest.getEdges().add(unmarshalEdge(property.getEdge()));
+                }
+            }
+        }
+
+        return dest;
+    }
+
+    private SolidPolygonWrongOrientation unmarshalSolidPolygonWrongOrientation(SolidPolygonWrongOrientationType src) {
+        SolidPolygonWrongOrientation dest = new SolidPolygonWrongOrientation();
+        unmarshalAbstractSolidError(src, dest);
+
+        if (src.isSetEdges()
+                && src.getEdges().isSetEdgeList()
+                && src.getEdges().getEdgeList().isSetEdge()) {
+            for (EdgePropertyType property : src.getEdges().getEdgeList().getEdge()) {
+                if (property.isSetEdge()) {
+                    dest.getEdges().add(unmarshalEdge(property.getEdge()));
+                }
+            }
+        }
+
+        return dest;
+    }
+
+    private SolidSelfIntersection unmarshalSolidSelfIntersection(SolidSelfIntersectionType src) {
+        SolidSelfIntersection dest = new SolidSelfIntersection();
+        unmarshalAbstractSolidError(src, dest);
+
+        if (src.isSetPolygonId1()) {
+            dest.setPolygonId1(src.getPolygonId1());
+        }
+
+        if (src.isSetPolygonId2()) {
+            dest.setPolygonId2(src.getPolygonId2());
+        }
+
+        return dest;
+    }
+
+    private SolidTooFewPolygons unmarshalSolidTooFewPolygons(SolidTooFewPolygonsType src) {
+        SolidTooFewPolygons dest = new SolidTooFewPolygons();
+        unmarshalAbstractSolidError(src, dest);
+        return dest;
+    }
+
+    private Statistics unmarshalStatistics(StatisticsType src) {
+        Statistics dest = new Statistics();
+
+        if (src.isSetNumErrorBridgeObjects()
+                && src.getNumErrorBridgeObjects().isSetFeatureStatistics()) {
+            dest.setNumErrorBridgeObjects(unmarshalFeatureStatistics(src.getNumErrorBridgeObjects().getFeatureStatistics()));
+        }
+
+        if (src.isSetNumErrorBuildings()
+                && src.getNumErrorBuildings().isSetFeatureStatistics()) {
+            dest.setNumErrorBuildings(unmarshalFeatureStatistics(src.getNumErrorBuildings().getFeatureStatistics()));
+        }
+
+        if (src.isSetNumErrorLandObjects()
+                && src.getNumErrorLandObjects().isSetFeatureStatistics()) {
+            dest.setNumErrorLandObjects(unmarshalFeatureStatistics(src.getNumErrorLandObjects().getFeatureStatistics()));
+        }
+
+        if (src.isSetNumErrorTransportation()
+                && src.getNumErrorTransportation().isSetFeatureStatistics()) {
+            dest.setNumErrorTransportation(unmarshalFeatureStatistics(src.getNumErrorTransportation().getFeatureStatistics()));
+        }
+
+        if (src.isSetNumErrorVegetation()
+                && src.getNumErrorVegetation().isSetFeatureStatistics()) {
+            dest.setNumErrorVegetation(unmarshalFeatureStatistics(src.getNumErrorVegetation().getFeatureStatistics()));
+        }
+
+        if (src.isSetNumErrorWaterObjects()
+                && src.getNumErrorWaterObjects().isSetFeatureStatistics()) {
+            dest.setNumErrorWaterObjects(unmarshalFeatureStatistics(src.getNumErrorWaterObjects().getFeatureStatistics()));
+        }
+
+        if (src.isSetErrorStatistics()
+                && src.getErrorStatistics().isSetErrorStatistics()) {
+            dest.setErrorStatistics(unmarshalErrorStatistics(src.getErrorStatistics().getErrorStatistics()));
+        }
+
+        return dest;
+    }
+
+    public Validation unmarshalValidation(ValidationType src) throws MissingADESchemaException {
+        Validation dest = new Validation();
+        helper.getGMLUnmarshaller().unmarshalAbstractFeature(src, dest);
+
+        if (src.isSetValidationDate()) {
+            XMLGregorianCalendar validationDate = src.getValidationDate();
+            if (validationDate.getTimezone() == DatatypeConstants.FIELD_UNDEFINED) {
+                validationDate.setTimezone(0);
+            }
+
+            dest.setValidationDate(validationDate.toGregorianCalendar().toZonedDateTime());
+        }
+
+        if (src.isSetValidationSoftware()) {
+            dest.setValidationSoftware(src.getValidationSoftware());
+        }
+
+        if (src.isSetValidationPlan()
+                && src.getValidationPlan().isSetValidationPlan()) {
+            dest.setValidationPlan(unmarshalValidationPlan(src.getValidationPlan().getValidationPlan()));
+        }
+
+        if (src.isSetStatistics()
+                && src.getStatistics().isSetStatistics()) {
+            dest.setStatistics(unmarshalStatistics(src.getStatistics().getStatistics()));
+        }
+
+        return dest;
+    }
+
+    public ValidationPlan unmarshalValidationPlan(ValidationPlanType src) {
+        ValidationPlan dest = new ValidationPlan();
+
+        if (src.isSetGlobalParameters()
+                && src.getGlobalParameters().isSetGlobalParameters()
+                && src.getGlobalParameters().getGlobalParameters().isSetParameter()) {
+            for (ParameterPropertyType property : src.getGlobalParameters().getGlobalParameters().getParameter()) {
+                if (property.isSetParameter()) {
+                    dest.getGlobalParameters().add(unmarshalParameter(property.getParameter()));
+                }
+            }
+        }
+
+        if (src.isSetFilter()
+                && src.getFilter().isSetFilter()) {
+            dest.setFilter(unmarshalFilter(src.getFilter().getFilter()));
+        }
+
+        if (src.isSetRequirement()
+                && src.getRequirement().isSetRequirement()) {
+            dest.setRequirement(unmarshalRequirement(src.getRequirement().getRequirement()));
+        }
+
+        return dest;
+    }
+
+    public ValidationProperty unmarshalValidationProperty(ValidationPropertyType src) throws MissingADESchemaException {
+        ValidationProperty dest = new ValidationProperty();
+
+        if (src.isSetValidation()) {
+            dest.setFeature(unmarshalValidation(src.getValidation()));
+        }
+
+        if (src.isSetRemoteSchema()) {
+            dest.setRemoteSchema(src.getRemoteSchema());
+        }
+
+        if (src.isSetType()) {
+            dest.setType(XLinkType.fromValue(src.getType().value()));
+        }
+
+        if (src.isSetHref()) {
+            dest.setHref(src.getHref());
+        }
+
+        if (src.isSetRole()) {
+            dest.setRole(src.getRole());
+        }
+
+        if (src.isSetArcrole()) {
+            dest.setArcrole(src.getArcrole());
+        }
+
+        if (src.isSetTitle()) {
+            dest.setTitle(src.getTitle());
+        }
+
+        if (src.isSetShow()) {
+            dest.setShow(XLinkShow.fromValue(src.getShow().value()));
+        }
+
+        if (src.isSetActuate()) {
+            dest.setActuate(XLinkActuate.fromValue(src.getActuate().value()));
+        }
+
+        return dest;
+    }
+
+    private ValidationResult unmarshalValidationResult(ValidationResultType src) throws MissingADESchemaException {
+        ValidationResult dest = new ValidationResult();
+
+        if (src.isSetValidationPlanID()) {
+            dest.setValidation(unmarshalValidationProperty(src.getValidationPlanID()));
+        }
+
+        if (src.isSetError()) {
+            for (AbstractErrorPropertyType property : src.getError()) {
+                if (property.isSetAbstractError()) {
+                    ModelObject object = helper.getJAXBUnmarshaller().unmarshal(property.getAbstractError());
+                    if (object instanceof AbstractError) {
+                        dest.getErrors().add((AbstractError) object);
+                    }
+                }
+            }
+        }
+
+        if (src.isSetResultType()) {
+            dest.setResultType(ResultType.fromValue(src.getResultType().value()));
+        }
+
+        return dest;
+    }
+
+    public ValidationResultProperty unmarshalValidationResultProperty(ValidationResultPropertyType src) throws MissingADESchemaException {
+        ValidationResultProperty dest = new ValidationResultProperty();
+
+        if (src.isSetValidationResult()) {
+            dest.setObject(unmarshalValidationResult(src.getValidationResult()));
+        }
+
+        return dest;
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/marshaller/QualityAdeMarshaller.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/marshaller/QualityAdeMarshaller.java
deleted file mode 100644
index cd0528a760628127453cad9dc063bf21519bfec4..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/marshaller/QualityAdeMarshaller.java
+++ /dev/null
@@ -1,412 +0,0 @@
-/*-
- * 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.marshaller;
-
-import java.util.List;
-import java.util.concurrent.locks.ReentrantLock;
-
-import javax.xml.bind.JAXBElement;
-
-import org.citygml4j.builder.jaxb.marshal.citygml.ade.ADEMarshallerHelper;
-import org.citygml4j.model.citygml.ade.binding.ADEMarshaller;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.util.mapper.TypeMapper;
-
-import de.hft.stuttgart.quality.model.AllPolygonsWrongOrientation;
-import de.hft.stuttgart.quality.model.AttributeMissing;
-import de.hft.stuttgart.quality.model.AttributeWrongValue;
-import de.hft.stuttgart.quality.model.ConsecutivePointsSame;
-import de.hft.stuttgart.quality.model.Edge;
-import de.hft.stuttgart.quality.model.HoleOutside;
-import de.hft.stuttgart.quality.model.InnerRingsNested;
-import de.hft.stuttgart.quality.model.InteriorDisconnected;
-import de.hft.stuttgart.quality.model.IntersectingRings;
-import de.hft.stuttgart.quality.model.MultipleConnectedComponents;
-import de.hft.stuttgart.quality.model.NonManifoldEdge;
-import de.hft.stuttgart.quality.model.NonManifoldVertex;
-import de.hft.stuttgart.quality.model.NonPlanarDistancePlane;
-import de.hft.stuttgart.quality.model.NonPlanarNormalsDeviation;
-import de.hft.stuttgart.quality.model.OrientationRingsSame;
-import de.hft.stuttgart.quality.model.PolygonWrongOrientation;
-import de.hft.stuttgart.quality.model.RingNotClosed;
-import de.hft.stuttgart.quality.model.RingSelfIntersection;
-import de.hft.stuttgart.quality.model.SolidNotClosed;
-import de.hft.stuttgart.quality.model.SolidSelfIntersection;
-import de.hft.stuttgart.quality.model.TooFewPoints;
-import de.hft.stuttgart.quality.model.TooFewPolygons;
-import de.hft.stuttgart.quality.model.Validation;
-import de.hft.stuttgart.quality.model.ValidationError;
-import de.hft.stuttgart.quality.model.ValidationResult;
-import de.hft.stuttgart.quality.model.jaxb.AllPolygonsWrongOrientationType;
-import de.hft.stuttgart.quality.model.jaxb.AttributeMissingType;
-import de.hft.stuttgart.quality.model.jaxb.AttributeWrongValueType;
-import de.hft.stuttgart.quality.model.jaxb.ConsecutivePointsSameType;
-import de.hft.stuttgart.quality.model.jaxb.EdgeType;
-import de.hft.stuttgart.quality.model.jaxb.HoleOutsideType;
-import de.hft.stuttgart.quality.model.jaxb.InnerRingsNestedType;
-import de.hft.stuttgart.quality.model.jaxb.InteriorDisconnectedType;
-import de.hft.stuttgart.quality.model.jaxb.IntersectingRingsType;
-import de.hft.stuttgart.quality.model.jaxb.MultipleConnectedComponentsType;
-import de.hft.stuttgart.quality.model.jaxb.NonManifoldEdgeType;
-import de.hft.stuttgart.quality.model.jaxb.NonManifoldVertexType;
-import de.hft.stuttgart.quality.model.jaxb.NonPlanarDistancePlaneType;
-import de.hft.stuttgart.quality.model.jaxb.NonPlanarNormalsDeviationType;
-import de.hft.stuttgart.quality.model.jaxb.ObjectFactory;
-import de.hft.stuttgart.quality.model.jaxb.OrientationRingsSameType;
-import de.hft.stuttgart.quality.model.jaxb.PolygonWrongOrientationType;
-import de.hft.stuttgart.quality.model.jaxb.RingNotClosedType;
-import de.hft.stuttgart.quality.model.jaxb.RingSelfIntersectionType;
-import de.hft.stuttgart.quality.model.jaxb.SolidNotClosedType;
-import de.hft.stuttgart.quality.model.jaxb.SolidSelfIntersectionType;
-import de.hft.stuttgart.quality.model.jaxb.TooFewPointsType;
-import de.hft.stuttgart.quality.model.jaxb.TooFewPolygonsType;
-import de.hft.stuttgart.quality.model.jaxb.ValidationErrorType;
-import de.hft.stuttgart.quality.model.jaxb.ValidationResultType;
-import de.hft.stuttgart.quality.model.jaxb.ValidationType;
-
-public class QualityAdeMarshaller implements ADEMarshaller {
-
-	private final ReentrantLock lock = new ReentrantLock();
-	private final ObjectFactory factory = new ObjectFactory();
-	private TypeMapper<JAXBElement<?>> elementMapper;
-	private TypeMapper<Object> typeMapper;
-	private ADEMarshallerHelper helper;
-
-	private TypeMapper<JAXBElement<?>> getElementMapper() {
-		if (elementMapper == null) {
-			lock.lock();
-			try {
-				if (elementMapper == null) {
-					elementMapper = TypeMapper.<JAXBElement<?>>create().with(Validation.class, this::createValidation)
-							.with(ValidationResult.class, this::createValidationResult);
-				}
-			} finally {
-				lock.unlock();
-			}
-		}
-
-		return elementMapper;
-	}
-
-	private TypeMapper<Object> getTypeMapper() {
-		if (typeMapper == null) {
-			lock.lock();
-			try {
-				if (typeMapper == null) {
-					typeMapper = TypeMapper.create().with(Validation.class, this::marshalValidation)
-							.with(ValidationResult.class, this::marshalValidationResult)
-							.with(ConsecutivePointsSame.class, this::marshalConsecutivePointsSame)
-							.with(TooFewPoints.class, this::marshalTooFewPoints)
-							.with(RingSelfIntersection.class, this::marshalRingSelfIntersection)
-							.with(RingNotClosed.class, this::marshalRingNotClosed)
-							.with(InteriorDisconnected.class, this::marshalInteriorDisconnected)
-							.with(IntersectingRings.class, this::marshalIntersectingRings)
-							.with(NonPlanarDistancePlane.class, this::marshalNonPlanarDistancePlane)
-							.with(InnerRingsNested.class, this::marshalInnerRingsNested)
-							.with(HoleOutside.class, this::marshalHoleOutside)
-							.with(NonPlanarNormalsDeviation.class, this::marshalNonPlanarNormalsDeviation)
-							.with(OrientationRingsSame.class, this::marshalOrientationRingsSame)
-							.with(AllPolygonsWrongOrientation.class, this::marshalAllPolygonsWrongOrientation)
-							.with(PolygonWrongOrientation.class, this::marshalPolygonWrongOrientation)
-							.with(SolidSelfIntersection.class, this::marshalSolidSelfIntersection)
-							.with(NonManifoldVertex.class, this::marshalNonManifoldVertex)
-							.with(NonManifoldEdge.class, this::marshalNonManifoldEdge)
-							.with(SolidNotClosed.class, this::marshalSolidNotClosed)
-							.with(TooFewPolygons.class, this::marshalTooFewPolygons)
-							.with(MultipleConnectedComponents.class, this::marshalMultipleConnectedComponents)
-							.with(AttributeWrongValue.class, this::marshalAttributeWrongValue)
-							.with(AttributeMissing.class, this::marshalAttributeMissing);
-				}
-			} finally {
-				lock.unlock();
-			}
-		}
-
-		return typeMapper;
-	}
-
-	private ValidationType marshalValidation(Validation src) {
-		ValidationType dest = new ValidationType();
-
-		if (src.isSetDateTime()) {
-			dest.setValidationDate(src.getValidationDate());
-		}
-
-		if (src.isSetValidationSoftware()) {
-			dest.setValidationSoftware(src.getValidationSoftware());
-		}
-
-		if (src.isSetValidationPlan()) {
-			dest.setValidationPlan(src.getValidationPlan());
-		}
-
-		if (src.isSetStatistics()) {
-			dest.setStatistics(src.getStatistics());
-		}
-
-		return dest;
-	}
-
-	private ValidationResultType marshalValidationResult(ValidationResult src) {
-		ValidationResultType dest = factory.createValidationResultType();
-
-		dest.setResult(src.getResult());
-
-		if (src.hasErrors()) {
-			for (ValidationError err : src.getErrors()) {
-				dest.getErrors().add(marshalValidationError(err));
-				// sort lexicographic, order does not actually matter but xml is restrictive
-				// that way
-				// could be solved with xsd v1.1 but jaxb can only process v1.0
-				dest.getErrors().sort((e1, e2) -> e1.getName().compareTo(e2.getName()));
-			}
-		}
-		return dest;
-	}
-
-	private JAXBElement<?> createValidation(Validation src) {
-		return factory.createValidationType(marshalValidation(src));
-	}
-
-	private JAXBElement<?> createValidationResult(ValidationResult src) {
-		return factory.createValidationResultType(marshalValidationResult(src));
-	}
-
-	private ValidationErrorType marshalValidationError(ValidationError err) {
-		return (ValidationErrorType) marshal(err);
-	}
-
-	@Override
-	public void setADEMarshallerHelper(ADEMarshallerHelper helper) {
-		this.helper = helper;
-	}
-
-	@Override
-	public JAXBElement<?> marshalJAXBElement(ADEModelObject src) {
-		return getElementMapper().apply(src);
-	}
-
-	@Override
-	public Object marshal(ADEModelObject src) {
-		return getTypeMapper().apply(src);
-	}
-
-	private ConsecutivePointsSameType marshalConsecutivePointsSame(ConsecutivePointsSame src) {
-		ConsecutivePointsSameType dest = factory.createConsecutivePointsSameType();
-		dest.setLinearRingId(src.getLinearRingId());
-		if (src.getVertex1() != null) {
-			dest.setVertex1(helper.getGMLMarshaller().marshalDirectPosition(src.getVertex1()));
-		}
-		if (src.getVertex2() != null) {
-			dest.setVertex2(helper.getGMLMarshaller().marshalDirectPosition(src.getVertex2()));
-		}
-		return dest;
-	}
-
-	private TooFewPointsType marshalTooFewPoints(TooFewPoints src) {
-		TooFewPointsType dest = factory.createTooFewPointsType();
-		dest.setLinearRingId(src.getLinearRingId());
-		return dest;
-	}
-
-	private RingSelfIntersectionType marshalRingSelfIntersection(RingSelfIntersection src) {
-		RingSelfIntersectionType dest = factory.createRingSelfIntersectionType();
-		dest.setLinearRingId(src.getLinearRingId());
-		dest.setType(src.getType());
-		if (src.getEdge1() != null) {
-			dest.setEdge1(marshalEdge(src.getEdge1()));
-		}
-
-		if (src.getEdge2() != null) {
-			dest.setEdge2(marshalEdge(src.getEdge2()));
-		}
-
-		if (src.getVertex1() != null) {
-			dest.setVertex1(helper.getGMLMarshaller().marshalDirectPosition(src.getVertex1()));
-		}
-
-		if (src.getVertex2() != null) {
-			dest.setVertex2(helper.getGMLMarshaller().marshalDirectPosition(src.getVertex2()));
-		}
-		return dest;
-	}
-
-	private EdgeType marshalEdge(Edge src) {
-		EdgeType dest = new EdgeType();
-		if (src.getFrom() != null) {
-			dest.setFrom(helper.getGMLMarshaller().marshalDirectPosition(src.getFrom()));
-		}
-
-		if (src.getTo() != null) {
-			dest.setTo(helper.getGMLMarshaller().marshalDirectPosition(src.getTo()));
-		}
-		return dest;
-	}
-
-	private RingNotClosedType marshalRingNotClosed(RingNotClosed src) {
-		RingNotClosedType dest = new RingNotClosedType();
-		dest.setLinearRingId(src.getLinearRingId());
-		return dest;
-	}
-
-	private InteriorDisconnectedType marshalInteriorDisconnected(InteriorDisconnected src) {
-		InteriorDisconnectedType dest = new InteriorDisconnectedType();
-		dest.setPolygonId(src.getPolygonId());
-		return dest;
-	}
-
-	private IntersectingRingsType marshalIntersectingRings(IntersectingRings src) {
-		IntersectingRingsType dest = new IntersectingRingsType();
-		dest.setPolygonId(src.getPolygonId());
-		dest.setLinearRingId1(src.getLinearRingId1());
-		dest.setLinearRingId2(src.getLinearRingId2());
-		return dest;
-	}
-
-	private NonPlanarDistancePlaneType marshalNonPlanarDistancePlane(NonPlanarDistancePlane src) {
-		NonPlanarDistancePlaneType dest = new NonPlanarDistancePlaneType();
-		dest.setPolygonId(src.getPolygonId());
-		if (src.getVertex() != null) {
-			dest.setVertex(helper.getGMLMarshaller().marshalDirectPosition(src.getVertex()));
-		}
-		if (src.getDistance() != null) {
-			dest.setDistance(helper.getGMLMarshaller().marshalLength(src.getDistance()));
-		}
-		return dest;
-	}
-
-	private InnerRingsNestedType marshalInnerRingsNested(InnerRingsNested src) {
-		InnerRingsNestedType dest = new InnerRingsNestedType();
-		dest.setPolygonId(src.getPolygonId());
-		dest.setLinearRingId1(src.getLinearRingId1());
-		dest.setLinearRingId2(src.getLinearRingId2());
-		return dest;
-	}
-
-	private HoleOutsideType marshalHoleOutside(HoleOutside src) {
-		HoleOutsideType dest = new HoleOutsideType();
-		dest.setPolygonId(src.getPolygonId());
-		dest.setLinearRingId(src.getLinearRingId());
-		return dest;
-	}
-
-	private NonPlanarNormalsDeviationType marshalNonPlanarNormalsDeviation(NonPlanarNormalsDeviation src) {
-		NonPlanarNormalsDeviationType dest = new NonPlanarNormalsDeviationType();
-		dest.setPolygonId(src.getPolygonId());
-		if (src.getDeviation() != null) {
-			dest.setDeviation(helper.getGMLMarshaller().marshalAngle(src.getDeviation()));
-		}
-		return dest;
-	}
-
-	private OrientationRingsSameType marshalOrientationRingsSame(OrientationRingsSame src) {
-		OrientationRingsSameType dest = new OrientationRingsSameType();
-		dest.setPolygonId(src.getPolygonId());
-		dest.setLinearRingId(src.getLinearRingId());
-		return dest;
-	}
-
-	private AllPolygonsWrongOrientationType marshalAllPolygonsWrongOrientation(AllPolygonsWrongOrientation src) {
-		AllPolygonsWrongOrientationType dest = new AllPolygonsWrongOrientationType();
-		dest.setGeometryId(src.getGeometryId());
-		return dest;
-	}
-
-	private PolygonWrongOrientationType marshalPolygonWrongOrientation(PolygonWrongOrientation src) {
-		PolygonWrongOrientationType dest = new PolygonWrongOrientationType();
-		dest.setGeometryId(src.getGeometryId());
-		if (src.isSetEdges()) {
-			List<EdgeType> edges = dest.getEdges();
-			for (Edge e : src.getEdges()) {
-				edges.add(marshalEdge(e));
-			}
-		}
-		return dest;
-	}
-
-	private SolidSelfIntersectionType marshalSolidSelfIntersection(SolidSelfIntersection src) {
-		SolidSelfIntersectionType dest = new SolidSelfIntersectionType();
-		dest.setGeometryId(src.getGeometryId());
-		dest.setPolygonId1(src.getPolygonId1());
-		dest.setPolygonId2(src.getPolygonId2());
-		return dest;
-	}
-
-	private NonManifoldVertexType marshalNonManifoldVertex(NonManifoldVertex src) {
-		NonManifoldVertexType dest = new NonManifoldVertexType();
-		dest.setGeometryId(src.getGeometryId());
-		if (src.getVertex() != null) {
-			dest.setVertex(helper.getGMLMarshaller().marshalDirectPosition(src.getVertex()));
-		}
-		return dest;
-	}
-
-	private NonManifoldEdgeType marshalNonManifoldEdge(NonManifoldEdge src) {
-		NonManifoldEdgeType dest = new NonManifoldEdgeType();
-		dest.setGeometryId(src.getGeometryId());
-		if (src.isSetEdges()) {
-			List<EdgeType> edges = dest.getEdges();
-			for (Edge e : src.getEdges()) {
-				edges.add(marshalEdge(e));
-			}
-		}
-		return dest;
-	}
-
-	private SolidNotClosedType marshalSolidNotClosed(SolidNotClosed src) {
-		SolidNotClosedType dest = new SolidNotClosedType();
-		dest.setGeometryId(src.getGeometryId());
-		if (src.isSetEdges()) {
-			List<EdgeType> edges = dest.getEdges();
-			for (Edge e : src.getEdges()) {
-				edges.add(marshalEdge(e));
-			}
-		}
-		return dest;
-	}
-
-	private TooFewPolygonsType marshalTooFewPolygons(TooFewPolygons src) {
-		TooFewPolygonsType dest = new TooFewPolygonsType();
-		dest.setGeometryId(src.getGeometryId());
-		return dest;
-	}
-
-	private MultipleConnectedComponentsType marshalMultipleConnectedComponents(MultipleConnectedComponents src) {
-		MultipleConnectedComponentsType dest = new MultipleConnectedComponentsType();
-		dest.setGeometryId(src.getGeometryId());
-		if (src.isSetComponents()) {
-			dest.getComponents().addAll(src.getComponents());
-		}
-		return dest;
-	}
-
-	private AttributeWrongValueType marshalAttributeWrongValue(AttributeWrongValue src) {
-		AttributeWrongValueType dest = new AttributeWrongValueType();
-		dest.setAttributeName(src.getAttributeName());
-		dest.setChildId(src.getChildId());
-		dest.setGeneric(src.isGeneric());
-		return dest;
-	}
-
-	private AttributeMissingType marshalAttributeMissing(AttributeMissing src) {
-		AttributeMissingType dest = new AttributeMissingType();
-		dest.setAttributeName(src.getAttributeName());
-		dest.setChildId(src.getChildId());
-		dest.setGeneric(src.isGeneric());
-		return dest;
-	}
-
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/marshaller/QualityAdeUnmarshaller.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/marshaller/QualityAdeUnmarshaller.java
deleted file mode 100644
index 21f4148313ba71b0d4eb2c3df3ac58176fdcd6eb..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/marshaller/QualityAdeUnmarshaller.java
+++ /dev/null
@@ -1,374 +0,0 @@
-/*-
- * 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.marshaller;
-
-import java.util.List;
-import java.util.concurrent.locks.ReentrantLock;
-import java.util.stream.Collectors;
-
-import javax.xml.bind.JAXBElement;
-
-import org.citygml4j.builder.jaxb.unmarshal.citygml.ade.ADEUnmarshallerHelper;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.citygml.ade.binding.ADEUnmarshaller;
-import org.citygml4j.util.mapper.CheckedTypeMapper;
-import org.citygml4j.xml.io.reader.MissingADESchemaException;
-
-import de.hft.stuttgart.quality.model.AllPolygonsWrongOrientation;
-import de.hft.stuttgart.quality.model.AttributeMissing;
-import de.hft.stuttgart.quality.model.AttributeWrongValue;
-import de.hft.stuttgart.quality.model.ConsecutivePointsSame;
-import de.hft.stuttgart.quality.model.Edge;
-import de.hft.stuttgart.quality.model.HoleOutside;
-import de.hft.stuttgart.quality.model.InnerRingsNested;
-import de.hft.stuttgart.quality.model.InteriorDisconnected;
-import de.hft.stuttgart.quality.model.IntersectingRings;
-import de.hft.stuttgart.quality.model.MultipleConnectedComponents;
-import de.hft.stuttgart.quality.model.NonManifoldEdge;
-import de.hft.stuttgart.quality.model.NonManifoldVertex;
-import de.hft.stuttgart.quality.model.NonPlanarDistancePlane;
-import de.hft.stuttgart.quality.model.NonPlanarNormalsDeviation;
-import de.hft.stuttgart.quality.model.OrientationRingsSame;
-import de.hft.stuttgart.quality.model.PolygonWrongOrientation;
-import de.hft.stuttgart.quality.model.RingNotClosed;
-import de.hft.stuttgart.quality.model.RingSelfIntersection;
-import de.hft.stuttgart.quality.model.SolidNotClosed;
-import de.hft.stuttgart.quality.model.SolidSelfIntersection;
-import de.hft.stuttgart.quality.model.TooFewPoints;
-import de.hft.stuttgart.quality.model.TooFewPolygons;
-import de.hft.stuttgart.quality.model.Validation;
-import de.hft.stuttgart.quality.model.ValidationError;
-import de.hft.stuttgart.quality.model.ValidationResult;
-import de.hft.stuttgart.quality.model.jaxb.AllPolygonsWrongOrientationType;
-import de.hft.stuttgart.quality.model.jaxb.AttributeMissingType;
-import de.hft.stuttgart.quality.model.jaxb.AttributeWrongValueType;
-import de.hft.stuttgart.quality.model.jaxb.ConsecutivePointsSameType;
-import de.hft.stuttgart.quality.model.jaxb.EdgeType;
-import de.hft.stuttgart.quality.model.jaxb.HoleOutsideType;
-import de.hft.stuttgart.quality.model.jaxb.InnerRingsNestedType;
-import de.hft.stuttgart.quality.model.jaxb.InteriorDisconnectedType;
-import de.hft.stuttgart.quality.model.jaxb.IntersectingRingsType;
-import de.hft.stuttgart.quality.model.jaxb.MultipleConnectedComponentsType;
-import de.hft.stuttgart.quality.model.jaxb.NonManifoldEdgeType;
-import de.hft.stuttgart.quality.model.jaxb.NonManifoldVertexType;
-import de.hft.stuttgart.quality.model.jaxb.NonPlanarDistancePlaneType;
-import de.hft.stuttgart.quality.model.jaxb.NonPlanarNormalsDeviationType;
-import de.hft.stuttgart.quality.model.jaxb.OrientationRingsSameType;
-import de.hft.stuttgart.quality.model.jaxb.PolygonWrongOrientationType;
-import de.hft.stuttgart.quality.model.jaxb.RingNotClosedType;
-import de.hft.stuttgart.quality.model.jaxb.RingSelfIntersectionType;
-import de.hft.stuttgart.quality.model.jaxb.SolidNotClosedType;
-import de.hft.stuttgart.quality.model.jaxb.SolidSelfIntersectionType;
-import de.hft.stuttgart.quality.model.jaxb.TooFewPointsType;
-import de.hft.stuttgart.quality.model.jaxb.TooFewPolygonsType;
-import de.hft.stuttgart.quality.model.jaxb.ValidationErrorType;
-import de.hft.stuttgart.quality.model.jaxb.ValidationResultType;
-import de.hft.stuttgart.quality.model.jaxb.ValidationType;
-import de.hft.stuttgart.quality.util.UncheckedMissingADESchemaException;
-
-public class QualityAdeUnmarshaller implements ADEUnmarshaller {
-
-	private final ReentrantLock lock = new ReentrantLock();
-	private CheckedTypeMapper<ADEModelObject> typeMapper;
-	private ADEUnmarshallerHelper helper;
-
-	private CheckedTypeMapper<ADEModelObject> getTypeMapper() {
-		if (typeMapper == null) {
-			lock.lock();
-			try {
-				if (typeMapper == null) {
-					typeMapper = CheckedTypeMapper.<ADEModelObject>create()
-							.with(ValidationType.class, this::unmarshalValidationType)
-							.with(ValidationResultType.class, this::umarshalValidationResultType)
-							.with(ConsecutivePointsSameType.class, this::unmarshalConsecutivePointsSameType)
-							.with(TooFewPointsType.class, this::unmarshalTooFewPointsType)
-							.with(RingSelfIntersectionType.class, this::unmarshalRingSelfIntersectionType)
-							.with(RingNotClosedType.class, this::unmarshalRingNotClosedType)
-							.with(InteriorDisconnectedType.class, this::unmarshalInteriorDisconnectedType)
-							.with(IntersectingRingsType.class, this::unmarshalIntersectingRingsType)
-							.with(NonPlanarDistancePlaneType.class, this::unmarshalNonPlanarDistancePlaneType)
-							.with(InnerRingsNestedType.class, this::unmarshalInnerRingsType)
-							.with(HoleOutsideType.class, this::unmarshalHoleOutsideType)
-							.with(OrientationRingsSameType.class, this::unmarshalOrientationRingsSameType)
-							.with(NonPlanarNormalsDeviationType.class, this::unmarshalNonPlanarNormalsDeviationType)
-							.with(AllPolygonsWrongOrientationType.class, this::unmarshalAllPolygonsWrongOrientationType)
-							.with(PolygonWrongOrientationType.class, this::unmarshalPolygonWrongOrientationType)
-							.with(SolidSelfIntersectionType.class, this::unmarshalSolidSelfIntersectionType)
-							.with(NonManifoldVertexType.class, this::unmarshalNonManifoldVertexType)
-							.with(NonManifoldEdgeType.class, this::unmarshalNonManifoldEdgeType)
-							.with(SolidNotClosedType.class, this::unmarshalSolidNotClosedType)
-							.with(TooFewPolygonsType.class, this::unmarshalTooFewPolygonsType)
-							.with(MultipleConnectedComponentsType.class, this::unmarshalMultipleConnectedComponentsType)
-							.with(AttributeWrongValueType.class, this::unmarshalAttributeWrongValueType)
-							.with(AttributeMissingType.class, this::unmarshalAttributeMissingType);
-
-				}
-			} finally {
-				lock.unlock();
-			}
-		}
-
-		return typeMapper;
-	}
-
-	@Override
-	public void setADEUnmarshallerHelper(ADEUnmarshallerHelper helper) {
-		this.helper = helper;
-	}
-
-	@Override
-	public ADEModelObject unmarshal(JAXBElement<?> src) throws MissingADESchemaException {
-		return unmarshal(src.getValue());
-	}
-
-	@Override
-	public ADEModelObject unmarshal(Object src) throws MissingADESchemaException {
-		return getTypeMapper().apply(src);
-	}
-
-	private Validation unmarshalValidationType(ValidationType src) {
-		Validation dest = new Validation();
-		dest.setValidationDate(src.getValidationDate());
-		dest.setValidationSoftware(src.getValidationSoftware());
-		dest.setValidationPlan(src.getValidationPlan());
-		dest.setStatistics(src.getStatistics());
-		return dest;
-	}
-
-	private ValidationResult umarshalValidationResultType(ValidationResultType src) throws MissingADESchemaException {
-		ValidationResult dest = new ValidationResult();
-		dest.setResult(src.getResult());
-		if (src.isSetErrors()) {
-			try {
-				dest.getErrors()
-						.addAll(src.getErrors().stream().map(this::unmarshalError).collect(Collectors.toList()));
-			} catch (UncheckedMissingADESchemaException e) {
-				throw e.getCause();
-			}
-		}
-		return dest;
-	}
-
-	private ValidationError unmarshalError(ValidationErrorType err) {
-		try {
-			return (ValidationError) getTypeMapper().apply(err);
-		} catch (MissingADESchemaException e) {
-			throw new UncheckedMissingADESchemaException(e);
-		}
-	}
-
-	private ConsecutivePointsSame unmarshalConsecutivePointsSameType(ConsecutivePointsSameType src) {
-		ConsecutivePointsSame dest = new ConsecutivePointsSame();
-		dest.setLinearRingId(src.getLinearRingId());
-		dest.setVertex1(helper.getGMLUnmarshaller().unmarshalDirectPosition(src.getVertex1()));
-		dest.setVertex2(helper.getGMLUnmarshaller().unmarshalDirectPosition(src.getVertex2()));
-		return dest;
-	}
-
-	private TooFewPoints unmarshalTooFewPointsType(TooFewPointsType src) {
-		TooFewPoints dest = new TooFewPoints();
-		dest.setLinearRingId(src.getLinearRingId());
-		return dest;
-	}
-
-	private RingSelfIntersection unmarshalRingSelfIntersectionType(RingSelfIntersectionType src) {
-		RingSelfIntersection dest = new RingSelfIntersection();
-		if (src.getEdge1() != null) {
-			dest.setEdge1(unmarshalEdge(src.getEdge1()));
-		}
-
-		if (src.getEdge2() != null) {
-			dest.setEdge2(unmarshalEdge(src.getEdge2()));
-		}
-
-		dest.setLinearRingId(src.getLinearRingId());
-		dest.setType(src.getType());
-
-		if (src.getVertex1() != null) {
-			dest.setVertex1(helper.getGMLUnmarshaller().unmarshalDirectPosition(src.getVertex1()));
-		}
-
-		if (src.getVertex2() != null) {
-			dest.setVertex2(helper.getGMLUnmarshaller().unmarshalDirectPosition(src.getVertex2()));
-		}
-		return dest;
-	}
-
-	private RingNotClosed unmarshalRingNotClosedType(RingNotClosedType src) {
-		RingNotClosed dest = new RingNotClosed();
-		dest.setLinearRingId(src.getLinearRingId());
-		return dest;
-	}
-
-	private Edge unmarshalEdge(EdgeType src) {
-		Edge dest = new Edge();
-		if (src.getFrom() != null) {
-			dest.setFrom(helper.getGMLUnmarshaller().unmarshalDirectPosition(src.getFrom()));
-		}
-		if (src.getTo() != null) {
-			dest.setTo(helper.getGMLUnmarshaller().unmarshalDirectPosition(src.getTo()));
-		}
-		return dest;
-	}
-
-	private InteriorDisconnected unmarshalInteriorDisconnectedType(InteriorDisconnectedType src) {
-		InteriorDisconnected dest = new InteriorDisconnected();
-		dest.setPolygonId(src.getPolygonId());
-		return dest;
-	}
-
-	private IntersectingRings unmarshalIntersectingRingsType(IntersectingRingsType src) {
-		IntersectingRings dest = new IntersectingRings();
-		dest.setPolygonId(src.getPolygonId());
-		dest.setLinearRingId1(src.getLinearRingId1());
-		dest.setLinearRingId2(src.getLinearRingId2());
-		return dest;
-	}
-
-	private InnerRingsNested unmarshalInnerRingsType(InnerRingsNestedType src) {
-		InnerRingsNested dest = new InnerRingsNested();
-		dest.setPolygonId(src.getPolygonId());
-		dest.setLinearRingId1(src.getLinearRingId1());
-		dest.setLinearRingId2(src.getLinearRingId2());
-		return dest;
-	}
-
-	private NonPlanarDistancePlane unmarshalNonPlanarDistancePlaneType(NonPlanarDistancePlaneType src) {
-		NonPlanarDistancePlane dest = new NonPlanarDistancePlane();
-		dest.setPolygonId(src.getPolygonId());
-		if (src.getVertex() != null) {
-			dest.setVertex(helper.getGMLUnmarshaller().unmarshalDirectPosition(src.getVertex()));
-		}
-		if (src.getDistance() != null) {
-			dest.setDistance(helper.getGMLUnmarshaller().unmarshalLength(src.getDistance()));
-		}
-		return dest;
-	}
-
-	private HoleOutside unmarshalHoleOutsideType(HoleOutsideType src) {
-		HoleOutside dest = new HoleOutside();
-		dest.setPolygonId(src.getPolygonId());
-		dest.setLinearRingId(src.getLinearRingId());
-		return dest;
-	}
-
-	private NonPlanarNormalsDeviation unmarshalNonPlanarNormalsDeviationType(NonPlanarNormalsDeviationType src) {
-		NonPlanarNormalsDeviation dest = new NonPlanarNormalsDeviation();
-		dest.setPolygonId(src.getPolygonId());
-		if (src.getDeviation() != null) {
-			dest.setDeviation(helper.getGMLUnmarshaller().unmarshalAngle(src.getDeviation()));
-		}
-		return dest;
-	}
-
-	private OrientationRingsSame unmarshalOrientationRingsSameType(OrientationRingsSameType src) {
-		OrientationRingsSame dest = new OrientationRingsSame();
-		dest.setPolygonId(src.getPolygonId());
-		dest.setLinearRingId(src.getLinearRingId());
-		return dest;
-	}
-
-	private AllPolygonsWrongOrientation unmarshalAllPolygonsWrongOrientationType(AllPolygonsWrongOrientationType src) {
-		AllPolygonsWrongOrientation dest = new AllPolygonsWrongOrientation();
-		dest.setGeometryId(src.getGeometryId());
-		return dest;
-	}
-
-	private PolygonWrongOrientation unmarshalPolygonWrongOrientationType(PolygonWrongOrientationType src) {
-		PolygonWrongOrientation dest = new PolygonWrongOrientation();
-		dest.setGeometryId(src.getGeometryId());
-		if (src.isSetEdges()) {
-			List<Edge> edges = dest.getEdges();
-			for (EdgeType e : src.getEdges()) {
-				edges.add(unmarshalEdge(e));
-			}
-		}
-		return dest;
-	}
-
-	private SolidSelfIntersection unmarshalSolidSelfIntersectionType(SolidSelfIntersectionType src) {
-		SolidSelfIntersection dest = new SolidSelfIntersection();
-		dest.setGeometryId(src.getGeometryId());
-		dest.setPolygonId1(src.getPolygonId1());
-		dest.setPolygonId2(src.getPolygonId2());
-		return dest;
-	}
-
-	private NonManifoldVertex unmarshalNonManifoldVertexType(NonManifoldVertexType src) {
-		NonManifoldVertex dest = new NonManifoldVertex();
-		dest.setGeometryId(src.getGeometryId());
-		if (src.getVertex() != null) {
-			dest.setVertex(helper.getGMLUnmarshaller().unmarshalDirectPosition(src.getVertex()));
-		}
-		return dest;
-	}
-
-	private NonManifoldEdge unmarshalNonManifoldEdgeType(NonManifoldEdgeType src) {
-		NonManifoldEdge dest = new NonManifoldEdge();
-		dest.setGeometryId(src.getGeometryId());
-		if (src.isSetEdges()) {
-			List<Edge> edges = dest.getEdges();
-			for (EdgeType e : src.getEdges()) {
-				edges.add(unmarshalEdge(e));
-			}
-		}
-		return dest;
-	}
-
-	private SolidNotClosed unmarshalSolidNotClosedType(SolidNotClosedType src) {
-		SolidNotClosed dest = new SolidNotClosed();
-		dest.setGeometryId(src.getGeometryId());
-		if (src.isSetEdges()) {
-			List<Edge> edges = dest.getEdges();
-			for (EdgeType e : src.getEdges()) {
-				edges.add(unmarshalEdge(e));
-			}
-		}
-		return dest;
-	}
-
-	private TooFewPolygons unmarshalTooFewPolygonsType(TooFewPolygonsType src) {
-		TooFewPolygons dest = new TooFewPolygons();
-		dest.setGeometryId(src.getGeometryId());
-		return dest;
-	}
-
-	private MultipleConnectedComponents unmarshalMultipleConnectedComponentsType(MultipleConnectedComponentsType src) {
-		MultipleConnectedComponents dest = new MultipleConnectedComponents();
-		dest.setGeometryId(src.getGeometryId());
-		if (src.isSetComponents()) {
-			dest.getComponents().addAll(src.getComponents());
-		}
-		return dest;
-	}
-
-	private AttributeWrongValue unmarshalAttributeWrongValueType(AttributeWrongValueType src) {
-		AttributeWrongValue dest = new AttributeWrongValue();
-		dest.setAttributeName(src.getAttributeName());
-		dest.setChildId(src.getChildId());
-		dest.setGeneric(src.isGeneric());
-		return dest;
-	}
-
-	private AttributeMissing unmarshalAttributeMissingType(AttributeMissingType src) {
-		AttributeMissing dest = new AttributeMissing();
-		dest.setAttributeName(src.getAttributeName());
-		dest.setChildId(src.getChildId());
-		dest.setGeneric(src.isGeneric());
-		return dest;
-	}
-
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/marshaller/ZonedDateTimeAdapter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/marshaller/ZonedDateTimeAdapter.java
deleted file mode 100644
index bf9101cd0aa816982b9f18c1858474de3b8d8fb1..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/marshaller/ZonedDateTimeAdapter.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*-
- * 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.marshaller;
-
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.time.ZonedDateTime;
-import java.time.format.DateTimeFormatter;
-
-import javax.xml.bind.annotation.adapters.XmlAdapter;
-
-public class ZonedDateTimeAdapter extends XmlAdapter<String, ZonedDateTime> {
-	
-	@Override
-	public ZonedDateTime unmarshal(String v) throws Exception {
-		try {
-			return ZonedDateTime.from(DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse(v));
-		} catch (Exception e) {
-			return LocalDateTime.parse(v).atZone(ZoneId.systemDefault());
-		}
-	}
-
-	@Override
-	public String marshal(ZonedDateTime v) throws Exception {
-		return DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(v);
-	}
-	
-	
-
-}
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/AbstractDataType.java
similarity index 53%
rename from citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ChildObject.java
rename to citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AbstractDataType.java
index 39aec6d0c286a30c3526f2c39535f820a7cb9d17..3b1ef100dabb09cd4e6defa3cf9af0fdfd14f4d8 100644
--- 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/AbstractDataType.java
@@ -1,5 +1,5 @@
-/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+/*
+ * Copyright 2021 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.
@@ -13,41 +13,33 @@
  * 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.association.Associable;
 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;
-	}
+public abstract class AbstractDataType implements Associable, ADEModelObject {
+    private ModelObject parent;
 
-	@Override
-	public void setParent(ModelObject parent) {
-		this.parent = parent;
-	}
+    @Override
+    public ModelObject getParent() {
+        return parent;
+    }
 
-	@Override
-	public boolean isSetParent() {
-		return parent != null;
-	}
+    @Override
+    public void setParent(ModelObject parent) {
+        this.parent = parent;
+    }
 
-	@Override
-	public void unsetParent() {
-		parent = null;
-	}
+    @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/AbstractError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AbstractError.java
new file mode 100644
index 0000000000000000000000000000000000000000..29c6a02dc1b56562b6aa226b0791dcc6e520aeb7
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AbstractError.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2021 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 java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+public abstract class AbstractError extends AbstractDataType {
+
+    public abstract ErrorType getErrorType();
+
+    @Override
+    public String toString() {
+        Class<?> target = getClass();
+        LinkedList<Class<?>> types = new LinkedList<>();
+        do {
+            types.addFirst(target);
+        } while ((target = target.getSuperclass()) != AbstractDataType.class && target != null);
+
+        List<String> fields = new ArrayList<>();
+        for (Class<?> type : types) {
+            for (Field field : type.getDeclaredFields()) {
+                int modifiers = field.getModifiers();
+                if (Modifier.isStatic(modifiers)) {
+                    continue;
+                }
+
+                try {
+                    field.setAccessible(true);
+                    fields.add(field.getName() + "=" + field.get(this));
+                } catch (Exception e) {
+                    //
+                }
+            }
+        }
+
+        return getClass().getSimpleName() + " [" + String.join(", ", fields) + "]";
+    }
+}
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/AbstractGeometryError.java
similarity index 76%
rename from citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SemanticError.java
rename to citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AbstractGeometryError.java
index b2741c3cc8dd868a0b5725dc4074f05d241cd69a..b35f9e5a7bc5320b05bb4e7274b3679e604ebbb9 100644
--- 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/AbstractGeometryError.java
@@ -1,5 +1,5 @@
-/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+/*
+ * Copyright 2021 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.
@@ -13,10 +13,8 @@
  * 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;
+package de.hft.stuttgart.quality.model;
 
+public abstract class AbstractGeometryError extends AbstractError {
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AbstractPolygonError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AbstractPolygonError.java
new file mode 100644
index 0000000000000000000000000000000000000000..d34ee7edd823f42028beac42440f68a7d1c8be33
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AbstractPolygonError.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+
+public abstract class AbstractPolygonError extends AbstractGeometryError {
+    private String polygonId;
+
+    public String getPolygonId() {
+        return polygonId;
+    }
+
+    public void setPolygonId(String polygonId) {
+        this.polygonId = polygonId;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        return target instanceof AbstractPolygonError ?
+                ObjectCopier.copyTo(this, (AbstractPolygonError) target, AbstractPolygonError.class, copyBuilder) :
+                target;
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AbstractRingError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AbstractRingError.java
new file mode 100644
index 0000000000000000000000000000000000000000..fb84b3df7965763e114f6889356410ad9ae37f7e
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AbstractRingError.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+
+public abstract class AbstractRingError extends AbstractGeometryError {
+    private String linearRingId;
+
+    public String getLinearRingId() {
+        return linearRingId;
+    }
+
+    public void setLinearRingId(String linearRingId) {
+        this.linearRingId = linearRingId;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        return target instanceof AbstractRingError ?
+                ObjectCopier.copyTo(this, (AbstractRingError) target, AbstractRingError.class, copyBuilder) :
+                target;
+    }
+}
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/AbstractSemanticError.java
similarity index 76%
rename from citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationError.java
rename to citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AbstractSemanticError.java
index a1b5a8e2faba36caba5ebc77e4c545f208573f2a..da50bc80b54895086ccda706d24f971dd82ea0b5 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/AbstractSemanticError.java
@@ -1,5 +1,5 @@
-/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+/*
+ * Copyright 2021 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.
@@ -13,9 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package de.hft.stuttgart.quality.model;
 
-public abstract class ValidationError extends ChildObject {
-	
-	private static final long serialVersionUID = -2995694676938108325L;
+public abstract class AbstractSemanticError extends AbstractError {
 }
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/AbstractSolidError.java
similarity index 50%
rename from citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/HoleOutside.java
rename to citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AbstractSolidError.java
index 4804bb024b25ed1c9859e4fea7ca9e87249ee556..c9d76b7c81931150515344402ab2e3f4bb7395c7 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/AbstractSolidError.java
@@ -1,5 +1,5 @@
-/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+/*
+ * Copyright 2021 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.
@@ -13,31 +13,27 @@
  * 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.builder.copy.ObjectCopier;
 
-public class HoleOutside extends PolygonError {
-
-	private static final long serialVersionUID = -3029497342950689843L;
-	
-	private String linearRingId;
-
-	public void setLinearRingId(String linearRingId) {
-		this.linearRingId = linearRingId;
-	}
+public abstract class AbstractSolidError extends AbstractGeometryError {
+    private String geometryId;
 
-	public String getLinearRingId() {
-		return linearRingId;
-	}
+    public String getGeometryId() {
+        return geometryId;
+    }
 
-	@Override
-	public String toString() {
-		return "HoleOutside [polygonId=" + getPolygonId() + ", linearRingId=" + linearRingId + "]";
-	}
+    public void setGeometryId(String geometryId) {
+        this.geometryId = geometryId;
+    }
 
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new HoleOutside(), copyBuilder);
-	}
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        return target instanceof AbstractSolidError ?
+                ObjectCopier.copyTo(this, (AbstractSolidError) target, AbstractSolidError.class, copyBuilder) :
+                target;
+    }
 }
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
deleted file mode 100644
index d3eee9bed63cb30bd106b769eb66035caabd90bb..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AttributeMissing.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*-
- * 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;
-
-public class AttributeMissing extends SemanticError {
-
-	private static final long serialVersionUID = -5416574100733885169L;
-	
-	private String childId;
-	private String attributeName;
-	private boolean generic;
-
-	public String getChildId() {
-		return childId;
-	}
-
-	public void setChildId(String childId) {
-		this.childId = childId;
-	}
-
-	public String getAttributeName() {
-		return attributeName;
-	}
-
-	public void setAttributeName(String attributeName) {
-		this.attributeName = attributeName;
-	}
-
-	public boolean isGeneric() {
-		return generic;
-	}
-
-	public void setGeneric(boolean generic) {
-		this.generic = generic;
-	}
-
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new AttributeWrongValue(), copyBuilder);
-	}
-}
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
deleted file mode 100644
index b8815593d489b0275de723801031126f4d85b7cb..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AttributeWrongValue.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*-
- * 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;
-
-public class AttributeWrongValue extends SemanticError {
-	
-	private static final long serialVersionUID = -5650985861847806620L;
-	
-	private String childId;
-	private String attributeName;
-	private boolean generic;
-
-	public String getChildId() {
-		return childId;
-	}
-
-	public void setChildId(String childId) {
-		this.childId = childId;
-	}
-
-	public String getAttributeName() {
-		return attributeName;
-	}
-
-	public void setAttributeName(String attributeName) {
-		this.attributeName = attributeName;
-	}
-
-	public boolean isGeneric() {
-		return generic;
-	}
-
-	public void setGeneric(boolean generic) {
-		this.generic = generic;
-	}
-
-	@Override
-	public String toString() {
-		return "AttributeWrongValue [childId=" + childId + ", attributeName=" + attributeName + ", generic=" + generic
-				+ "]";
-	}
-
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new AttributeWrongValue(), copyBuilder);
-	}
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Component.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Component.java
new file mode 100644
index 0000000000000000000000000000000000000000..7bd772eea48f30f2d27237482e9d94671d73704d
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Component.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Component extends AbstractDataType {
+    private List<String> polygonIds;
+
+    public boolean isSetPolygonIds() {
+        return polygonIds != null && !polygonIds.isEmpty();
+    }
+
+    public List<String> getPolygonIds() {
+        if (polygonIds == null) {
+            polygonIds = new ArrayList<>();
+        }
+
+        return polygonIds;
+    }
+
+    public void setPolygonIds(List<String> polygonIds) {
+        this.polygonIds = polygonIds;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        Component copy = target == null ?
+                new Component() :
+                (Component) target;
+
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new Component(), copyBuilder);
+    }
+}
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
deleted file mode 100644
index 91cb869ba018047a5f6232a27c9f86b7ba6d321d..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ConsecutivePointsSame.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*-
- * 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.gml.geometry.primitives.DirectPosition;
-
-public class ConsecutivePointsSame extends RingError {
-	
-	private static final long serialVersionUID = -838421312521561747L;
-	
-	private DirectPosition vertex1;
-	private DirectPosition vertex2;
-	
-	public void setVertex1(DirectPosition vertex1) {
-		this.vertex1 = vertex1;
-	}
-	
-	public void setVertex2(DirectPosition vertex2) {
-		this.vertex2 = vertex2;
-	}
-
-	public DirectPosition getVertex1() {
-		return vertex1;
-	}
-	
-	public DirectPosition getVertex2() {
-		return vertex2;
-	}
-
-	@Override
-	public String toString() {
-		return "ConsecutivePointsSame [linearRingId=" + getLinearRingId() + ", vertex1=" + vertex1 + ", vertex2=" + vertex2
-				+ "]";
-	}
-
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new ConsecutivePointsSame(), copyBuilder);
-	}
-
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Edge.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Edge.java
index d78e694882fe346eac94da0f8ae48fd765e3e7ec..91aa1d6745c9ded839a249582aac668ecf7326a4 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Edge.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Edge.java
@@ -1,5 +1,5 @@
-/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+/*
+ * Copyright 2021 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.
@@ -13,33 +13,45 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package de.hft.stuttgart.quality.model;
 
-import java.io.Serializable;
+package de.hft.stuttgart.quality.model;
 
+import org.citygml4j.builder.copy.CopyBuilder;
+import org.citygml4j.builder.copy.ObjectCopier;
+import org.citygml4j.model.common.base.ModelObjects;
 import org.citygml4j.model.gml.geometry.primitives.DirectPosition;
 
-public class Edge implements Serializable {
-	
-	private static final long serialVersionUID = -5076265818764666094L;
-	
-	private DirectPosition from;
-	private DirectPosition to;
-	
-	public void setFrom(DirectPosition from) {
-		this.from = from;
-	}
-	
-	public void setTo(DirectPosition to) {
-		this.to = to;
-	}
-	
-	public DirectPosition getFrom() {
-		return from;
-	}
-	
-	public DirectPosition getTo() {
-		return to;
-	}
+public class Edge extends AbstractDataType {
+    private DirectPosition from;
+    private DirectPosition to;
+
+    public DirectPosition getFrom() {
+        return from;
+    }
+
+    public void setFrom(DirectPosition from) {
+        this.from = ModelObjects.setParent(from, this);
+    }
+
+    public DirectPosition getTo() {
+        return to;
+    }
+
+    public void setTo(DirectPosition to) {
+        this.to = ModelObjects.setParent(to, this);
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        Edge copy = target == null ?
+                new Edge() :
+                (Edge) target;
+
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
 
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new Edge(), copyBuilder);
+    }
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ErrorStatistics.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ErrorStatistics.java
new file mode 100644
index 0000000000000000000000000000000000000000..c48470c52c092bcaec5b448c3c5a053a74e58fa9
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ErrorStatistics.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ErrorStatistics extends AbstractDataType {
+    private int occurrences;
+    private List<ErrorType> errors;
+
+    public int getOccurrences() {
+        return occurrences;
+    }
+
+    public void setOccurrences(int occurrences) {
+        this.occurrences = occurrences;
+    }
+
+    public boolean isSetErrors() {
+        return errors != null && !errors.isEmpty();
+    }
+
+    public List<ErrorType> getErrors() {
+        if (errors == null) {
+            errors = new ArrayList<>();
+        }
+
+        return errors;
+    }
+
+    public void setErrors(List<ErrorType> errors) {
+        this.errors = errors;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        ErrorStatistics copy = target == null ?
+                new ErrorStatistics() :
+                (ErrorStatistics) target;
+
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new ErrorStatistics(), copyBuilder);
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ErrorType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ErrorType.java
new file mode 100644
index 0000000000000000000000000000000000000000..09a45d2095a3246c26a335b00f76c3ba30be4f93
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ErrorType.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2021 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 enum ErrorType {
+    GE_R_TOO_FEW_POINTS,
+    GE_R_NOT_CLOSED,
+    GE_R_CONSECUTIVE_POINTS_SAME,
+    GE_R_SELF_INTERSECTION,
+    GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE,
+    GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION,
+    GE_P_INTERIOR_DISCONNECTED,
+    GE_P_INTERSECTING_RINGS,
+    GE_P_HOLE_OUTSIDE,
+    GE_P_ORIENTATION_RINGS_SAME,
+    GE_P_INNER_RINGS_NESTED,
+    GE_S_TOO_FEW_POLYGONS,
+    GE_S_NOT_CLOSED,
+    GE_S_NON_MANIFOLD_EDGE,
+    GE_S_POLYGON_WRONG_ORIENTATION,
+    GE_S_ALL_POLYGONS_WRONG_ORIENTATION,
+    GE_S_NON_MANIFOLD_VERTEX,
+    GE_S_SELF_INTERSECTION,
+    GE_S_MULTIPLE_CONNECTED_COMPONENTS,
+    SE_ATTRIBUTE_WRONG_VALUE,
+    SE_ATTRIBUTE_MISSING;
+
+    public static ErrorType fromValue(String value) {
+        for (ErrorType constant : ErrorType.values()) {
+            if (constant.name().equals(value)) {
+                return constant;
+            }
+        }
+
+        return null;
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/FeatureStatistics.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/FeatureStatistics.java
new file mode 100644
index 0000000000000000000000000000000000000000..e5bcfabd2e9137b378c9e145d9d07cc1e18d9654
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/FeatureStatistics.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+
+public class FeatureStatistics extends AbstractDataType {
+    private int numChecked;
+    private int numErrors;
+
+    public int getNumChecked() {
+        return numChecked;
+    }
+
+    public void setNumChecked(int numChecked) {
+        this.numChecked = numChecked;
+    }
+
+    public int getNumErrors() {
+        return numErrors;
+    }
+
+    public void setNumErrors(int numErrors) {
+        this.numErrors = numErrors;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        FeatureStatistics copy = target == null ?
+                new FeatureStatistics() :
+                (FeatureStatistics) target;
+
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new FeatureStatistics(), copyBuilder);
+    }
+}
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/FeatureType.java
similarity index 59%
rename from citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/RingError.java
rename to citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/FeatureType.java
index d17e5077910c25029d05929979e9f098609e59ab..817fd9ecb309066c9ebaa01787b81440b45d32c2 100644
--- 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/FeatureType.java
@@ -1,5 +1,5 @@
-/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+/*
+ * Copyright 2021 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.
@@ -13,19 +13,24 @@
  * 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 {
+package de.hft.stuttgart.quality.model;
 
-	private static final long serialVersionUID = -8610600028811350500L;
-	
-	private String linearRingId;
+public enum FeatureType {
+    BUILDING,
+    TRANSPORTATION,
+    VEGETATION,
+    BRIDGE,
+    WATER,
+    LAND;
 
-	public void setLinearRingId(String linearRingId) {
-		this.linearRingId = linearRingId;
-	}
+    public static FeatureType fromValue(String value) {
+        for (FeatureType constant : FeatureType.values()) {
+            if (constant.name().equals(value)) {
+                return constant;
+            }
+        }
 
-	public String getLinearRingId() {
-		return linearRingId;
-	}
+        return null;
+    }
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Filter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Filter.java
new file mode 100644
index 0000000000000000000000000000000000000000..c925a39a78ef17229d2a66b18b24177a85dafbf4
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Filter.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Filter extends AbstractDataType {
+    private List<FeatureType> featureTypes;
+
+    public boolean isSetFeatureTypes() {
+        return featureTypes != null && !featureTypes.isEmpty();
+    }
+
+    public List<FeatureType> getFeatureTypes() {
+        if (featureTypes == null) {
+            featureTypes = new ArrayList<>();
+        }
+
+        return featureTypes;
+    }
+
+    public void setFeatureTypes(List<FeatureType> featureTypes) {
+        this.featureTypes = featureTypes;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        Filter copy = target == null ?
+                new Filter() :
+                (Filter) target;
+
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new Filter(), copyBuilder);
+    }
+}
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
deleted file mode 100644
index b1f886d7fcf62c4f71f5755a7fe577d64dc33c52..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/InnerRingsNested.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*-
- * 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;
-
-public class InnerRingsNested extends PolygonError {
-
-	private static final long serialVersionUID = 2291087505629924993L;
-
-	private String linearRingId1;
-	private String linearRingId2;
-
-	public void setLinearRingId1(String linearRingId1) {
-		this.linearRingId1 = linearRingId1;
-	}
-
-	public void setLinearRingId2(String linearRingId2) {
-		this.linearRingId2 = linearRingId2;
-	}
-
-	public String getLinearRingId1() {
-		return linearRingId1;
-	}
-
-	public String getLinearRingId2() {
-		return linearRingId2;
-	}
-
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new InnerRingsNested(), copyBuilder);
-	}
-}
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
deleted file mode 100644
index 64da8cc78e1e5768201a0023646424b86b7c4ba2..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/InteriorDisconnected.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*-
- * 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;
-
-public class InteriorDisconnected extends PolygonError {
-
-	private static final long serialVersionUID = 8443642232356795359L;
-	
-	@Override
-	public String toString() {
-		return "InteriorDisconnected [polygonId=" + getPolygonId() + "]";
-	}
-
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new InteriorDisconnected(), copyBuilder);
-	}
-}
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
deleted file mode 100644
index cab11d6863e2f21adb27a9367d1b44f7a3ed1a27..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/IntersectingRings.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*-
- * 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;
-
-public class IntersectingRings extends PolygonError {
-
-	private static final long serialVersionUID = 7668529369582991408L;
-	
-	private String linearRingId1;
-	private String linearRingId2;
-
-	public void setLinearRingId1(String linearRingId1) {
-		this.linearRingId1 = linearRingId1;
-	}
-
-	public void setLinearRingId2(String linearRingId2) {
-		this.linearRingId2 = linearRingId2;
-	}
-
-	public String getLinearRingId1() {
-		return linearRingId1;
-	}
-
-	public String getLinearRingId2() {
-		return linearRingId2;
-	}
-
-	@Override
-	public String toString() {
-		return "IntersectingRings [polygonId=" + getPolygonId() + ", linearRingId1=" + linearRingId1 + ", linearRingId2="
-				+ linearRingId2 + "]";
-	}
-
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new IntersectingRings(), copyBuilder);
-	}
-}
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
deleted file mode 100644
index c69d6a165db71bb2c1aff9c41fb27b8375799b3d..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/MultipleConnectedComponents.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*-
- * 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 java.util.ArrayList;
-import java.util.List;
-
-import org.citygml4j.builder.copy.CopyBuilder;
-
-import de.hft.stuttgart.quality.model.jaxb.Component;
-
-public class MultipleConnectedComponents extends SolidError {
-
-	private static final long serialVersionUID = -4199420154182053060L;
-
-	private List<Component> components;
-	
-	public boolean isSetComponents() {
-		return components != null && !components.isEmpty();
-	}
-	
-	public List<Component> getComponents() {
-		if (components == null) {
-			components = new ArrayList<>();
-		}
-		return components;
-	}
-	
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new MultipleConnectedComponents(), copyBuilder);
-	}
-
-}
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
deleted file mode 100644
index b1d9b539a62db8f2c4cb86280b97692dff848ad9..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/NonManifoldVertex.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*-
- * 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.gml.geometry.primitives.DirectPosition;
-
-public class NonManifoldVertex extends SolidError {
-
-	private static final long serialVersionUID = -3434116956866828127L;
-	
-	private DirectPosition vertex;
-
-	public void setVertex(DirectPosition vertex) {
-		this.vertex = vertex;
-	}
-
-	public DirectPosition getVertex() {
-		return vertex;
-	}
-
-	@Override
-	public String toString() {
-		return "NonManifoldVertex [geometryId=" + getGeometryId() + ", vertex=" + vertex + "]";
-	}
-
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new NonManifoldVertex(), copyBuilder);
-	}
-}
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
deleted file mode 100644
index fd0292fbc5e762e71c9367bdcead7515c629364e..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/NonPlanarDistancePlane.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*-
- * 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.gml.geometry.primitives.DirectPosition;
-import org.citygml4j.model.gml.measures.Length;
-
-public class NonPlanarDistancePlane extends PolygonError {
-
-	private static final long serialVersionUID = -3428574131554438219L;
-	
-	private DirectPosition vertex;
-	private Length distance;
-
-
-	public void setVertex(DirectPosition vertex) {
-		this.vertex = vertex;
-	}
-
-	public void setDistance(Length distance) {
-		this.distance = distance;
-	}
-
-	public DirectPosition getVertex() {
-		return vertex;
-	}
-
-	public Length getDistance() {
-		return distance;
-	}
-
-	@Override
-	public String toString() {
-		return "NonPlanarDistancePlane [polygonId=" + getPolygonId() + ", vertex=" + vertex + ", distance=" + distance + "]";
-	}
-
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new NonPlanarDistancePlane(), copyBuilder);
-	}
-}
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
deleted file mode 100644
index faa5a4f11ab035a8b0706cbb9783b2b9cec619f8..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/NonPlanarNormalsDeviation.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*-
- * 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.gml.measures.Angle;
-
-public class NonPlanarNormalsDeviation extends PolygonError {
-
-	private static final long serialVersionUID = -8574024132334399550L;
-	
-	private Angle deviation;
-
-	public void setDeviation(Angle deviation) {
-		this.deviation = deviation;
-	}
-
-	public Angle getDeviation() {
-		return deviation;
-	}
-
-	@Override
-	public String toString() {
-		return "NonPlanarNormalsDeviation [polygonId=" + getPolygonId() + ", deviation=" + deviation + "]";
-	}
-
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new NonPlanarNormalsDeviation(), copyBuilder);
-	}
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Parameter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Parameter.java
new file mode 100644
index 0000000000000000000000000000000000000000..8f59bfae2a6882b75b3cc86dc5a22e4dc301ab0a
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Parameter.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+
+public class Parameter extends AbstractDataType {
+    private String name;
+    private String uom;
+    private String value;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getUom() {
+        return uom;
+    }
+
+    public void setUom(String uom) {
+        this.uom = uom;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        Parameter copy = target == null ?
+                new Parameter() :
+                (Parameter) target;
+
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new Parameter(), copyBuilder);
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonHoleOutside.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonHoleOutside.java
new file mode 100644
index 0000000000000000000000000000000000000000..8ae0ea8b40d50ef0525e400cc77167a164de2643
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonHoleOutside.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+
+public class PolygonHoleOutside extends AbstractPolygonError {
+    private String linearRingId;
+
+    public String getLinearRingId() {
+        return linearRingId;
+    }
+
+    public void setLinearRingId(String linearRingId) {
+        this.linearRingId = linearRingId;
+    }
+
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.GE_P_HOLE_OUTSIDE;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        PolygonHoleOutside copy = target == null ?
+                new PolygonHoleOutside() :
+                (PolygonHoleOutside) target;
+
+        super.copyTo(copy, copyBuilder);
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new PolygonHoleOutside(), copyBuilder);
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonInnerRingsNested.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonInnerRingsNested.java
new file mode 100644
index 0000000000000000000000000000000000000000..a0d10411ff8f73aacb0de024b171c8c108ad7eef
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonInnerRingsNested.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+
+public class PolygonInnerRingsNested extends AbstractPolygonError {
+    private String linearRingId1;
+    private String linearRingId2;
+
+    public String getLinearRingId1() {
+        return linearRingId1;
+    }
+
+    public void setLinearRingId1(String linearRingId1) {
+        this.linearRingId1 = linearRingId1;
+    }
+
+    public String getLinearRingId2() {
+        return linearRingId2;
+    }
+
+    public void setLinearRingId2(String linearRingId2) {
+        this.linearRingId2 = linearRingId2;
+    }
+
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.GE_P_INNER_RINGS_NESTED;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        PolygonInnerRingsNested copy = target == null ?
+                new PolygonInnerRingsNested() :
+                (PolygonInnerRingsNested) target;
+
+        super.copyTo(copy, copyBuilder);
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new PolygonInnerRingsNested(), copyBuilder);
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonInteriorDisconnected.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonInteriorDisconnected.java
new file mode 100644
index 0000000000000000000000000000000000000000..79ea82c7df57500cf85e46654880f9c9ae6fd012
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonInteriorDisconnected.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2021 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;
+
+public class PolygonInteriorDisconnected extends AbstractPolygonError {
+
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.GE_P_INTERIOR_DISCONNECTED;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        PolygonInteriorDisconnected copy = target == null ?
+                new PolygonInteriorDisconnected() :
+                (PolygonInteriorDisconnected) target;
+
+        return super.copyTo(copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new PolygonInteriorDisconnected(), copyBuilder);
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonIntersectingRings.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonIntersectingRings.java
new file mode 100644
index 0000000000000000000000000000000000000000..0b4382af6a6ab474a92fcaed7e837cde1a24d176
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonIntersectingRings.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+
+public class PolygonIntersectingRings extends AbstractPolygonError {
+    private String linearRingId1;
+    private String linearRingId2;
+
+    public PolygonIntersectingRings() {
+    }
+
+    public PolygonIntersectingRings(String linearRingId1, String linearRingId2) {
+        setLinearRingId1(linearRingId1);
+        setLinearRingId2(linearRingId2);
+    }
+
+    public String getLinearRingId1() {
+        return linearRingId1;
+    }
+
+    public void setLinearRingId1(String linearRingId1) {
+        this.linearRingId1 = linearRingId1;
+    }
+
+    public String getLinearRingId2() {
+        return linearRingId2;
+    }
+
+    public void setLinearRingId2(String linearRingId2) {
+        this.linearRingId2 = linearRingId2;
+    }
+
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.GE_P_INTERSECTING_RINGS;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        PolygonIntersectingRings copy = target == null ?
+                new PolygonIntersectingRings() :
+                (PolygonIntersectingRings) target;
+
+        super.copyTo(copy, copyBuilder);
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new PolygonIntersectingRings(), copyBuilder);
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonNonPlanarDistancePlane.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonNonPlanarDistancePlane.java
new file mode 100644
index 0000000000000000000000000000000000000000..8a68ec6afd92b4f6ee399fbb2f47ce52626469fd
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonNonPlanarDistancePlane.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+import org.citygml4j.model.common.base.ModelObjects;
+import org.citygml4j.model.gml.geometry.primitives.DirectPosition;
+import org.citygml4j.model.gml.measures.Length;
+
+public class PolygonNonPlanarDistancePlane extends AbstractPolygonError {
+    private Length distance;
+    private DirectPosition vertex;
+
+    public Length getDistance() {
+        return distance;
+    }
+
+    public void setDistance(Length distance) {
+        this.distance = ModelObjects.setParent(distance, this);
+    }
+
+    public DirectPosition getVertex() {
+        return vertex;
+    }
+
+    public void setVertex(DirectPosition vertex) {
+        this.vertex = ModelObjects.setParent(vertex, this);
+    }
+
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        PolygonNonPlanarDistancePlane copy = target == null ?
+                new PolygonNonPlanarDistancePlane() :
+                (PolygonNonPlanarDistancePlane) target;
+
+        super.copyTo(copy, copyBuilder);
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new PolygonNonPlanarDistancePlane(), copyBuilder);
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonNonPlanarNormalsDeviation.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonNonPlanarNormalsDeviation.java
new file mode 100644
index 0000000000000000000000000000000000000000..8d592f3a83be99773db290b6ba7fe4e36eec34da
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonNonPlanarNormalsDeviation.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+import org.citygml4j.model.common.base.ModelObjects;
+import org.citygml4j.model.gml.measures.Angle;
+
+public class PolygonNonPlanarNormalsDeviation extends AbstractPolygonError {
+    private Angle deviation;
+
+    public Angle getDeviation() {
+        return deviation;
+    }
+
+    public void setDeviation(Angle deviation) {
+        this.deviation = ModelObjects.setParent(deviation, this);
+    }
+
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        PolygonNonPlanarNormalsDeviation copy = target == null ?
+                new PolygonNonPlanarNormalsDeviation() :
+                (PolygonNonPlanarNormalsDeviation) target;
+
+        super.copyTo(copy, copyBuilder);
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new PolygonNonPlanarNormalsDeviation(), copyBuilder);
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonOrientationRingsSame.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonOrientationRingsSame.java
new file mode 100644
index 0000000000000000000000000000000000000000..9e980d9a1dece5a761aa7904d963347fccb4eee3
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonOrientationRingsSame.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+
+public class PolygonOrientationRingsSame extends AbstractPolygonError {
+    private String linearRingId;
+
+    public String getLinearRingId() {
+        return linearRingId;
+    }
+
+    public void setLinearRingId(String linearRingId) {
+        this.linearRingId = linearRingId;
+    }
+
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.GE_P_ORIENTATION_RINGS_SAME;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        PolygonOrientationRingsSame copy = target == null ?
+                new PolygonOrientationRingsSame() :
+                (PolygonOrientationRingsSame) target;
+
+        super.copyTo(copy, copyBuilder);
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new PolygonOrientationRingsSame(), copyBuilder);
+    }
+}
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
deleted file mode 100644
index 965491b5be2379387095650269b0ff213dac1bab..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonWrongOrientation.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*-
- * 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 java.util.ArrayList;
-import java.util.List;
-
-import org.citygml4j.builder.copy.CopyBuilder;
-
-public class PolygonWrongOrientation extends SolidError {
-
-	private static final long serialVersionUID = 1128689472694838648L;
-	
-	private List<Edge> edges;
-	
-	public boolean isSetEdges() {
-		return edges != null && !edges.isEmpty();
-	}
-	
-	public List<Edge> getEdges() {
-		if (edges == null) {
-			edges = new ArrayList<>();
-		}
-		return edges;
-	}
-
-	@Override
-	public String toString() {
-		return "PolygonWrongOrientation [geometryId=" + getGeometryId() + ", edges=" + edges + "]";
-	}
-
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new PolygonWrongOrientation(), copyBuilder);
-	}
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Requirement.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Requirement.java
new file mode 100644
index 0000000000000000000000000000000000000000..14e419d5fdbcc5bfe1d6ff9c5cd751db13b2a86a
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Requirement.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+import org.citygml4j.model.common.base.ModelObjects;
+import org.citygml4j.model.common.child.ChildList;
+
+import java.util.List;
+
+public class Requirement extends AbstractDataType {
+    private boolean enabled;
+    private RequirementType requirementType;
+    private List<Parameter> parameters;
+
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    public void setEnabled(boolean enabled) {
+        this.enabled = enabled;
+    }
+
+    public RequirementType getRequirementType() {
+        return requirementType;
+    }
+
+    public void setRequirementType(RequirementType requirementType) {
+        this.requirementType = requirementType;
+    }
+
+    public boolean isSetParameters() {
+        return parameters != null && !parameters.isEmpty();
+    }
+
+    public List<Parameter> getParameters() {
+        if (parameters == null) {
+            parameters = new ChildList<>(this);
+        }
+
+        return parameters;
+    }
+
+    public void setParameters(List<Parameter> parameters) {
+        this.parameters = ModelObjects.setParent(parameters, this);
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        Requirement copy = target == null ?
+                new Requirement() :
+                (Requirement) target;
+
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new Requirement(), copyBuilder);
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/RequirementType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/RequirementType.java
new file mode 100644
index 0000000000000000000000000000000000000000..fd1d5b41252af8dd9accf89d5ea8383de4de8881
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/RequirementType.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021 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 enum RequirementType {
+    R_GE_R_TOO_FEW_POINTS,
+    R_GE_R_NOT_CLOSED,
+    R_GE_R_CONSECUTIVE_POINTS_SAME,
+    R_GE_R_SELF_INTERSECTION,
+    R_GE_P_NON_PLANAR,
+    R_GE_P_INTERIOR_DISCONNECTED,
+    R_GE_P_INTERSECTING_RINGS,
+    R_GE_P_HOLE_OUTSIDE,
+    R_GE_P_ORIENTATION_RINGS_SAME,
+    R_GE_P_INNER_RINGS_NESTED,
+    R_GE_S_TOO_FEW_POLYGONS,
+    R_GE_S_NOT_CLOSED,
+    R_GE_S_NON_MANIFOLD_EDGE,
+    R_GE_S_POLYGON_WRONG_ORIENTATION,
+    R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION,
+    R_GE_S_NON_MANIFOLD_VERTEX,
+    R_GE_S_SELF_INTERSECTION,
+    R_GE_S_MULTIPLE_CONNECTED_COMPONENTS,
+    R_SE_ATTRIBUTES_EXISTING,
+    R_SE_ATTRIBUTES_CORRECT;
+
+    public static RequirementType fromValue(String value) {
+        for (RequirementType constant : RequirementType.values()) {
+            if (constant.name().equals(value)) {
+                return constant;
+            }
+        }
+
+        return null;
+    }
+}
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/ResultType.java
similarity index 62%
rename from citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonError.java
rename to citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ResultType.java
index 12e9c5eae238e1a222884df32594ab1372f4de11..67a7728206891dd17642ff4551780634e7d0ddf7 100644
--- 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/ResultType.java
@@ -1,5 +1,5 @@
-/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+/*
+ * Copyright 2021 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.
@@ -13,19 +13,21 @@
  * 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 {
+package de.hft.stuttgart.quality.model;
 
-	private static final long serialVersionUID = 4694297467768369526L;
-	
-	private String polygonId;
+public enum ResultType {
+    OK,
+    ERROR,
+    NOT_CHECKED;
 
-	public void setPolygonId(String polygonId) {
-		this.polygonId = polygonId;
-	}
+    public static ResultType fromValue(String value) {
+        for (ResultType constant : ResultType.values()) {
+            if (constant.name().equals(value)) {
+                return constant;
+            }
+        }
 
-	public String getPolygonId() {
-		return polygonId;
-	}
+        return null;
+    }
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/RingConsecutivePointsSame.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/RingConsecutivePointsSame.java
new file mode 100644
index 0000000000000000000000000000000000000000..77566384955cea31e6de5719f00d7d9cf9393a9a
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/RingConsecutivePointsSame.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+import org.citygml4j.model.common.base.ModelObjects;
+import org.citygml4j.model.gml.geometry.primitives.DirectPosition;
+
+public class RingConsecutivePointsSame extends AbstractRingError {
+    private DirectPosition vertex1;
+    private DirectPosition vertex2;
+
+    public DirectPosition getVertex1() {
+        return vertex1;
+    }
+
+    public void setVertex1(DirectPosition vertex1) {
+        this.vertex1 = ModelObjects.setParent(vertex1, this);
+    }
+
+    public DirectPosition getVertex2() {
+        return vertex2;
+    }
+
+    public void setVertex2(DirectPosition vertex2) {
+        this.vertex2 = ModelObjects.setParent(vertex2, this);
+    }
+
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.GE_R_CONSECUTIVE_POINTS_SAME;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        RingConsecutivePointsSame copy = target == null ?
+                new RingConsecutivePointsSame() :
+                (RingConsecutivePointsSame) target;
+
+        super.copyTo(copy, copyBuilder);
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new RingConsecutivePointsSame(), copyBuilder);
+    }
+}
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 4c52b24e2fadf1912c2290232eaea6032df58110..1dcf34e1a42b14bff21f80166d9c2fb95f446450 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
@@ -1,5 +1,5 @@
-/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+/*
+ * Copyright 2021 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.
@@ -13,21 +13,29 @@
  * 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;
 
-public class RingNotClosed extends RingError {
-	
-	private static final long serialVersionUID = 5502668444088395535L;
-	
-	@Override
-	public String toString() {
-		return "RingNotClosed [linearRingId=" + getLinearRingId() + "]";
-	}
+public class RingNotClosed extends AbstractRingError {
+
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.GE_R_NOT_CLOSED;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        RingNotClosed copy = target == null ?
+                new RingNotClosed() :
+                (RingNotClosed) target;
+
+        return super.copyTo(copy, copyBuilder);
+    }
 
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new RingNotClosed(), copyBuilder);
-	}
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new RingNotClosed(), copyBuilder);
+    }
 }
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 fd11024ea0a336e5573fb1afacf04a75d968dcbe..4fce244c2c1b5cfdb2216eebb9776575bc09d00d 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
@@ -1,5 +1,5 @@
-/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+/*
+ * Copyright 2021 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.
@@ -13,71 +13,69 @@
  * 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.builder.copy.ObjectCopier;
+import org.citygml4j.model.common.base.ModelObjects;
 import org.citygml4j.model.gml.geometry.primitives.DirectPosition;
 
-import de.hft.stuttgart.quality.model.jaxb.RingSelfIntType;
+public class RingSelfIntersection extends AbstractRingError {
+    private Edge edge1;
+    private Edge edge2;
+    private String type;
+    private DirectPosition vertex;
 
-public class RingSelfIntersection extends RingError {
+    public Edge getEdge1() {
+        return edge1;
+    }
 
-	private static final long serialVersionUID = -4426615638983209222L;
-	
-	private RingSelfIntType type;
-	private Edge edge1;
-	private Edge edge2;
-	private DirectPosition vertex1;
-	private DirectPosition vertex2;
+    public void setEdge1(Edge edge1) {
+        this.edge1 = ModelObjects.setParent(edge1, this);
+    }
 
-	public void setType(RingSelfIntType type) {
-		this.type = type;
-	}
+    public Edge getEdge2() {
+        return edge2;
+    }
 
-	public void setEdge1(Edge edge1) {
-		this.edge1 = edge1;
-	}
+    public void setEdge2(Edge edge2) {
+        this.edge2 = ModelObjects.setParent(edge2, this);
+    }
 
-	public void setEdge2(Edge edge2) {
-		this.edge2 = edge2;
-	}
+    public String getType() {
+        return type;
+    }
 
-	public void setVertex1(DirectPosition vertex1) {
-		this.vertex1 = vertex1;
-	}
-	
-	public void setVertex2(DirectPosition vertex2) {
-		this.vertex2 = vertex2;
-	}
+    public void setType(String type) {
+        this.type = type;
+    }
 
-	public RingSelfIntType getType() {
-		return type;
-	}
+    public DirectPosition getVertex() {
+        return vertex;
+    }
 
-	public Edge getEdge1() {
-		return edge1;
-	}
+    public void setVertex(DirectPosition vertex) {
+        this.vertex = ModelObjects.setParent(vertex, this);
+    }
 
-	public Edge getEdge2() {
-		return edge2;
-	}
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.GE_R_SELF_INTERSECTION;
+    }
 
-	public DirectPosition getVertex1() {
-		return vertex1;
-	}
-	
-	public DirectPosition getVertex2() {
-		return vertex2;
-	}
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        RingSelfIntersection copy = target == null ?
+                new RingSelfIntersection() :
+                (RingSelfIntersection) target;
 
-	@Override
-	public String toString() {
-		return "RingSelfIntersection [linearRingId=" + getLinearRingId() + ", type=" + type + ", edge1=" + edge1 + ", edge2="
-				+ edge2 + ", vertex1=" + vertex1 + ", vertex2=" + vertex2 + "]";
-	}
+        super.copyTo(copy, copyBuilder);
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
 
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new RingSelfIntersection(), copyBuilder);
-	}
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new RingSelfIntersection(), copyBuilder);
+    }
 }
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/RingTooFewPoints.java
similarity index 51%
rename from citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/NonManifoldEdge.java
rename to citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/RingTooFewPoints.java
index 3d07d3111256a064a9de756ffd1870ef891da5c9..59e1385e77e63555e7b6b829cbc4723d6ba45828 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/RingTooFewPoints.java
@@ -1,5 +1,5 @@
-/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+/*
+ * Copyright 2021 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.
@@ -13,32 +13,29 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package de.hft.stuttgart.quality.model;
 
-import java.util.ArrayList;
-import java.util.List;
+package de.hft.stuttgart.quality.model;
 
 import org.citygml4j.builder.copy.CopyBuilder;
 
-public class NonManifoldEdge extends SolidError {
-
-	private static final long serialVersionUID = -4312748985706248178L;
+public class RingTooFewPoints extends AbstractRingError {
 
-	private List<Edge> edges;
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.GE_R_TOO_FEW_POINTS;
+    }
 
-	public boolean isSetEdges() {
-		return edges != null && !edges.isEmpty();
-	}
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        RingTooFewPoints copy = target == null ?
+                new RingTooFewPoints() :
+                (RingTooFewPoints) target;
 
-	public List<Edge> getEdges() {
-		if (edges == null) {
-			edges = new ArrayList<>();
-		}
-		return edges;
-	}
+        return super.copyTo(copy, copyBuilder);
+    }
 
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new NonPlanarNormalsDeviation(), copyBuilder);
-	}
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new RingTooFewPoints(), copyBuilder);
+    }
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SemanticAttributeMissing.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SemanticAttributeMissing.java
new file mode 100644
index 0000000000000000000000000000000000000000..e4d09530148f61408a22c37ab86a29cefe2a81a0
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SemanticAttributeMissing.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+
+public class SemanticAttributeMissing extends AbstractSemanticError {
+    private String attributeName;
+    private String childId;
+    private boolean generic;
+
+    public String getAttributeName() {
+        return attributeName;
+    }
+
+    public void setAttributeName(String attributeName) {
+        this.attributeName = attributeName;
+    }
+
+    public String getChildId() {
+        return childId;
+    }
+
+    public void setChildId(String childId) {
+        this.childId = childId;
+    }
+
+    public boolean isGeneric() {
+        return generic;
+    }
+
+    public void setGeneric(boolean generic) {
+        this.generic = generic;
+    }
+
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.SE_ATTRIBUTE_MISSING;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        SemanticAttributeMissing copy = target == null ?
+                new SemanticAttributeMissing() :
+                (SemanticAttributeMissing) target;
+
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new SemanticAttributeMissing(), copyBuilder);
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SemanticAttributeWrongValue.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SemanticAttributeWrongValue.java
new file mode 100644
index 0000000000000000000000000000000000000000..ca016247a9b10dd3428f8619773481fff6790e27
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SemanticAttributeWrongValue.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+
+public class SemanticAttributeWrongValue extends AbstractSemanticError {
+    private String attributeName;
+    private String childId;
+    private boolean generic;
+
+    public String getAttributeName() {
+        return attributeName;
+    }
+
+    public void setAttributeName(String attributeName) {
+        this.attributeName = attributeName;
+    }
+
+    public String getChildId() {
+        return childId;
+    }
+
+    public void setChildId(String childId) {
+        this.childId = childId;
+    }
+
+    public boolean isGeneric() {
+        return generic;
+    }
+
+    public void setGeneric(boolean generic) {
+        this.generic = generic;
+    }
+
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.SE_ATTRIBUTE_WRONG_VALUE;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        SemanticAttributeWrongValue copy = target == null ?
+                new SemanticAttributeWrongValue() :
+                (SemanticAttributeWrongValue) target;
+
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new SemanticAttributeWrongValue(), copyBuilder);
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidAllPolygonsWrongOrientation.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidAllPolygonsWrongOrientation.java
new file mode 100644
index 0000000000000000000000000000000000000000..81af70e82c4fbb1cab70d75c69d01034553b059a
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidAllPolygonsWrongOrientation.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2021 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;
+
+public class SolidAllPolygonsWrongOrientation extends AbstractSolidError {
+
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.GE_S_ALL_POLYGONS_WRONG_ORIENTATION;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        SolidAllPolygonsWrongOrientation copy = target == null ?
+                new SolidAllPolygonsWrongOrientation() :
+                (SolidAllPolygonsWrongOrientation) target;
+
+        return super.copyTo(copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new SolidAllPolygonsWrongOrientation(), copyBuilder);
+    }
+}
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
deleted file mode 100644
index d20493c4cfb7d97553a8b140577626d29837bb4b..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidError.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*-
- * 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/SolidMultipleConnectedComponents.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidMultipleConnectedComponents.java
new file mode 100644
index 0000000000000000000000000000000000000000..efe2c1aba9d2f27740d6ec78490ac94a5cd109ef
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidMultipleConnectedComponents.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+import org.citygml4j.model.common.base.ModelObjects;
+import org.citygml4j.model.common.child.ChildList;
+
+import java.util.List;
+
+public class SolidMultipleConnectedComponents extends AbstractSolidError {
+    private List<Component> components;
+
+    public boolean isSetComponents() {
+        return components != null && !components.isEmpty();
+    }
+
+    public List<Component> getComponents() {
+        if (components == null) {
+            components = new ChildList<>(this);
+        }
+
+        return components;
+    }
+
+    public void setComponents(List<Component> components) {
+        this.components = ModelObjects.setParent(components, this);
+    }
+
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.GE_S_MULTIPLE_CONNECTED_COMPONENTS;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        SolidMultipleConnectedComponents copy = target == null ?
+                new SolidMultipleConnectedComponents() :
+                (SolidMultipleConnectedComponents) target;
+
+        super.copyTo(copy, copyBuilder);
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new SolidMultipleConnectedComponents(), copyBuilder);
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidNonManifoldEdge.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidNonManifoldEdge.java
new file mode 100644
index 0000000000000000000000000000000000000000..9862ce4497132f685bf83424f8f835088561fba2
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidNonManifoldEdge.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+import org.citygml4j.model.common.base.ModelObjects;
+import org.citygml4j.model.common.child.ChildList;
+
+import java.util.List;
+
+public class SolidNonManifoldEdge extends AbstractSolidError {
+    private List<Edge> edges;
+
+    public boolean isSetEdges() {
+        return edges != null && !edges.isEmpty();
+    }
+
+    public List<Edge> getEdges() {
+        if (edges == null) {
+            edges = new ChildList<>(this);
+        }
+
+        return edges;
+    }
+
+    public void setEdges(List<Edge> edges) {
+        this.edges = ModelObjects.setParent(edges, this);
+    }
+
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.GE_S_NON_MANIFOLD_EDGE;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        SolidNonManifoldEdge copy = target == null ?
+                new SolidNonManifoldEdge() :
+                (SolidNonManifoldEdge) target;
+
+        super.copyTo(copy, copyBuilder);
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new SolidNonManifoldEdge(), copyBuilder);
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidNonManifoldVertex.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidNonManifoldVertex.java
new file mode 100644
index 0000000000000000000000000000000000000000..e5551e9b313e36918dcd6394dcfea6375ffb6249
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidNonManifoldVertex.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+import org.citygml4j.model.common.base.ModelObjects;
+import org.citygml4j.model.gml.geometry.primitives.DirectPosition;
+
+public class SolidNonManifoldVertex extends AbstractSolidError {
+    private DirectPosition vertex;
+
+    public DirectPosition getVertex() {
+        return vertex;
+    }
+
+    public void setVertex(DirectPosition vertex) {
+        this.vertex = ModelObjects.setParent(vertex, this);
+    }
+
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.GE_S_NON_MANIFOLD_VERTEX;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        SolidNonManifoldVertex copy = target == null ?
+                new SolidNonManifoldVertex() :
+                (SolidNonManifoldVertex) target;
+
+        super.copyTo(copy, copyBuilder);
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new SolidNonManifoldVertex(), copyBuilder);
+    }
+}
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 71a9b13521997340c7e9b488cd54f5e7b7eda6b8..589cfd5ed17863821011369eb176053fe4b88ab5 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
@@ -1,5 +1,5 @@
-/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+/*
+ * Copyright 2021 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.
@@ -13,32 +13,52 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package de.hft.stuttgart.quality.model;
 
-import java.util.ArrayList;
+import org.citygml4j.builder.copy.CopyBuilder;
+import org.citygml4j.builder.copy.ObjectCopier;
+import org.citygml4j.model.common.base.ModelObjects;
+import org.citygml4j.model.common.child.ChildList;
+
 import java.util.List;
 
-import org.citygml4j.builder.copy.CopyBuilder;
+public class SolidNotClosed extends AbstractSolidError {
+    private List<Edge> edges;
+
+    public boolean isSetEdges() {
+        return edges != null && !edges.isEmpty();
+    }
+
+    public List<Edge> getEdges() {
+        if (edges == null) {
+            edges = new ChildList<>(this);
+        }
 
-public class SolidNotClosed extends SolidError {
+        return edges;
+    }
 
-	private static final long serialVersionUID = 4609395125395073697L;
+    public void setEdges(List<Edge> edges) {
+        this.edges = ModelObjects.setParent(edges, this);
+    }
 
-	private List<Edge> edges;
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.GE_S_NOT_CLOSED;
+    }
 
-	public boolean isSetEdges() {
-		return edges != null && !edges.isEmpty();
-	}
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        SolidNotClosed copy = target == null ?
+                new SolidNotClosed() :
+                (SolidNotClosed) target;
 
-	public List<Edge> getEdges() {
-		if (edges == null) {
-			edges = new ArrayList<>();
-		}
-		return edges;
-	}
+        super.copyTo(copy, copyBuilder);
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
 
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new SolidNotClosed(), copyBuilder);
-	}
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new SolidNotClosed(), copyBuilder);
+    }
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidPolygonWrongOrientation.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidPolygonWrongOrientation.java
new file mode 100644
index 0000000000000000000000000000000000000000..8b256d5b9d28ddfa1f90c40269c026f111f4d3e5
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidPolygonWrongOrientation.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+import org.citygml4j.model.common.base.ModelObjects;
+import org.citygml4j.model.common.child.ChildList;
+
+import java.util.List;
+
+public class SolidPolygonWrongOrientation extends AbstractSolidError {
+    private List<Edge> edges;
+
+    public boolean isSetEdges() {
+        return edges != null && !edges.isEmpty();
+    }
+
+    public List<Edge> getEdges() {
+        if (edges == null) {
+            edges = new ChildList<>(this);
+        }
+
+        return edges;
+    }
+
+    public void setEdges(List<Edge> edges) {
+        this.edges = ModelObjects.setParent(edges, this);
+    }
+
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.GE_S_POLYGON_WRONG_ORIENTATION;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        SolidPolygonWrongOrientation copy = target == null ?
+                new SolidPolygonWrongOrientation() :
+                (SolidPolygonWrongOrientation) target;
+
+        super.copyTo(copy, copyBuilder);
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new SolidPolygonWrongOrientation(), copyBuilder);
+    }
+}
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 423512c6a5910d0c63c5d9c073800f6d6a0adb47..44b00153d0c35c9048d716c0f2e24f39ead77180 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
@@ -1,5 +1,5 @@
-/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+/*
+ * Copyright 2021 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.
@@ -13,41 +13,49 @@
  * 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;
-
-public class SolidSelfIntersection extends SolidError {
-
-	private static final long serialVersionUID = 4086097021438848040L;
-
-	private String polygonId1;
-	private String polygonId2;
-
-	public String getPolygonId1() {
-		return polygonId1;
-	}
-
-	public void setPolygonId1(String polygonId1) {
-		this.polygonId1 = polygonId1;
-	}
-
-	public String getPolygonId2() {
-		return polygonId2;
-	}
-
-	public void setPolygonId2(String polygonId2) {
-		this.polygonId2 = polygonId2;
-	}
-
-	@Override
-	public String toString() {
-		return "SolidSelfIntersection [geometryId=" + getGeometryId() + ", polygonId1=" + polygonId1 + ", polygonId2="
-				+ polygonId2 + "]";
-	}
-
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new SolidSelfIntersection(), copyBuilder);
-	}
+import org.citygml4j.builder.copy.ObjectCopier;
+
+public class SolidSelfIntersection extends AbstractSolidError {
+    private String polygonId1;
+    private String polygonId2;
+
+    public String getPolygonId1() {
+        return polygonId1;
+    }
+
+    public void setPolygonId1(String polygonId1) {
+        this.polygonId1 = polygonId1;
+    }
+
+    public String getPolygonId2() {
+        return polygonId2;
+    }
+
+    public void setPolygonId2(String polygonId2) {
+        this.polygonId2 = polygonId2;
+    }
+
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.GE_S_SELF_INTERSECTION;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        SolidSelfIntersection copy = target == null ?
+                new SolidSelfIntersection() :
+                (SolidSelfIntersection) target;
+
+        super.copyTo(copy, copyBuilder);
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new SolidSelfIntersection(), copyBuilder);
+    }
 }
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/SolidTooFewPolygons.java
similarity index 50%
rename from citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/OrientationRingsSame.java
rename to citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidTooFewPolygons.java
index 16ab55ead3b8e69e39f6f620439c592150f2071f..9bfe16dd5f66a4835bd433d69b9bc89d9d188ba0 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/SolidTooFewPolygons.java
@@ -1,5 +1,5 @@
-/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+/*
+ * Copyright 2021 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.
@@ -13,31 +13,29 @@
  * 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;
 
-public class OrientationRingsSame extends PolygonError {
-
-	private static final long serialVersionUID = -6983324580253488854L;
-	
-	private String linearRingId;
+public class SolidTooFewPolygons extends AbstractSolidError {
 
-	public void setLinearRingId(String linearRingId) {
-		this.linearRingId = linearRingId;
-	}
+    @Override
+    public ErrorType getErrorType() {
+        return ErrorType.GE_S_TOO_FEW_POLYGONS;
+    }
 
-	public String getLinearRingId() {
-		return linearRingId;
-	}
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        SolidTooFewPolygons copy = target == null ?
+                new SolidTooFewPolygons() :
+                (SolidTooFewPolygons) target;
 
-	@Override
-	public String toString() {
-		return "OrientationRingsSame [polygonId=" + getPolygonId() + ", linearRingId=" + linearRingId + "]";
-	}
+        return super.copyTo(copy, copyBuilder);
+    }
 
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new OrientationRingsSame(), copyBuilder);
-	}
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new SolidTooFewPolygons(), copyBuilder);
+    }
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Statistics.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Statistics.java
new file mode 100644
index 0000000000000000000000000000000000000000..80638c7ef1fc77856b326950385d03bb8d7b7c47
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Statistics.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+import org.citygml4j.model.common.base.ModelObjects;
+
+public class Statistics extends AbstractDataType {
+    private FeatureStatistics numErrorBuildings;
+    private FeatureStatistics numErrorVegetation;
+    private FeatureStatistics numErrorLandObjects;
+    private FeatureStatistics numErrorBridgeObjects;
+    private FeatureStatistics numErrorWaterObjects;
+    private FeatureStatistics numErrorTransportation;
+    private ErrorStatistics errorStatistics;
+
+    public FeatureStatistics getNumErrorBuildings() {
+        return numErrorBuildings;
+    }
+
+    public void setNumErrorBuildings(FeatureStatistics numErrorBuildings) {
+        this.numErrorBuildings = ModelObjects.setParent(numErrorBuildings, this);
+    }
+
+    public FeatureStatistics getNumErrorVegetation() {
+        return numErrorVegetation;
+    }
+
+    public void setNumErrorVegetation(FeatureStatistics numErrorVegetation) {
+        this.numErrorVegetation = ModelObjects.setParent(numErrorVegetation, this);
+    }
+
+    public FeatureStatistics getNumErrorLandObjects() {
+        return numErrorLandObjects;
+    }
+
+    public void setNumErrorLandObjects(FeatureStatistics numErrorLandObjects) {
+        this.numErrorLandObjects = ModelObjects.setParent(numErrorLandObjects, this);
+    }
+
+    public FeatureStatistics getNumErrorBridgeObjects() {
+        return numErrorBridgeObjects;
+    }
+
+    public void setNumErrorBridgeObjects(FeatureStatistics numErrorBridgeObjects) {
+        this.numErrorBridgeObjects = ModelObjects.setParent(numErrorBridgeObjects, this);
+    }
+
+    public FeatureStatistics getNumErrorWaterObjects() {
+        return numErrorWaterObjects;
+    }
+
+    public void setNumErrorWaterObjects(FeatureStatistics numErrorWaterObjects) {
+        this.numErrorWaterObjects = ModelObjects.setParent(numErrorWaterObjects, this);
+    }
+
+    public FeatureStatistics getNumErrorTransportation() {
+        return numErrorTransportation;
+    }
+
+    public void setNumErrorTransportation(FeatureStatistics numErrorTransportation) {
+        this.numErrorTransportation = ModelObjects.setParent(numErrorTransportation, this);
+    }
+
+    public ErrorStatistics getErrorStatistics() {
+        return errorStatistics;
+    }
+
+    public void setErrorStatistics(ErrorStatistics errorStatistics) {
+        this.errorStatistics = ModelObjects.setParent(errorStatistics, this);
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        Statistics copy = target == null ?
+                new Statistics() :
+                (Statistics) target;
+
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new Statistics(), copyBuilder);
+    }
+}
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
deleted file mode 100644
index 7e1272228341b9adb212f2b3af5066f349ffd51b..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/TooFewPoints.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*-
- * 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;
-
-public class TooFewPoints extends RingError {
-
-	private static final long serialVersionUID = -904319347280328865L;
-	
-	@Override
-	public String toString() {
-		return "TooFewPoints [linearRingId=" + getLinearRingId() + "]";
-	}
-
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new TooFewPoints(), copyBuilder);
-	}
-}
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
deleted file mode 100644
index 19abc235bc8a9dacf4513b6cd6d8f498d3211688..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/TooFewPolygons.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*-
- * 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;
-
-public class TooFewPolygons extends SolidError {
-
-	private static final long serialVersionUID = -51591095439740599L;
-
-	@Override
-	public String toString() {
-		return "TooFewPolygons [geometryId=" + getGeometryId() + "]";
-	}
-
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new TooFewPolygons(), copyBuilder);
-	}
-}
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 2ee30ba0b6f0e4e9cb90aabf9fb996d27fffd63b..a2ca0c63f6decbbfb8fac6f88664b5ece3c450a6 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
@@ -1,5 +1,5 @@
-/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+/*
+ * Copyright 2021 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.
@@ -13,74 +13,91 @@
  * 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.builder.copy.ObjectCopier;
+import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
+import org.citygml4j.model.common.base.ModelObjects;
+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 java.time.ZonedDateTime;
 
-import org.citygml4j.builder.copy.CopyBuilder;
+public class Validation extends AbstractFeature implements ADEModelObject {
+    private ZonedDateTime validationDate;
+    private String validationSoftware;
+    private ValidationPlan validationPlan;
+    private Statistics statistics;
+
+    public ZonedDateTime getValidationDate() {
+        return validationDate;
+    }
+
+    public void setValidationDate(ZonedDateTime validationDate) {
+        this.validationDate = validationDate;
+    }
+
+    public String getValidationSoftware() {
+        return validationSoftware;
+    }
+
+    public void setValidationSoftware(String validationSoftware) {
+        this.validationSoftware = validationSoftware;
+    }
+
+    public ValidationPlan getValidationPlan() {
+        return validationPlan;
+    }
+
+    public void setValidationPlan(ValidationPlan validationPlan) {
+        this.validationPlan = ModelObjects.setParent(validationPlan, this);
+    }
+
+    public Statistics getStatistics() {
+        return statistics;
+    }
+
+    public void setStatistics(Statistics statistics) {
+        this.statistics = ModelObjects.setParent(statistics, this);
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        Validation copy = target == null ?
+                new Validation() :
+                (Validation) target;
+
+        super.copyTo(copy, copyBuilder);
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new Validation(), 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);
+    }
 
-import de.hft.stuttgart.quality.model.jaxb.Statistics;
-import de.hft.stuttgart.quality.model.jaxb.ValidationPlan;
-
-public class Validation extends ChildObject {
-
-	private static final long serialVersionUID = 1738293574859506005L;
-	
-	private ZonedDateTime validationDate;
-	private String validationSoftware;
-	private ValidationPlan validationPlan;
-	private Statistics statistics;
-
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return this;
-	}
-	
-	public boolean isSetStatistics() {
-		return statistics != null;
-	}
-	
-	public void setStatistics(Statistics statistics) {
-		this.statistics = statistics;
-	}
-	
-	public Statistics getStatistics() {
-		return statistics;
-	}
-	
-	public boolean isSetValidationPlan() {
-		return validationPlan != null;
-	}
-	
-	public void setValidationPlan(ValidationPlan validationPlan) {
-		this.validationPlan = validationPlan;
-	}
-	
-	public ValidationPlan getValidationPlan() {
-		return validationPlan;
-	}
-	
-	public boolean isSetDateTime() {
-		return validationDate != null;
-	}
-	
-	public boolean isSetValidationSoftware() {
-		return validationSoftware != null;
-	}
-	
-	public void setValidationDate(ZonedDateTime validationDate) {
-		this.validationDate = validationDate;
-	}
-	
-	public ZonedDateTime getValidationDate() {
-		return validationDate;
-	}
-	
-	public void setValidationSoftware(String validationSoftware) {
-		this.validationSoftware = validationSoftware;
-	}
-	
-	public String getValidationSoftware() {
-		return validationSoftware;
-	}
+    @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/ValidationPlan.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationPlan.java
new file mode 100644
index 0000000000000000000000000000000000000000..d1883a6eb40d06b1d1ca376a5b1ea16f254ec1c2
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationPlan.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2021 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.builder.copy.ObjectCopier;
+import org.citygml4j.model.common.base.ModelObjects;
+import org.citygml4j.model.common.child.ChildList;
+
+import java.util.List;
+
+public class ValidationPlan extends AbstractDataType {
+    private List<Parameter> globalParameters;
+    private Filter filter;
+    private Requirement requirement;
+
+    public boolean isSetGlobalParameters() {
+        return globalParameters != null && !globalParameters.isEmpty();
+    }
+
+    public List<Parameter> getGlobalParameters() {
+        if (globalParameters == null) {
+            globalParameters = new ChildList<>(this);
+        }
+
+        return globalParameters;
+    }
+
+    public void setGlobalParameters(List<Parameter> globalParameters) {
+        this.globalParameters = ModelObjects.setParent(globalParameters, this);
+    }
+
+    public Filter getFilter() {
+        return filter;
+    }
+
+    public void setFilter(Filter filter) {
+        this.filter = ModelObjects.setParent(filter, this);
+    }
+
+    public Requirement getRequirement() {
+        return requirement;
+    }
+
+    public void setRequirement(Requirement requirement) {
+        this.requirement = ModelObjects.setParent(requirement, this);
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        ValidationPlan copy = target == null ?
+                new ValidationPlan() :
+                (ValidationPlan) target;
+
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new ValidationPlan(), copyBuilder);
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationProperty.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationProperty.java
new file mode 100644
index 0000000000000000000000000000000000000000..e5f32dbbbc61973ab494fd04110d8d512f6e42c1
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationProperty.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2021 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.gml.feature.FeatureProperty;
+
+public class ValidationProperty extends FeatureProperty<Validation> implements ADEModelObject {
+
+    public ValidationProperty() {
+    }
+
+    public ValidationProperty(Validation object) {
+        super(object);
+    }
+
+    public ValidationProperty(String href) {
+        super(href);
+    }
+
+    @Override
+    public Class<Validation> getAssociableClass() {
+        return Validation.class;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        Validation copy = (target == null) ?
+                new Validation() :
+                (Validation) target;
+
+        return super.copyTo(copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new Validation(), copyBuilder);
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationResult.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationResult.java
index f9c6780b9de9a28bc43c980f59de2a48bf2a11a3..8232f281aa2cffc1495daf76591762d7cc42d637 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationResult.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationResult.java
@@ -1,5 +1,5 @@
-/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+/*
+ * Copyright 2021 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.
@@ -13,72 +13,64 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package de.hft.stuttgart.quality.model;
 
-import java.util.ArrayList;
-import java.util.List;
+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.builder.copy.ObjectCopier;
+import org.citygml4j.model.common.base.ModelObjects;
+import org.citygml4j.model.common.child.ChildList;
 
-import de.hft.stuttgart.quality.model.jaxb.ResultType;
+import java.util.List;
 
-public class ValidationResult extends AbstractFeature implements ADEModelObject {
+public class ValidationResult extends AbstractDataType {
+    private ValidationProperty validation;
+    private List<AbstractError> errors;
+    private ResultType resultType;
 
-	private static final long serialVersionUID = 1180762313908627342L;
-	
-	private ResultType result;
-	
-	private List<ValidationError> errors;
-	
-	public boolean hasErrors() {
-		return errors != null && !errors.isEmpty();
-	}
+    public ValidationProperty getValidation() {
+        return validation;
+    }
 
-	public List<ValidationError> getErrors() {
-		if (errors == null) {
-			errors = new ArrayList<>(2);
-		}
-		return errors;
-	}
+    public void setValidation(ValidationProperty validation) {
+        this.validation = ModelObjects.setParent(validation, this);
+    }
 
-	public void setResult(ResultType result) {
-		this.result = result;
-	}
+    public boolean isSetErrors() {
+        return errors != null && !errors.isEmpty();
+    }
 
-	public ResultType getResult() {
-		return result;
-	}
+    public List<AbstractError> getErrors() {
+        if (errors == null) {
+            errors = new ChildList<>(this);
+        }
 
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new ValidationResult(), copyBuilder);
-	}
+        return errors;
+    }
 
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
+    public void setErrors(List<AbstractError> errors) {
+        this.errors = ModelObjects.setParent(errors, this);
+    }
 
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
+    public ResultType getResultType() {
+        return resultType;
+    }
 
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
+    public void setResultType(ResultType resultType) {
+        this.resultType = resultType;
+    }
 
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        ValidationResult copy = target == null ?
+                new ValidationResult() :
+                (ValidationResult) target;
 
+        return ObjectCopier.copyTo(this, copy, copyBuilder);
+    }
 
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new ValidationResult(), copyBuilder);
+    }
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationResultProperty.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationResultProperty.java
new file mode 100644
index 0000000000000000000000000000000000000000..4c152c1f20b8e1907e5833b3a61140eae0383b8f
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationResultProperty.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2021 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.gml.base.AssociationByRep;
+
+public class ValidationResultProperty extends AssociationByRep<ValidationResult> implements ADEModelObject {
+
+    public ValidationResultProperty() {
+        super();
+    }
+
+    public ValidationResultProperty(ValidationResult object) {
+        super(object);
+    }
+
+    @Override
+    public Class<ValidationResult> getAssociableClass() {
+        return ValidationResult.class;
+    }
+
+    @Override
+    public Object copyTo(Object target, CopyBuilder copyBuilder) {
+        ValidationResult copy = (target == null) ?
+                new ValidationResult() :
+                (ValidationResult) target;
+
+        return super.copyTo(copy, copyBuilder);
+    }
+
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new ValidationResult(), copyBuilder);
+    }
+}
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/ValidationResultPropertyElement.java
similarity index 54%
rename from citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AllPolygonsWrongOrientation.java
rename to citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationResultPropertyElement.java
index 0b384b735f8fe70961198da21773642cac5ba538..2c8e6345e3ce16768db27cf2db523f3068dfe544 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/ValidationResultPropertyElement.java
@@ -1,5 +1,5 @@
-/*-
- * Copyright 2020 Hochschule für Technik Stuttgart
+/*
+ * Copyright 2021 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.
@@ -13,22 +13,23 @@
  * 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.ADEGenericApplicationProperty;
 
-public class AllPolygonsWrongOrientation extends SolidError {
-
-	private static final long serialVersionUID = 3817224755569965908L;
+public class ValidationResultPropertyElement extends ADEGenericApplicationProperty<ValidationResultProperty> {
 
-	@Override
-	public String toString() {
-		return "AllPolygonsWrongOrientation [geometryId=" + getGeometryId() + "]";
-	}
+    public ValidationResultPropertyElement() {
+    }
 
-	@Override
-	public Object copy(CopyBuilder copyBuilder) {
-		return copyTo(new AllPolygonsWrongOrientation(), copyBuilder);
-	}
+    public ValidationResultPropertyElement(ValidationResultProperty value) {
+        super(value);
+    }
 
+    @Override
+    public Object copy(CopyBuilder copyBuilder) {
+        return copyTo(new ValidationResultProperty(), copyBuilder);
+    }
 }
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
deleted file mode 100644
index f582f221a54f4c970bf5b76adea520c74ffb8c7e..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AllPolygonsWrongOrientationType.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*-
- * 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;
-
-@XmlRootElement(name = "GE_S_ALL_POLYGONS_WRONG_ORIENTATION")
-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
deleted file mode 100644
index ce13091d5f2c4ce991088f9e8c8c54039886fef9..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AttributeMissingType.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*-
- * 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;
-
-@XmlRootElement(name = "SE_ATTRIBUTE_MISSING")
-public class AttributeMissingType extends SemanticErrorType {
-	
-	private String childId;
-	private String attributeName;
-	private boolean generic;
-
-	public String getChildId() {
-		return childId;
-	}
-
-	public void setChildId(String childId) {
-		this.childId = childId;
-	}
-
-	public String getAttributeName() {
-		return attributeName;
-	}
-
-	public void setAttributeName(String attributeName) {
-		this.attributeName = attributeName;
-	}
-
-	public boolean isGeneric() {
-		return generic;
-	}
-
-	public void setGeneric(boolean generic) {
-		this.generic = generic;
-	}
-
-}
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
deleted file mode 100644
index a3596b92ee5886aa065df1f5d9bee703e30b0f23..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AttributeWrongValueType.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*-
- * 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;
-
-@XmlRootElement(name = "SE_ATTRIBUTE_WRONG_VALUE")
-public class AttributeWrongValueType extends SemanticErrorType {
-
-	private String childId;
-	private String attributeName;
-	private boolean generic;
-
-	public String getChildId() {
-		return childId;
-	}
-
-	public void setChildId(String childId) {
-		this.childId = childId;
-	}
-
-	public String getAttributeName() {
-		return attributeName;
-	}
-
-	public void setAttributeName(String attributeName) {
-		this.attributeName = attributeName;
-	}
-
-	public boolean isGeneric() {
-		return generic;
-	}
-
-	public void setGeneric(boolean generic) {
-		this.generic = generic;
-	}
-
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/Checking.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/Checking.java
deleted file mode 100644
index 75a9e077864f50da6cb400a57fabe7e8f421136a..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/Checking.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*-
- * 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 java.io.Serializable;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlValue;
-
-@XmlAccessorType(XmlAccessType.FIELD)
-public class Checking implements Serializable {
-
-	private static final long serialVersionUID = 8429726429709450505L;
-	
-	@XmlValue
-	private TopLevelFeatureType value;
-
-	public Checking() {
-	}
-	
-	public Checking(TopLevelFeatureType value) {
-		this.value = value;
-	}
-
-	public void setValue(TopLevelFeatureType value) {
-		this.value = value;
-	}
-
-	public TopLevelFeatureType getValue() {
-		return value;
-	}
-
-	@Override
-	public String toString() {
-		return "Checking [value=" + value + "]";
-	}
-
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/Component.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/Component.java
deleted file mode 100644
index f1b220902dc02af373078c9158823815288077e8..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/Component.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*-
- * 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 java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlElement;
-
-public class Component implements Serializable {
-
-	private static final long serialVersionUID = 75005650370135888L;
-
-	@XmlElement(name = "polygonId")
-	private List<String> polygonIds;
-	
-	public List<String> getPolygonIds() {
-		if (polygonIds == null) {
-			polygonIds = new ArrayList<>();
-		}
-		return polygonIds;
-	}
-}
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
deleted file mode 100644
index 4a584f0c1612709bd7bb030f04a91edabdb83584..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ConsecutivePointsSameType.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*-
- * 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 net.opengis.gml.DirectPositionType;
-
-@XmlRootElement(name = "GE_R_CONSECUTIVE_POINTS_SAME")
-public class ConsecutivePointsSameType extends RingErrorType {
-	
-	private DirectPositionType vertex1;
-	private DirectPositionType vertex2;
-	
-	public void setVertex1(DirectPositionType vertex1) {
-		this.vertex1 = vertex1;
-	}
-	
-	public void setVertex2(DirectPositionType vertex2) {
-		this.vertex2 = vertex2;
-	}
-	
-	public DirectPositionType getVertex1() {
-		return vertex1;
-	}
-	
-	public DirectPositionType getVertex2() {
-		return vertex2;
-	}
-
-	@Override
-	public String toString() {
-		return "ConsecutivePointsSameType [linearRingId=" + getLinearRingId() + ", vertex1=" + vertex1 + ", vertex2=" + vertex2
-				+ "]";
-	}
-
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/EdgeType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/EdgeType.java
deleted file mode 100644
index 62af6aa37b1710be6d038cbf89e1c02a06f83b03..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/EdgeType.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*-
- * 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.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-
-import net.opengis.gml.DirectPositionType;
-
-@XmlAccessorType(XmlAccessType.FIELD)
-public class EdgeType {
-
-	private DirectPositionType from;
-	private DirectPositionType to;
-
-	public void setFrom(DirectPositionType from) {
-		this.from = from;
-	}
-
-	public void setTo(DirectPositionType to) {
-		this.to = to;
-	}
-
-	public DirectPositionType getFrom() {
-		return from;
-	}
-
-	public DirectPositionType getTo() {
-		return to;
-	}
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorId.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorId.java
deleted file mode 100644
index cb34d11c8af741170f2d89224cee993d8a4cebcd..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorId.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*-
- * 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.XmlEnum;
-
-@XmlEnum
-public enum ErrorId {
-
-	GE_R_TOO_FEW_POINTS, GE_R_NOT_CLOSED, GE_R_CONSECUTIVE_POINTS_SAME, GE_R_SELF_INTERSECTION,
-	GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION, GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE, GE_P_INTERIOR_DISCONNECTED,
-	GE_P_INTERSECTING_RINGS, GE_P_HOLE_OUTSIDE, GE_P_ORIENTATION_RINGS_SAME, GE_P_INNER_RINGS_NESTED,
-	GE_S_TOO_FEW_POLYGONS, GE_S_NOT_CLOSED, GE_S_NON_MANIFOLD_EDGE, GE_S_POLYGON_WRONG_ORIENTATION,
-	GE_S_ALL_POLYGONS_WRONG_ORIENTATION, GE_S_NON_MANIFOLD_VERTEX, GE_S_SELF_INTERSECTION,
-	GE_S_MULTIPLE_CONNECTED_COMPONENTS, SE_ATTRIBUTE_WRONG_VALUE, SE_ATTRIBUTE_MISSING
-
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorStatistics.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorStatistics.java
deleted file mode 100644
index 8b00693904fa0eaa97c7dbf0188770c0edf921d2..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorStatistics.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*-
- * 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 java.io.Serializable;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlValue;
-
-@XmlAccessorType(XmlAccessType.FIELD)
-public class ErrorStatistics implements Serializable {
-	
-	private static final long serialVersionUID = -1007447539987946146L;
-
-	@XmlAttribute
-	private ErrorId name;
-	
-	@XmlValue
-	private int amount;
-	
-	public void setName(ErrorId name) {
-		this.name = name;
-	}
-	
-	public ErrorId getName() {
-		return name;
-	}
-	
-	public void setAmount(int amount) {
-		this.amount = amount;
-	}
-	
-	public int getAmount() {
-		return amount;
-	}
-
-	@Override
-	public String toString() {
-		return "ErrorStatistics [name=" + name + ", amount=" + amount + "]";
-	}
-
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/FeatureStatistics.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/FeatureStatistics.java
deleted file mode 100644
index 3cc3227a54aceae42e7c133b3d1c2f6770705433..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/FeatureStatistics.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*-
- * 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 java.io.Serializable;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlValue;
-
-@XmlAccessorType(XmlAccessType.FIELD)
-public class FeatureStatistics implements Serializable {
-
-	private static final long serialVersionUID = 5794335930507488398L;
-
-	@XmlAttribute
-	private int numChecked;
-	
-	@XmlValue
-	private int numErrors;
-	
-	public FeatureStatistics() {
-	}
-	
-	public FeatureStatistics(int numChecked, int numErrors) {
-		this.numChecked = numChecked;
-		this.numErrors = numErrors;
-	}
-
-	public void setNumChecked(int numChecked) {
-		this.numChecked = numChecked;
-	}
-	
-	public void setNumErrors(int numErrors) {
-		this.numErrors = numErrors;
-	}
-	
-	public int getNumChecked() {
-		return numChecked;
-	}
-	
-	public int getNumErrors() {
-		return numErrors;
-	}
-
-	@Override
-	public String toString() {
-		return "FeatureStatistics [numChecked=" + numChecked + ", numErrors=" + numErrors + "]";
-	}
-}
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
deleted file mode 100644
index 17d09fcd42b57e81aa43045f7a962e5b61cd8e31..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/HoleOutsideType.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*-
- * 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;
-
-@XmlRootElement(name = "GE_P_HOLE_OUTSIDE")
-public class HoleOutsideType extends PolygonErrorType {
-
-	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/jaxb/InnerRingsNestedType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/InnerRingsNestedType.java
deleted file mode 100644
index cce7ffe5a8163dce16e2727f41cb4f232841321e..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/InnerRingsNestedType.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*-
- * 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;
-
-@XmlRootElement(name = "GE_P_INNER_RINGS_NESTED")
-public class InnerRingsNestedType extends PolygonErrorType {
-
-	private String linearRingId1;
-	private String linearRingId2;
-
-	public void setLinearRingId1(String linearRingId1) {
-		this.linearRingId1 = linearRingId1;
-	}
-
-	public void setLinearRingId2(String linearRingId2) {
-		this.linearRingId2 = linearRingId2;
-	}
-
-	public String getLinearRingId1() {
-		return linearRingId1;
-	}
-
-	public String getLinearRingId2() {
-		return linearRingId2;
-	}
-
-}
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
deleted file mode 100644
index a8daaf0c305b1f397a5236274dd752016f196039..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/InteriorDisconnectedType.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*-
- * 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;
-
-@XmlRootElement(name = "GE_P_INTERIOR_DISCONNECTED")
-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
deleted file mode 100644
index 7f47eef519d77e2d9938160a5a1e9732bad6502f..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/IntersectingRingsType.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*-
- * 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;
-
-@XmlRootElement(name = "GE_P_INTERSECTING_RINGS")
-public class IntersectingRingsType extends PolygonErrorType {
-
-	private String linearRingId1;
-	private String linearRingId2;
-
-	public void setLinearRingId1(String linearRingId1) {
-		this.linearRingId1 = linearRingId1;
-	}
-
-	public String getLinearRingId1() {
-		return linearRingId1;
-	}
-
-	public void setLinearRingId2(String linearRingId2) {
-		this.linearRingId2 = linearRingId2;
-	}
-
-	public String getLinearRingId2() {
-		return linearRingId2;
-	}
-
-}
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
deleted file mode 100644
index 0507eb04aa021306b9c2756c906de508850b730c..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/MultipleConnectedComponentsType.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*-
- * 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 java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlRootElement;
-
-@XmlRootElement(name = "GE_S_MULTIPLE_CONNECTED_COMPONENTS")
-public class MultipleConnectedComponentsType extends SolidErrorType {
-	
-	@XmlElementWrapper
-	@XmlElement(name = "component")
-	private List<Component> components;
-	
-	public boolean isSetComponents() {
-		return components != null && !components.isEmpty();
-	}
-	
-	public List<Component> getComponents() {
-		if (components == null) {
-			components = new ArrayList<>();
-		}
-		return components;
-	}
-
-}
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
deleted file mode 100644
index aac1ac8fe9a66c95ab27a81fc51f30e8285e6fc7..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/NonManifoldEdgeType.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*-
- * 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 java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlRootElement;
-
-@XmlRootElement(name = "GE_S_NON_MANIFOLD_EDGE")
-public class NonManifoldEdgeType extends SolidErrorType {
-
-	@XmlElementWrapper
-	@XmlElement(name = "edge")
-	private List<EdgeType> edges;
-
-	public boolean isSetEdges() {
-		return edges != null && !edges.isEmpty();
-	}
-
-	public List<EdgeType> getEdges() {
-		if (edges == null) {
-			edges = new ArrayList<>();
-		}
-		return edges;
-	}
-
-}
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
deleted file mode 100644
index 7b8f3a277b86f4e28f128e5eff363f7c04cb274c..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/NonManifoldVertexType.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*-
- * 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 net.opengis.gml.DirectPositionType;
-
-@XmlRootElement(name = "GE_S_NON_MANIFOLD_VERTEX")
-public class NonManifoldVertexType extends SolidErrorType {
-
-	private DirectPositionType vertex;
-
-	public void setVertex(DirectPositionType vertex) {
-		this.vertex = vertex;
-	}
-
-	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
deleted file mode 100644
index 4e3523b7385bda889276a616382a2cfd4808f1f2..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/NonPlanarDistancePlaneType.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*-
- * 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 net.opengis.gml.DirectPositionType;
-import net.opengis.gml.LengthType;
-
-@XmlRootElement(name = "GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE")
-public class NonPlanarDistancePlaneType extends PolygonErrorType {
-
-	private DirectPositionType vertex;
-	private LengthType distance;
-
-	public void setVertex(DirectPositionType vertex) {
-		this.vertex = vertex;
-	}
-
-	public void setDistance(LengthType distance) {
-		this.distance = distance;
-	}
-
-	public DirectPositionType getVertex() {
-		return vertex;
-	}
-
-	public LengthType getDistance() {
-		return distance;
-	}
-
-}
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
deleted file mode 100644
index 5471ad6b9a6d68c29bdc42ae0bc2bb18a5dba15c..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/NonPlanarNormalsDeviationType.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*-
- * 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 net.opengis.gml.AngleType;
-
-@XmlRootElement(name = "GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION")
-public class NonPlanarNormalsDeviationType extends PolygonErrorType {
-
-	private AngleType deviation;
-
-	public void setDeviation(AngleType deviation) {
-		this.deviation = deviation;
-	}
-
-	public AngleType getDeviation() {
-		return deviation;
-	}
-
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ObjectFactory.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ObjectFactory.java
deleted file mode 100644
index 987b4e48fa5d6226e191ffb8db02fc1765847796..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ObjectFactory.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*-
- * 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.JAXBElement;
-import javax.xml.bind.annotation.XmlElementDecl;
-import javax.xml.bind.annotation.XmlRegistry;
-import javax.xml.namespace.QName;
-
-import de.hft.stuttgart.quality.QualityADEModule;
-
-@XmlRegistry
-public class ObjectFactory {
-
-	private static final QName VALIDATION_QNAME = new QName(QualityADEModule.NAMESPACE_URI, "validation");
-	private static final QName VALIDATION_RESULT_QNAME = new QName(QualityADEModule.NAMESPACE_URI, "validationResult");
-	
-	public ValidationType createValidationType() {
-		return new ValidationType();
-	}
-	
-	public ValidationResultType createValidationResultType() {
-		return new ValidationResultType();
-	}
-	
-	public ConsecutivePointsSameType createConsecutivePointsSameType() {
-		return new ConsecutivePointsSameType();
-	}
-	
-	public TooFewPointsType createTooFewPointsType() {
-		return new TooFewPointsType();
-	}
-
-	@XmlElementDecl(namespace = QualityADEModule.NAMESPACE_URI, name = "validation", substitutionHeadNamespace = "http://www.opengis.net/citygml/2.0", substitutionHeadName = "_GenericApplicationPropertyOfCityModel")
-	public JAXBElement<ValidationType> createValidationType(ValidationType type) {
-		return new JAXBElement<>(VALIDATION_QNAME, ValidationType.class, type);
-	}
-	
-	@XmlElementDecl(namespace = QualityADEModule.NAMESPACE_URI, name = "validationResult", substitutionHeadNamespace = "http://www.opengis.net/citygml/2.0", substitutionHeadName = "_GenericApplicationPropertyOfCityObject")
-	public JAXBElement<ValidationResultType> createValidationResultType(ValidationResultType type) {
-		return new JAXBElement<>(VALIDATION_RESULT_QNAME, ValidationResultType.class, type);
-	}
-
-	public RingSelfIntersectionType createRingSelfIntersectionType() {
-		return new RingSelfIntersectionType();
-	}
-
-}
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
deleted file mode 100644
index a625724ee85acdbc0001bfc45dbede07a820da75..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/OrientationRingsSameType.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*-
- * 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;
-
-@XmlRootElement(name = "GE_P_ORIENTATION_RINGS_SAME")
-public class OrientationRingsSameType extends PolygonErrorType {
-
-	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/jaxb/Parameter.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/Parameter.java
deleted file mode 100644
index cb12193ec05223f6d248a2f085abde27d6a3c57e..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/Parameter.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*-
- * 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 java.io.Serializable;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlValue;
-
-@XmlType(name = "parameter")
-@XmlAccessorType(XmlAccessType.FIELD)
-public class Parameter implements Serializable {
-
-	private static final long serialVersionUID = 3704749975901280058L;
-
-	@XmlAttribute(name = "name")
-	private String name;
-
-	@XmlAttribute(required = false)
-	private String uom;
-
-	@XmlValue
-	private String value;
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setUom(String uom) {
-		this.uom = uom;
-	}
-
-	public void setValue(String value) {
-		this.value = value;
-	}
-	
-	public String getUom() {
-		return uom;
-	}
-	
-	public String getValue() {
-		return value;
-	}
-
-	@Override
-	public String toString() {
-		return "ParameterType [name=" + name + ", uom=" + uom + ", value=" + value + "]";
-	}
-
-}
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
deleted file mode 100644
index aec3160863ce571da00ad381232bbf062db5e664..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonErrorType.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*-
- * 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
deleted file mode 100644
index 7cd6358290b1b0305ef903f97d0f9ac432546a67..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonWrongOrientationType.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*-
- * 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 java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlRootElement;
-
-@XmlRootElement(name = "GE_S_POLYGON_WRONG_ORIENTATION")
-public class PolygonWrongOrientationType extends SolidErrorType {
-	
-	@XmlElementWrapper
-	@XmlElement(name = "edge")
-	private List<EdgeType> edges;
-	
-	public boolean isSetEdges() {
-		return edges != null && !edges.isEmpty();
-	}
-	
-	public List<EdgeType> getEdges() {
-		if (edges == null) {
-			edges = new ArrayList<>();
-		}
-		return edges;
-	}
-
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/Requirement.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/Requirement.java
deleted file mode 100644
index c3a2146e6526fb046896b866de3f1c161468cd89..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/Requirement.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*-
- * 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 java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlType;
-
-@XmlType(name = "requirement")
-@XmlAccessorType(XmlAccessType.FIELD)
-public class Requirement implements Serializable {
-
-	private static final long serialVersionUID = 8493047783215253763L;
-
-	@XmlAttribute
-	private RequirementId name;
-
-	@XmlAttribute
-	private boolean enabled;
-
-	@XmlElement(name = "parameter")
-	private List<Parameter> parameters;
-
-	public RequirementId getName() {
-		return name;
-	}
-
-	public List<Parameter> getParameters() {
-		if (parameters == null) {
-			parameters = new ArrayList<>(2);
-		}
-		return parameters;
-	}
-
-	public boolean isEnabled() {
-		return enabled;
-	}
-
-	public void setName(RequirementId name) {
-		this.name = name;
-	}
-	
-	public void setEnabled(boolean enabled) {
-		this.enabled = enabled;
-	}
-
-	@Override
-	public String toString() {
-		return "Requirement [name=" + name + ", enabled=" + enabled + ", parameters=" + parameters + "]";
-	}
-
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RequirementId.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RequirementId.java
deleted file mode 100644
index 851382c29b104f65c000aed4b4a0c5fc806150a2..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RequirementId.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*-
- * 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.XmlEnum;
-
-@XmlEnum
-public enum RequirementId {
-
-	R_GE_R_TOO_FEW_POINTS, R_GE_R_NOT_CLOSED, R_GE_R_CONSECUTIVE_POINTS_SAME, R_GE_R_SELF_INTERSECTION,
-	R_GE_P_NON_PLANAR, R_GE_P_INTERIOR_DISCONNECTED, R_GE_P_INTERSECTING_RINGS, R_GE_P_HOLE_OUTSIDE,
-	R_GE_P_ORIENTATION_RINGS_SAME, R_GE_P_INNER_RINGS_NESTED, R_GE_S_TOO_FEW_POLYGONS, R_GE_S_NOT_CLOSED,
-	R_GE_S_NON_MANIFOLD_EDGE, R_GE_S_POLYGON_WRONG_ORIENTATION, R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION,
-	R_GE_S_NON_MANIFOLD_VERTEX, R_GE_S_SELF_INTERSECTION, R_GE_S_MULTIPLE_CONNECTED_COMPONENTS,
-	R_SE_ATTRIBUTES_EXISTING, R_SE_ATTRIBUTES_CORRECT
-
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ResultType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ResultType.java
deleted file mode 100644
index 70db92cc86dbf718883e15b2158e42cf63562a7c..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ResultType.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*-
- * 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.XmlEnum;
-
-@XmlEnum
-public enum ResultType {
-
-	OK, ERROR, NOT_CHECKED
-
-}
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
deleted file mode 100644
index 90e7034c6d39a02dfedbeabe663f22fbd8a517c3..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RingErrorType.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*-
- * 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
deleted file mode 100644
index e6b9e259a32fac9c22ffcdc8188c77948e4e3157..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RingNotClosedType.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*-
- * 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;
-
-@XmlRootElement(name = "GE_R_NOT_CLOSED")
-public class RingNotClosedType extends RingErrorType {
-
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RingSelfIntType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RingSelfIntType.java
deleted file mode 100644
index 582bcc0c067e7d96bd235e4b8958a5ee930ca0bb..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RingSelfIntType.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*-
- * 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.XmlEnum;
-
-@XmlEnum
-public enum RingSelfIntType {
-	DUPLICATE_POINT, POINT_TOUCHES_EDGE, EDGE_INTERSECTS_EDGE
-}
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
deleted file mode 100644
index 5e01f5933b5b6d61de7ea4c3295981d0c0165535..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RingSelfIntersectionType.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*-
- * 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 net.opengis.gml.DirectPositionType;
-
-@XmlRootElement(name = "GE_R_SELF_INTERSECTION")
-public class RingSelfIntersectionType extends RingErrorType {
-
-	private RingSelfIntType type;
-	private EdgeType edge1;
-	private EdgeType edge2;
-	private DirectPositionType vertex1;
-	private DirectPositionType vertex2;
-
-	public void setType(RingSelfIntType type) {
-		this.type = type;
-	}
-
-	public void setEdge1(EdgeType edge1) {
-		this.edge1 = edge1;
-	}
-
-	public void setEdge2(EdgeType edge2) {
-		this.edge2 = edge2;
-	}
-
-	public void setVertex1(DirectPositionType vertex1) {
-		this.vertex1 = vertex1;
-	}
-	
-	public void setVertex2(DirectPositionType vertex2) {
-		this.vertex2 = vertex2;
-	}
-
-	public RingSelfIntType getType() {
-		return type;
-	}
-
-	public EdgeType getEdge1() {
-		return edge1;
-	}
-
-	public EdgeType getEdge2() {
-		return edge2;
-	}
-
-	public DirectPositionType getVertex1() {
-		return vertex1;
-	}
-	
-	public DirectPositionType getVertex2() {
-		return vertex2;
-	}
-
-}
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
deleted file mode 100644
index da2e5a530e4a696fcc7864d16abd743554389a5e..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/SemanticErrorType.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*-
- * 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
deleted file mode 100644
index ad57862b1f0a54141462549e57d86f0ac78c6f35..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/SolidErrorType.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*-
- * 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
deleted file mode 100644
index b2f64ddc4481995952adb1d49608734837c22bf9..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNotClosedType.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*-
- * 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 java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlRootElement;
-
-@XmlRootElement(name = "GE_S_NOT_CLOSED")
-public class SolidNotClosedType extends SolidErrorType {
-
-	@XmlElementWrapper
-	@XmlElement(name = "edge")
-	private List<EdgeType> edges;
-
-	public boolean isSetEdges() {
-		return edges != null && !edges.isEmpty();
-	}
-
-	public List<EdgeType> getEdges() {
-		if (edges == null) {
-			edges = new ArrayList<>();
-		}
-		return edges;
-	}
-
-}
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
deleted file mode 100644
index 58e37bc4334f62f11b84c902332a51aedb1603cb..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/SolidSelfIntersectionType.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*-
- * 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;
-
-@XmlRootElement(name = "GE_S_SELF_INTERSECTION")
-public class SolidSelfIntersectionType extends SolidErrorType {
-
-	private String polygonId1;
-	private String polygonId2;
-
-	public void setPolygonId1(String polygonId1) {
-		this.polygonId1 = polygonId1;
-	}
-
-	public void setPolygonId2(String polygonId2) {
-		this.polygonId2 = polygonId2;
-	}
-
-	public String getPolygonId1() {
-		return polygonId1;
-	}
-
-	public String getPolygonId2() {
-		return polygonId2;
-	}
-
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/Statistics.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/Statistics.java
deleted file mode 100644
index a141b601c9a95c56c117d33afa21977d9ca0a793..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/Statistics.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*-
- * 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 java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-
-@XmlAccessorType(XmlAccessType.FIELD)
-public class Statistics implements Serializable {
-
-	private static final long serialVersionUID = 2250094686994310986L;
-
-	private FeatureStatistics numErrorBuildings;
-	private FeatureStatistics numErrorVegetation;
-	private FeatureStatistics numErrorLandObjects;
-	private FeatureStatistics numErrorBridgeObjects;
-	private FeatureStatistics numErrorWaterObjects;
-	private FeatureStatistics numErrorTransportation;
-
-	@XmlElementWrapper(name = "errorStatistics")
-	@XmlElement(name = "error")
-	private List<ErrorStatistics> errorStatistics;
-
-	public List<ErrorStatistics> getErrorStatistics() {
-		if (errorStatistics == null) {
-			errorStatistics = new ArrayList<>();
-		}
-		return errorStatistics;
-	}
-
-	public FeatureStatistics getNumErrorBridgeObjects() {
-		return numErrorBridgeObjects;
-	}
-
-	public FeatureStatistics getNumErrorBuildings() {
-		return numErrorBuildings;
-	}
-
-	public FeatureStatistics getNumErrorLandObjects() {
-		return numErrorLandObjects;
-	}
-
-	public FeatureStatistics getNumErrorTransportation() {
-		return numErrorTransportation;
-	}
-
-	public FeatureStatistics getNumErrorVegetation() {
-		return numErrorVegetation;
-	}
-
-	public FeatureStatistics getNumErrorWaterObjects() {
-		return numErrorWaterObjects;
-	}
-
-	public void setNumErrorBridgeObjects(FeatureStatistics numErrorBridgeObjects) {
-		this.numErrorBridgeObjects = numErrorBridgeObjects;
-	}
-
-	public void setNumErrorBuildings(FeatureStatistics numErrorBuildings) {
-		this.numErrorBuildings = numErrorBuildings;
-	}
-
-	public void setNumErrorLandObjects(FeatureStatistics numErrorLandObjects) {
-		this.numErrorLandObjects = numErrorLandObjects;
-	}
-
-	public void setNumErrorTransportation(FeatureStatistics numErrorTransportation) {
-		this.numErrorTransportation = numErrorTransportation;
-	}
-
-	public void setNumErrorVegetation(FeatureStatistics numErrorVegetation) {
-		this.numErrorVegetation = numErrorVegetation;
-	}
-
-	public void setNumErrorWaterObjects(FeatureStatistics numErrorWaterObjects) {
-		this.numErrorWaterObjects = numErrorWaterObjects;
-	}
-
-}
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
deleted file mode 100644
index b790459367a25644ec613e7b651c17b6470e0186..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/TooFewPointsType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*-
- * 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;
-
-@XmlRootElement(name = "GE_R_TOO_FEW_POINTS")
-public class TooFewPointsType extends RingErrorType {
-
-	@Override
-	public String toString() {
-		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
deleted file mode 100644
index 0bac474ebe6f9766353e44ac4dfd0e2f5c590190..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/TooFewPolygonsType.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*-
- * 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;
-
-@XmlRootElement(name = "GE_S_TOO_FEW_POLYGONS")
-public class TooFewPolygonsType extends SolidErrorType {
-	
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/TopLevelFeatureType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/TopLevelFeatureType.java
deleted file mode 100644
index b0fa42feadfdd2ab14aae4173045474b6a63783e..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/TopLevelFeatureType.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*-
- * 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.XmlEnum;
-
-@XmlEnum
-public enum TopLevelFeatureType {
-
-	BUILDING, TRANSPORTATION, VEGETATION, BRIDGE, WATER, LAND
-
-}
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
deleted file mode 100644
index 24ca126a93506e3bbc36709a072197cfddc80e10..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationErrorType.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*-
- * 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.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlSeeAlso;
-import javax.xml.bind.annotation.XmlTransient;
-
-@XmlSeeAlso({ RingErrorType.class, PolygonErrorType.class, SolidErrorType.class, SemanticErrorType.class })
-@XmlAccessorType(XmlAccessType.FIELD)
-@XmlRootElement(name = "ValidationError")
-public abstract class ValidationErrorType {
-	
-	@XmlTransient
-	private String name;
-	
-	protected ValidationErrorType() {
-		name = getClass().getAnnotation(XmlRootElement.class).name();
-	}
-	
-	public String getName() {
-		return name;
-	}
-
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationPlan.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationPlan.java
deleted file mode 100644
index a947f14f127bcf6a1bac8b4ce231514dd0e7cb62..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationPlan.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*-
- * 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 java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlType;
-
-@XmlType(name = "validationPlan")
-@XmlAccessorType(XmlAccessType.FIELD)
-public class ValidationPlan implements Serializable {
-
-	private static final long serialVersionUID = 199908444294536261L;
-
-	@XmlElementWrapper(name = "globalParameters")
-	@XmlElement(name = "parameter")
-	private List<Parameter> globalParameters;
-
-	@XmlElement(name = "requirement")
-	private List<Requirement> requirements;
-
-	@XmlElementWrapper(name = "filter")
-	@XmlElement(name = "checking")
-	private List<Checking> filter;
-	
-	public List<Checking> getFilter() {
-		if (filter == null) {
-			filter = new ArrayList<>();
-		}
-		return filter;
-	}
-
-	public List<Requirement> getRequirements() {
-		if (requirements == null) {
-			requirements = new ArrayList<>();
-		}
-		return requirements;
-	}
-
-	public List<Parameter> getGlobalParameters() {
-		if (globalParameters == null) {
-			globalParameters = new ArrayList<>();
-		}
-		return globalParameters;
-	}
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationResultType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationResultType.java
deleted file mode 100644
index e1fc8aa63cb4ab7ef9b866e06594358cde133cbc..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationResultType.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*-
- * 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 java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElementRef;
-
-import net.opengis.gml.AbstractFeatureType;
-
-public class ValidationResultType extends AbstractFeatureType {
-
-	@XmlAttribute(name = "result")
-	private ResultType result;
-
-	@XmlElementRef
-	private List<ValidationErrorType> errors;
-
-	public List<ValidationErrorType> getErrors() {
-		if (errors == null) {
-			errors = new ArrayList<>(2);
-		}
-		return errors;
-	}
-
-	public void setResult(ResultType result) {
-		this.result = result;
-	}
-
-	public ResultType getResult() {
-		return result;
-	}
-
-	public boolean isSetErrors() {
-		return errors != null && !errors.isEmpty();
-	}
-
-}
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
deleted file mode 100644
index e8ef812dbbfe49ca1e2c7b4376716752ad3de550..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationType.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*-
- * 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 java.time.ZonedDateTime;
-
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-
-import de.hft.stuttgart.quality.marshaller.ZonedDateTimeAdapter;
-import net.opengis.gml.AbstractGMLType;
-
-@XmlType(name = "validation")
-public class ValidationType extends AbstractGMLType {
-
-	@XmlJavaTypeAdapter(ZonedDateTimeAdapter.class)
-	private ZonedDateTime validationDate;
-
-	private String validationSoftware;
-	
-	private ValidationPlan validationPlan;
-	
-	private Statistics statistics;
-	
-	public void setStatistics(Statistics statistics) {
-		this.statistics = statistics;
-	}
-	
-	public Statistics getStatistics() {
-		return statistics;
-	}
-	
-	public void setValidationPlan(ValidationPlan validationPlan) {
-		this.validationPlan = validationPlan;
-	}
-	
-	public ValidationPlan getValidationPlan() {
-		return validationPlan;
-	}
-
-	public ZonedDateTime getValidationDate() {
-		return validationDate;
-	}
-
-	public void setValidationDate(ZonedDateTime validationDate) {
-		this.validationDate = validationDate;
-	}
-
-	public String getValidationSoftware() {
-		return validationSoftware;
-	}
-
-	public void setValidationSoftware(String validationSoftware) {
-		this.validationSoftware = validationSoftware;
-	}
-
-}
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
deleted file mode 100644
index a5e528883a207a8f4ecee41fe1561250baf32fe2..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/package-info.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/*-
- * 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.
- */
-@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/java/de/hft/stuttgart/quality/util/UncheckedMissingADESchemaException.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/util/UncheckedMissingADESchemaException.java
deleted file mode 100644
index f710f93e453b449ff57590cadcca0f417687ff87..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/util/UncheckedMissingADESchemaException.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*-
- * 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.util;
-
-import org.citygml4j.xml.io.reader.MissingADESchemaException;
-
-public class UncheckedMissingADESchemaException extends RuntimeException {
-	
-	private static final long serialVersionUID = -5684499826072882203L;
-	
-	private MissingADESchemaException cause;
-
-	public UncheckedMissingADESchemaException(MissingADESchemaException e) {
-		super(e);
-		this.cause = e;
-	}
-	
-	@Override
-	public synchronized MissingADESchemaException getCause() {
-		return cause;
-	}
-
-}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/walker/FeatureFunctionWalker.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/walker/FeatureFunctionWalker.java
new file mode 100644
index 0000000000000000000000000000000000000000..457183f86d68624edf6f2d461fcb2310ff922e7b
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/walker/FeatureFunctionWalker.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2021 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.walker;
+
+import de.hft.stuttgart.quality.model.Validation;
+import org.citygml4j.model.citygml.ade.binding.ADEWalker;
+import org.citygml4j.model.gml.feature.AbstractFeature;
+
+public class FeatureFunctionWalker<T> implements ADEWalker<org.citygml4j.util.walker.FeatureFunctionWalker<T>> {
+    private org.citygml4j.util.walker.FeatureFunctionWalker<T> walker;
+
+    @Override
+    public void setParentWalker(org.citygml4j.util.walker.FeatureFunctionWalker<T> walker) {
+        this.walker = walker;
+    }
+
+    public T apply(Validation validation) {
+        return walker.apply((AbstractFeature) validation);
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/walker/FeatureWalker.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/walker/FeatureWalker.java
new file mode 100644
index 0000000000000000000000000000000000000000..542efd4f7302a07f07be97afc6d653b65bafd43d
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/walker/FeatureWalker.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2021 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.walker;
+
+import de.hft.stuttgart.quality.model.Validation;
+import org.citygml4j.model.citygml.ade.binding.ADEWalker;
+import org.citygml4j.model.gml.feature.AbstractFeature;
+
+public class FeatureWalker implements ADEWalker<org.citygml4j.util.walker.FeatureWalker> {
+    private org.citygml4j.util.walker.FeatureWalker walker;
+
+    @Override
+    public void setParentWalker(org.citygml4j.util.walker.FeatureWalker walker) {
+        this.walker = walker;
+    }
+
+    public void visit(Validation validation) {
+        walker.visit((AbstractFeature) validation);
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/walker/GMLFunctionWalker.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/walker/GMLFunctionWalker.java
new file mode 100644
index 0000000000000000000000000000000000000000..86624dab6528065b56801f7683b893905dc53149
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/walker/GMLFunctionWalker.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2021 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.walker;
+
+import de.hft.stuttgart.quality.model.Validation;
+import org.citygml4j.model.citygml.ade.binding.ADEWalker;
+import org.citygml4j.model.gml.feature.AbstractFeature;
+
+public class GMLFunctionWalker<T> implements ADEWalker<org.citygml4j.util.walker.GMLFunctionWalker<T>> {
+    private org.citygml4j.util.walker.GMLFunctionWalker<T> walker;
+
+    @Override
+    public void setParentWalker(org.citygml4j.util.walker.GMLFunctionWalker<T> walker) {
+        this.walker = walker;
+    }
+
+    public T apply(Validation validation) {
+        return walker.apply((AbstractFeature) validation);
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/walker/GMLWalker.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/walker/GMLWalker.java
new file mode 100644
index 0000000000000000000000000000000000000000..8f2d9a6ac945450e9910829caccb0b95c4470cdd
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/walker/GMLWalker.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2021 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.walker;
+
+import de.hft.stuttgart.quality.model.Validation;
+import org.citygml4j.model.citygml.ade.binding.ADEWalker;
+import org.citygml4j.model.gml.feature.AbstractFeature;
+
+public class GMLWalker implements ADEWalker<org.citygml4j.util.walker.GMLWalker> {
+    private org.citygml4j.util.walker.GMLWalker walker;
+
+    @Override
+    public void setParentWalker(org.citygml4j.util.walker.GMLWalker walker) {
+        this.walker = walker;
+    }
+
+    public void visit(Validation validation) {
+        walker.visit((AbstractFeature) validation);
+    }
+}
diff --git a/citygml4j-quality-ade/src/main/resources/de/hft/stuttgart/quality/schema/qualityAde.xsd b/citygml4j-quality-ade/src/main/resources/de/hft/stuttgart/quality/schema/qualityAde.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..f37b53d75723f83641c86bef69e810006dc73a7d
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/resources/de/hft/stuttgart/quality/schema/qualityAde.xsd
@@ -0,0 +1,671 @@
+<?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4" elementFormDefault="qualified" targetNamespace="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.4" version="0.1.4">
+  <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/gml" schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/gml.xsd"/>
+  <!--XML Schema document created by ShapeChange - http://shapechange.net/-->
+  <element abstract="true" name="AbstractError" substitutionGroup="gml:_Object" type="qual:AbstractErrorType"/>
+  <complexType abstract="true" name="AbstractErrorType">
+    <sequence/>
+  </complexType>
+  <complexType name="AbstractErrorPropertyType">
+    <sequence>
+      <element ref="qual:AbstractError"/>
+    </sequence>
+  </complexType>
+  <element abstract="true" name="AbstractGeometryError" substitutionGroup="qual:AbstractError" type="qual:AbstractGeometryErrorType"/>
+  <complexType abstract="true" name="AbstractGeometryErrorType">
+    <complexContent>
+      <extension base="qual:AbstractErrorType">
+        <sequence/>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="AbstractGeometryErrorPropertyType">
+    <sequence>
+      <element ref="qual:AbstractGeometryError"/>
+    </sequence>
+  </complexType>
+  <element abstract="true" name="AbstractPolygonError" substitutionGroup="qual:AbstractGeometryError" type="qual:AbstractPolygonErrorType"/>
+  <complexType abstract="true" name="AbstractPolygonErrorType">
+    <complexContent>
+      <extension base="qual:AbstractGeometryErrorType">
+        <sequence>
+          <element name="polygonId" type="string"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="AbstractPolygonErrorPropertyType">
+    <sequence>
+      <element ref="qual:AbstractPolygonError"/>
+    </sequence>
+  </complexType>
+  <element abstract="true" name="AbstractRingError" substitutionGroup="qual:AbstractGeometryError" type="qual:AbstractRingErrorType"/>
+  <complexType abstract="true" name="AbstractRingErrorType">
+    <complexContent>
+      <extension base="qual:AbstractGeometryErrorType">
+        <sequence>
+          <element name="linearRingId" type="string"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="AbstractRingErrorPropertyType">
+    <sequence>
+      <element ref="qual:AbstractRingError"/>
+    </sequence>
+  </complexType>
+  <element abstract="true" name="AbstractSemanticError" substitutionGroup="qual:AbstractError" type="qual:AbstractSemanticErrorType"/>
+  <complexType abstract="true" name="AbstractSemanticErrorType">
+    <complexContent>
+      <extension base="qual:AbstractErrorType">
+        <sequence/>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="AbstractSemanticErrorPropertyType">
+    <sequence>
+      <element ref="qual:AbstractSemanticError"/>
+    </sequence>
+  </complexType>
+  <element abstract="true" name="AbstractSolidError" substitutionGroup="qual:AbstractGeometryError" type="qual:AbstractSolidErrorType"/>
+  <complexType abstract="true" name="AbstractSolidErrorType">
+    <complexContent>
+      <extension base="qual:AbstractGeometryErrorType">
+        <sequence>
+          <element name="geometryId" type="string"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="AbstractSolidErrorPropertyType">
+    <sequence>
+      <element ref="qual:AbstractSolidError"/>
+    </sequence>
+  </complexType>
+  <element name="Checking" substitutionGroup="gml:_Object" type="qual:CheckingType"/>
+  <complexType name="CheckingType">
+    <sequence>
+      <element name="featureType" type="qual:FeatureTypeType"/>
+    </sequence>
+  </complexType>
+  <complexType name="CheckingPropertyType">
+    <sequence>
+      <element ref="qual:Checking"/>
+    </sequence>
+  </complexType>
+  <element name="ComponentList" substitutionGroup="gml:_Object" type="qual:ComponentListType"/>
+  <complexType name="ComponentListType">
+    <sequence>
+      <element maxOccurs="unbounded" name="component" type="qual:PolygonIdListPropertyType"/>
+    </sequence>
+  </complexType>
+  <complexType name="ComponentListPropertyType">
+    <sequence>
+      <element ref="qual:ComponentList"/>
+    </sequence>
+  </complexType>
+  <element name="Edge" substitutionGroup="gml:_Object" type="qual:EdgeType"/>
+  <complexType name="EdgeType">
+    <sequence>
+      <element name="from" type="gml:DirectPositionType"/>
+      <element name="to" type="gml:DirectPositionType"/>
+    </sequence>
+  </complexType>
+  <complexType name="EdgePropertyType">
+    <sequence>
+      <element ref="qual:Edge"/>
+    </sequence>
+  </complexType>
+  <element name="EdgeList" substitutionGroup="gml:_Object" type="qual:EdgeListType"/>
+  <complexType name="EdgeListType">
+    <sequence>
+      <element maxOccurs="unbounded" name="edge" type="qual:EdgePropertyType"/>
+    </sequence>
+  </complexType>
+  <complexType name="EdgeListPropertyType">
+    <sequence>
+      <element ref="qual:EdgeList"/>
+    </sequence>
+  </complexType>
+  <element name="Error" substitutionGroup="gml:_Object" type="qual:ErrorType"/>
+  <complexType name="ErrorType">
+    <sequence>
+      <element name="name" type="qual:ErrorTypeType"/>
+    </sequence>
+  </complexType>
+  <complexType name="ErrorPropertyType">
+    <sequence>
+      <element ref="qual:Error"/>
+    </sequence>
+  </complexType>
+  <element name="ErrorStatistics" substitutionGroup="gml:_Object" type="qual:ErrorStatisticsType"/>
+  <complexType name="ErrorStatisticsType">
+    <sequence>
+      <element name="occurrences" type="integer"/>
+      <element maxOccurs="unbounded" minOccurs="0" name="error" type="qual:ErrorPropertyType"/>
+    </sequence>
+  </complexType>
+  <complexType name="ErrorStatisticsPropertyType">
+    <sequence>
+      <element ref="qual:ErrorStatistics"/>
+    </sequence>
+  </complexType>
+  <simpleType name="ErrorTypeType">
+    <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_P_NON_PLANAR_POLYGON_DISTANCE_PLANE"/>
+      <enumeration value="GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION"/>
+      <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>
+  <element name="FeatureStatistics" substitutionGroup="gml:_Object" type="qual:FeatureStatisticsType"/>
+  <complexType name="FeatureStatisticsType">
+    <sequence>
+      <element name="numChecked" type="integer"/>
+      <element name="numErrors" type="integer"/>
+    </sequence>
+  </complexType>
+  <complexType name="FeatureStatisticsPropertyType">
+    <sequence>
+      <element ref="qual:FeatureStatistics"/>
+    </sequence>
+  </complexType>
+  <simpleType name="FeatureTypeType">
+    <restriction base="string">
+      <enumeration value="BUILDING"/>
+      <enumeration value="TRANSPORTATION"/>
+      <enumeration value="VEGETATION"/>
+      <enumeration value="BRIDGE"/>
+      <enumeration value="WATER"/>
+      <enumeration value="LAND"/>
+    </restriction>
+  </simpleType>
+  <element name="Filter" substitutionGroup="gml:_Object" type="qual:FilterType"/>
+  <complexType name="FilterType">
+    <sequence>
+      <element maxOccurs="unbounded" minOccurs="0" name="checking" type="qual:CheckingPropertyType"/>
+    </sequence>
+  </complexType>
+  <complexType name="FilterPropertyType">
+    <sequence>
+      <element ref="qual:Filter"/>
+    </sequence>
+  </complexType>
+  <element name="GE_P_HOLE_OUTSIDE" substitutionGroup="qual:AbstractPolygonError" type="qual:GE_P_HOLE_OUTSIDEType"/>
+  <complexType name="GE_P_HOLE_OUTSIDEType">
+    <complexContent>
+      <extension base="qual:AbstractPolygonErrorType">
+        <sequence>
+          <element name="linearRingId" type="string"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_P_HOLE_OUTSIDEPropertyType">
+    <sequence>
+      <element ref="qual:GE_P_HOLE_OUTSIDE"/>
+    </sequence>
+  </complexType>
+  <element name="GE_P_INNER_RINGS_NESTED" substitutionGroup="qual:AbstractPolygonError" type="qual:GE_P_INNER_RINGS_NESTEDType"/>
+  <complexType name="GE_P_INNER_RINGS_NESTEDType">
+    <complexContent>
+      <extension base="qual:AbstractPolygonErrorType">
+        <sequence>
+          <element name="linearRingId1" type="string"/>
+          <element name="linearRingId2" type="string"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_P_INNER_RINGS_NESTEDPropertyType">
+    <sequence>
+      <element ref="qual:GE_P_INNER_RINGS_NESTED"/>
+    </sequence>
+  </complexType>
+  <element name="GE_P_INTERIOR_DISCONNECTED" substitutionGroup="qual:AbstractPolygonError" type="qual:GE_P_INTERIOR_DISCONNECTEDType"/>
+  <complexType name="GE_P_INTERIOR_DISCONNECTEDType">
+    <complexContent>
+      <extension base="qual:AbstractPolygonErrorType">
+        <sequence/>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_P_INTERIOR_DISCONNECTEDPropertyType">
+    <sequence>
+      <element ref="qual:GE_P_INTERIOR_DISCONNECTED"/>
+    </sequence>
+  </complexType>
+  <element name="GE_P_INTERSECTING_RINGS" substitutionGroup="qual:AbstractPolygonError" type="qual:GE_P_INTERSECTING_RINGSType"/>
+  <complexType name="GE_P_INTERSECTING_RINGSType">
+    <complexContent>
+      <extension base="qual:AbstractPolygonErrorType">
+        <sequence>
+          <element name="linearRingId1" type="string"/>
+          <element name="linearRingId2" type="string"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_P_INTERSECTING_RINGSPropertyType">
+    <sequence>
+      <element ref="qual:GE_P_INTERSECTING_RINGS"/>
+    </sequence>
+  </complexType>
+  <element name="GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE" substitutionGroup="qual:AbstractPolygonError" type="qual:GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANEType"/>
+  <complexType name="GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANEType">
+    <complexContent>
+      <extension base="qual:AbstractPolygonErrorType">
+        <sequence>
+          <element name="distance" type="gml:LengthType"/>
+          <element name="vertex" type="gml:DirectPositionType"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANEPropertyType">
+    <sequence>
+      <element ref="qual:GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE"/>
+    </sequence>
+  </complexType>
+  <element name="GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION" substitutionGroup="qual:AbstractPolygonError" type="qual:GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATIONType"/>
+  <complexType name="GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATIONType">
+    <complexContent>
+      <extension base="qual:AbstractPolygonErrorType">
+        <sequence>
+          <element name="deviation" type="gml:AngleType"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATIONPropertyType">
+    <sequence>
+      <element ref="qual:GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION"/>
+    </sequence>
+  </complexType>
+  <element name="GE_P_ORIENTATION_RINGS_SAME" substitutionGroup="qual:AbstractPolygonError" type="qual:GE_P_ORIENTATION_RINGS_SAMEType"/>
+  <complexType name="GE_P_ORIENTATION_RINGS_SAMEType">
+    <complexContent>
+      <extension base="qual:AbstractPolygonErrorType">
+        <sequence>
+          <element name="linearRingId" type="string"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_P_ORIENTATION_RINGS_SAMEPropertyType">
+    <sequence>
+      <element ref="qual:GE_P_ORIENTATION_RINGS_SAME"/>
+    </sequence>
+  </complexType>
+  <element name="GE_R_CONSECUTIVE_POINTS_SAME" substitutionGroup="qual:AbstractRingError" type="qual:GE_R_CONSECUTIVE_POINTS_SAMEType"/>
+  <complexType name="GE_R_CONSECUTIVE_POINTS_SAMEType">
+    <complexContent>
+      <extension base="qual:AbstractRingErrorType">
+        <sequence>
+          <element name="vertex1" type="gml:DirectPositionType"/>
+          <element name="vertex2" type="gml:DirectPositionType"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_R_CONSECUTIVE_POINTS_SAMEPropertyType">
+    <sequence>
+      <element ref="qual:GE_R_CONSECUTIVE_POINTS_SAME"/>
+    </sequence>
+  </complexType>
+  <element name="GE_R_NOT_CLOSED" substitutionGroup="qual:AbstractRingError" type="qual:GE_R_NOT_CLOSEDType"/>
+  <complexType name="GE_R_NOT_CLOSEDType">
+    <complexContent>
+      <extension base="qual:AbstractRingErrorType">
+        <sequence/>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_R_NOT_CLOSEDPropertyType">
+    <sequence>
+      <element ref="qual:GE_R_NOT_CLOSED"/>
+    </sequence>
+  </complexType>
+  <element name="GE_R_SELF_INTERSECTION" substitutionGroup="qual:AbstractRingError" type="qual:GE_R_SELF_INTERSECTIONType"/>
+  <complexType name="GE_R_SELF_INTERSECTIONType">
+    <complexContent>
+      <extension base="qual:AbstractRingErrorType">
+        <sequence>
+          <element name="type" type="string"/>
+          <element name="edge1" type="qual:EdgePropertyType"/>
+          <element name="edge2" type="qual:EdgePropertyType"/>
+          <element name="vertex" type="gml:DirectPositionType"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_R_SELF_INTERSECTIONPropertyType">
+    <sequence>
+      <element ref="qual:GE_R_SELF_INTERSECTION"/>
+    </sequence>
+  </complexType>
+  <element name="GE_R_TOO_FEW_POINTS" substitutionGroup="qual:AbstractRingError" type="qual:GE_R_TOO_FEW_POINTSType"/>
+  <complexType name="GE_R_TOO_FEW_POINTSType">
+    <complexContent>
+      <extension base="qual:AbstractRingErrorType">
+        <sequence/>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_R_TOO_FEW_POINTSPropertyType">
+    <sequence>
+      <element ref="qual:GE_R_TOO_FEW_POINTS"/>
+    </sequence>
+  </complexType>
+  <element name="GE_S_ALL_POLYGONS_WRONG_ORIENTATION" substitutionGroup="qual:AbstractSolidError" type="qual:GE_S_ALL_POLYGONS_WRONG_ORIENTATIONType"/>
+  <complexType name="GE_S_ALL_POLYGONS_WRONG_ORIENTATIONType">
+    <complexContent>
+      <extension base="qual:AbstractSolidErrorType">
+        <sequence/>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_S_ALL_POLYGONS_WRONG_ORIENTATIONPropertyType">
+    <sequence>
+      <element ref="qual:GE_S_ALL_POLYGONS_WRONG_ORIENTATION"/>
+    </sequence>
+  </complexType>
+  <element name="GE_S_MULTIPLE_CONNECTED_COMPONENTS" substitutionGroup="qual:AbstractSolidError" type="qual:GE_S_MULTIPLE_CONNECTED_COMPONENTSType"/>
+  <complexType name="GE_S_MULTIPLE_CONNECTED_COMPONENTSType">
+    <complexContent>
+      <extension base="qual:AbstractSolidErrorType">
+        <sequence>
+          <element maxOccurs="unbounded" name="components" type="qual:ComponentListPropertyType"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_S_MULTIPLE_CONNECTED_COMPONENTSPropertyType">
+    <sequence>
+      <element ref="qual:GE_S_MULTIPLE_CONNECTED_COMPONENTS"/>
+    </sequence>
+  </complexType>
+  <element name="GE_S_NON_MANIFOLD_EDGE" substitutionGroup="qual:AbstractSolidError" type="qual:GE_S_NON_MANIFOLD_EDGEType"/>
+  <complexType name="GE_S_NON_MANIFOLD_EDGEType">
+    <complexContent>
+      <extension base="qual:AbstractSolidErrorType">
+        <sequence>
+          <element name="edges" type="qual:EdgeListPropertyType"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_S_NON_MANIFOLD_EDGEPropertyType">
+    <sequence>
+      <element ref="qual:GE_S_NON_MANIFOLD_EDGE"/>
+    </sequence>
+  </complexType>
+  <element name="GE_S_NON_MANIFOLD_VERTEX" substitutionGroup="qual:AbstractSolidError" type="qual:GE_S_NON_MANIFOLD_VERTEXType"/>
+  <complexType name="GE_S_NON_MANIFOLD_VERTEXType">
+    <complexContent>
+      <extension base="qual:AbstractSolidErrorType">
+        <sequence>
+          <element name="vertex" type="gml:DirectPositionType"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_S_NON_MANIFOLD_VERTEXPropertyType">
+    <sequence>
+      <element ref="qual:GE_S_NON_MANIFOLD_VERTEX"/>
+    </sequence>
+  </complexType>
+  <element name="GE_S_NOT_CLOSED" substitutionGroup="qual:AbstractSolidError" type="qual:GE_S_NOT_CLOSEDType"/>
+  <complexType name="GE_S_NOT_CLOSEDType">
+    <complexContent>
+      <extension base="qual:AbstractSolidErrorType">
+        <sequence>
+          <element name="edges" type="qual:EdgeListPropertyType"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_S_NOT_CLOSEDPropertyType">
+    <sequence>
+      <element ref="qual:GE_S_NOT_CLOSED"/>
+    </sequence>
+  </complexType>
+  <element name="GE_S_POLYGON_WRONG_ORIENTATION" substitutionGroup="qual:AbstractSolidError" type="qual:GE_S_POLYGON_WRONG_ORIENTATIONType"/>
+  <complexType name="GE_S_POLYGON_WRONG_ORIENTATIONType">
+    <complexContent>
+      <extension base="qual:AbstractSolidErrorType">
+        <sequence>
+          <element name="edges" type="qual:EdgeListPropertyType"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_S_POLYGON_WRONG_ORIENTATIONPropertyType">
+    <sequence>
+      <element ref="qual:GE_S_POLYGON_WRONG_ORIENTATION"/>
+    </sequence>
+  </complexType>
+  <element name="GE_S_SELF_INTERSECTION" substitutionGroup="qual:AbstractSolidError" type="qual:GE_S_SELF_INTERSECTIONType"/>
+  <complexType name="GE_S_SELF_INTERSECTIONType">
+    <complexContent>
+      <extension base="qual:AbstractSolidErrorType">
+        <sequence>
+          <element name="polygonId1" type="string"/>
+          <element name="polygonId2" type="string"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_S_SELF_INTERSECTIONPropertyType">
+    <sequence>
+      <element ref="qual:GE_S_SELF_INTERSECTION"/>
+    </sequence>
+  </complexType>
+  <element name="GE_S_TOO_FEW_POLYGONS" substitutionGroup="qual:AbstractSolidError" type="qual:GE_S_TOO_FEW_POLYGONSType"/>
+  <complexType name="GE_S_TOO_FEW_POLYGONSType">
+    <complexContent>
+      <extension base="qual:AbstractSolidErrorType">
+        <sequence/>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="GE_S_TOO_FEW_POLYGONSPropertyType">
+    <sequence>
+      <element ref="qual:GE_S_TOO_FEW_POLYGONS"/>
+    </sequence>
+  </complexType>
+  <element name="GlobalParameters" substitutionGroup="gml:_Object" type="qual:GlobalParametersType"/>
+  <complexType name="GlobalParametersType">
+    <sequence>
+      <element maxOccurs="unbounded" minOccurs="0" name="parameter" type="qual:ParameterPropertyType"/>
+    </sequence>
+  </complexType>
+  <complexType name="GlobalParametersPropertyType">
+    <sequence>
+      <element ref="qual:GlobalParameters"/>
+    </sequence>
+  </complexType>
+  <element name="Parameter" substitutionGroup="gml:_Object" type="qual:ParameterType"/>
+  <complexType name="ParameterType">
+    <sequence>
+      <element name="name" type="string"/>
+      <element name="uom" type="string"/>
+      <element name="value" type="string"/>
+    </sequence>
+  </complexType>
+  <complexType name="ParameterPropertyType">
+    <sequence>
+      <element ref="qual:Parameter"/>
+    </sequence>
+  </complexType>
+  <element name="PolygonIdList" substitutionGroup="gml:_Object" type="qual:PolygonIdListType"/>
+  <complexType name="PolygonIdListType">
+    <sequence>
+      <element name="polygonId" type="string"/>
+    </sequence>
+  </complexType>
+  <complexType name="PolygonIdListPropertyType">
+    <sequence>
+      <element ref="qual:PolygonIdList"/>
+    </sequence>
+  </complexType>
+  <element name="Requirement" substitutionGroup="gml:_Object" type="qual:RequirementType"/>
+  <complexType name="RequirementType">
+    <sequence>
+      <element name="enabled" type="boolean"/>
+      <element name="requirementType" type="qual:RequirementTypeType"/>
+      <element maxOccurs="unbounded" minOccurs="0" name="parameter" type="qual:ParameterPropertyType"/>
+    </sequence>
+  </complexType>
+  <complexType name="RequirementPropertyType">
+    <sequence>
+      <element ref="qual:Requirement"/>
+    </sequence>
+  </complexType>
+  <simpleType name="RequirementTypeType">
+    <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>
+  <simpleType name="ResultTypeType">
+    <restriction base="string">
+      <enumeration value="OK"/>
+      <enumeration value="ERROR"/>
+      <enumeration value="NOT_CHECKED"/>
+    </restriction>
+  </simpleType>
+  <element name="SEM_ATTRIBUTE_MISSING" substitutionGroup="qual:AbstractSemanticError" type="qual:SEM_ATTRIBUTE_MISSINGType"/>
+  <complexType name="SEM_ATTRIBUTE_MISSINGType">
+    <complexContent>
+      <extension base="qual:AbstractSemanticErrorType">
+        <sequence>
+          <element name="childId" type="string"/>
+          <element name="attributeName" type="string"/>
+          <element name="generic" type="boolean"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="SEM_ATTRIBUTE_MISSINGPropertyType">
+    <sequence>
+      <element ref="qual:SEM_ATTRIBUTE_MISSING"/>
+    </sequence>
+  </complexType>
+  <element name="SEM_ATTRIBUTE_WRONG_VALUE" substitutionGroup="qual:AbstractSemanticError" type="qual:SEM_ATTRIBUTE_WRONG_VALUEType"/>
+  <complexType name="SEM_ATTRIBUTE_WRONG_VALUEType">
+    <complexContent>
+      <extension base="qual:AbstractSemanticErrorType">
+        <sequence>
+          <element name="childId" type="string"/>
+          <element name="attributeName" type="string"/>
+          <element name="generic" type="boolean"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="SEM_ATTRIBUTE_WRONG_VALUEPropertyType">
+    <sequence>
+      <element ref="qual:SEM_ATTRIBUTE_WRONG_VALUE"/>
+    </sequence>
+  </complexType>
+  <element name="Statistics" substitutionGroup="gml:_Object" type="qual:StatisticsType"/>
+  <complexType name="StatisticsType">
+    <sequence>
+      <element name="numErrorBuildings" type="qual:FeatureStatisticsPropertyType"/>
+      <element name="numErrorVegetation" type="qual:FeatureStatisticsPropertyType"/>
+      <element name="numErrorLandObjects" type="qual:FeatureStatisticsPropertyType"/>
+      <element name="numErrorBridgeObjects" type="qual:FeatureStatisticsPropertyType"/>
+      <element name="numErrorWaterObjects" type="qual:FeatureStatisticsPropertyType"/>
+      <element name="numErrorTransportation" type="qual:FeatureStatisticsPropertyType"/>
+      <element name="errorStatistics" type="qual:ErrorStatisticsPropertyType"/>
+    </sequence>
+  </complexType>
+  <complexType name="StatisticsPropertyType">
+    <sequence>
+      <element ref="qual:Statistics"/>
+    </sequence>
+  </complexType>
+  <element name="Validation" substitutionGroup="gml:_Feature" type="qual:ValidationType"/>
+  <complexType name="ValidationType">
+    <complexContent>
+      <extension base="gml:AbstractFeatureType">
+        <sequence>
+          <element name="validationDate" type="dateTime"/>
+          <element name="validationSoftware" type="string"/>
+          <element minOccurs="0" name="statistics" type="qual:StatisticsPropertyType"/>
+          <element name="validationPlan" type="qual:ValidationPlanPropertyType"/>
+        </sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+  <complexType name="ValidationPropertyType">
+    <sequence minOccurs="0">
+      <element ref="qual:Validation"/>
+    </sequence>
+    <attributeGroup ref="gml:AssociationAttributeGroup"/>
+  </complexType>
+  <element name="ValidationPlan" substitutionGroup="gml:_Object" type="qual:ValidationPlanType"/>
+  <complexType name="ValidationPlanType">
+    <sequence>
+      <element name="globalParameters" type="qual:GlobalParametersPropertyType"/>
+      <element name="filter" type="qual:FilterPropertyType"/>
+      <element name="requirement" type="qual:RequirementPropertyType"/>
+    </sequence>
+  </complexType>
+  <complexType name="ValidationPlanPropertyType">
+    <sequence>
+      <element ref="qual:ValidationPlan"/>
+    </sequence>
+  </complexType>
+  <element name="ValidationResult" substitutionGroup="gml:_Object" type="qual:ValidationResultType"/>
+  <complexType name="ValidationResultType">
+    <sequence>
+      <element name="validationPlanID" type="qual:ValidationPropertyType"/>
+      <element maxOccurs="unbounded" minOccurs="0" name="error" type="qual:AbstractErrorPropertyType"/>
+      <element name="resultType" type="qual:ResultTypeType"/>
+    </sequence>
+  </complexType>
+  <complexType name="ValidationResultPropertyType">
+    <sequence>
+      <element ref="qual:ValidationResult"/>
+    </sequence>
+  </complexType>
+  <element name="validationResult" substitutionGroup="core:_GenericApplicationPropertyOfCityObject" type="qual:ValidationResultPropertyType"/>
+</schema>
diff --git a/citygml4j-quality-ade/src/main/resources/qualityAde.xsd b/citygml4j-quality-ade/src/main/resources/qualityAde.xsd
deleted file mode 100644
index 2ed1ec60d92f08b45d86f0470e23b600441acd86..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/main/resources/qualityAde.xsd
+++ /dev/null
@@ -1,584 +0,0 @@
-<?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_P_HOLE_OUTSIDE"
-				type="qual:GE_P_HOLE_OUTSIDE" 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_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_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_R_CONSECUTIVE_POINTS_SAME"
-				type="qual:GE_R_CONSECUTIVE_POINTS_SAME" minOccurs="0"
-				maxOccurs="unbounded" />
-			<element name="GE_R_NOT_CLOSED" type="qual:GE_R_NOT_CLOSED"
-				minOccurs="0" maxOccurs="unbounded" />
-			<element name="GE_R_SELF_INTERSECTION"
-				type="qual:GE_R_SELF_INTERSECTION" minOccurs="0"
-				maxOccurs="unbounded" />
-			<element name="GE_R_TOO_FEW_POINTS"
-				type="qual:GE_R_TOO_FEW_POINTS" 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_MULTIPLE_CONNECTED_COMPONENTS"
-				type="qual:GE_S_MULTIPLE_CONNECTED_COMPONENTS" 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_NON_MANIFOLD_VERTEX"
-				type="qual:GE_S_NON_MANIFOLD_VERTEX" minOccurs="0"
-				maxOccurs="unbounded" />
-			<element name="GE_S_NOT_CLOSED" type="qual:GE_S_NOT_CLOSED"
-				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_TOO_FEW_POLYGONS"
-				type="qual:GE_S_TOO_FEW_POLYGONS" minOccurs="0"
-				maxOccurs="unbounded" />
-
-			<element name="SE_ATTRIBUTE_MISSING"
-				type="qual:SE_ATTRIBUTE_MISSING" minOccurs="0" maxOccurs="unbounded" />
-			<element name="SE_ATTRIBUTE_WRONG_VALUE"
-				type="qual:SE_ATTRIBUTE_WRONG_VALUE" 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_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION" />
-			<enumeration
-				value="GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE" />
-			<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
diff --git a/citygml4j-quality-ade/src/test/java/de/hft/stuttgart/quality/QualityAdeTests.java b/citygml4j-quality-ade/src/test/java/de/hft/stuttgart/quality/QualityAdeTests.java
deleted file mode 100644
index 1eff2866148f92db5f4fedf0d1da531dbb082b96..0000000000000000000000000000000000000000
--- a/citygml4j-quality-ade/src/test/java/de/hft/stuttgart/quality/QualityAdeTests.java
+++ /dev/null
@@ -1,1409 +0,0 @@
-/*-
- * 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;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.time.ZonedDateTime;
-import java.util.List;
-import java.util.ServiceLoader;
-
-import org.citygml4j.CityGMLContext;
-import org.citygml4j.builder.jaxb.CityGMLBuilder;
-import org.citygml4j.builder.jaxb.CityGMLBuilderException;
-import org.citygml4j.model.citygml.ade.ADEComponent;
-import org.citygml4j.model.citygml.ade.ADEException;
-import org.citygml4j.model.citygml.ade.binding.ADEContext;
-import org.citygml4j.model.citygml.building.Building;
-import org.citygml4j.model.citygml.core.AbstractCityObject;
-import org.citygml4j.model.citygml.core.CityModel;
-import org.citygml4j.model.citygml.core.CityObjectMember;
-import org.citygml4j.model.gml.geometry.primitives.DirectPosition;
-import org.citygml4j.model.gml.measures.Angle;
-import org.citygml4j.model.gml.measures.Length;
-import org.citygml4j.model.module.citygml.CityGMLVersion;
-import org.citygml4j.xml.io.CityGMLInputFactory;
-import org.citygml4j.xml.io.CityGMLOutputFactory;
-import org.citygml4j.xml.io.reader.CityGMLReadException;
-import org.citygml4j.xml.io.reader.CityGMLReader;
-import org.citygml4j.xml.io.reader.FeatureReadMode;
-import org.citygml4j.xml.io.writer.CityGMLWriteException;
-import org.citygml4j.xml.io.writer.CityGMLWriter;
-import org.junit.jupiter.api.Test;
-
-import de.hft.stuttgart.quality.model.AllPolygonsWrongOrientation;
-import de.hft.stuttgart.quality.model.AttributeMissing;
-import de.hft.stuttgart.quality.model.AttributeWrongValue;
-import de.hft.stuttgart.quality.model.ConsecutivePointsSame;
-import de.hft.stuttgart.quality.model.Edge;
-import de.hft.stuttgart.quality.model.HoleOutside;
-import de.hft.stuttgart.quality.model.InnerRingsNested;
-import de.hft.stuttgart.quality.model.InteriorDisconnected;
-import de.hft.stuttgart.quality.model.IntersectingRings;
-import de.hft.stuttgart.quality.model.MultipleConnectedComponents;
-import de.hft.stuttgart.quality.model.NonManifoldEdge;
-import de.hft.stuttgart.quality.model.NonManifoldVertex;
-import de.hft.stuttgart.quality.model.NonPlanarDistancePlane;
-import de.hft.stuttgart.quality.model.NonPlanarNormalsDeviation;
-import de.hft.stuttgart.quality.model.OrientationRingsSame;
-import de.hft.stuttgart.quality.model.PolygonWrongOrientation;
-import de.hft.stuttgart.quality.model.RingNotClosed;
-import de.hft.stuttgart.quality.model.RingSelfIntersection;
-import de.hft.stuttgart.quality.model.SolidNotClosed;
-import de.hft.stuttgart.quality.model.TooFewPoints;
-import de.hft.stuttgart.quality.model.TooFewPolygons;
-import de.hft.stuttgart.quality.model.Validation;
-import de.hft.stuttgart.quality.model.ValidationError;
-import de.hft.stuttgart.quality.model.ValidationResult;
-import de.hft.stuttgart.quality.model.jaxb.Checking;
-import de.hft.stuttgart.quality.model.jaxb.Component;
-import de.hft.stuttgart.quality.model.jaxb.ErrorId;
-import de.hft.stuttgart.quality.model.jaxb.ErrorStatistics;
-import de.hft.stuttgart.quality.model.jaxb.FeatureStatistics;
-import de.hft.stuttgart.quality.model.jaxb.Parameter;
-import de.hft.stuttgart.quality.model.jaxb.Requirement;
-import de.hft.stuttgart.quality.model.jaxb.RequirementId;
-import de.hft.stuttgart.quality.model.jaxb.ResultType;
-import de.hft.stuttgart.quality.model.jaxb.RingSelfIntType;
-import de.hft.stuttgart.quality.model.jaxb.Statistics;
-import de.hft.stuttgart.quality.model.jaxb.TopLevelFeatureType;
-import de.hft.stuttgart.quality.model.jaxb.ValidationPlan;
-
-class QualityAdeTests {
-
-	@Test
-	void testReadingConsecutiveSameError()
-			throws ADEException, CityGMLBuilderException, CityGMLReadException, FileNotFoundException {
-		CityModel cityModel = readCityGml("src/test/resources/SimpleSolid_Error_QualityADE.gml");
-		testValidationPlan(cityModel);
-
-		List<CityObjectMember> cityObjectMember = cityModel.getCityObjectMember();
-		assertEquals(1, cityObjectMember.size());
-		CityObjectMember com = cityObjectMember.get(0);
-		AbstractCityObject aco = com.getCityObject();
-		assertNotNull(aco);
-		assertTrue(aco instanceof Building);
-		Building b = (Building) aco;
-
-		List<ADEComponent> gen = b.getGenericApplicationPropertyOfCityObject();
-		ADEComponent resultComp = gen.get(0);
-		assertTrue(resultComp instanceof ValidationResult);
-		ValidationResult result = (ValidationResult) resultComp;
-		assertEquals(ResultType.ERROR, result.getResult());
-		assertFalse(result.getErrors().isEmpty());
-		List<ValidationError> errors = result.getErrors();
-		assertEquals(1, errors.size());
-		ValidationError validationError = errors.get(0);
-		assertTrue(validationError instanceof ConsecutivePointsSame);
-		ConsecutivePointsSame err = (ConsecutivePointsSame) validationError;
-		assertEquals("_Simple_BD.1_PG.6_LR.1", err.getLinearRingId());
-		Double x1 = err.getVertex1().getValue().get(0);
-		assertEquals(11.5, x1, 0.0000001);
-		Double x2 = err.getVertex2().getValue().get(0);
-		assertEquals(11.5, x2, 0.0000001);
-	}
-
-	@Test
-	void testReadingTooFewPointsError()
-			throws ADEException, CityGMLBuilderException, CityGMLReadException, FileNotFoundException {
-		CityModel cityModel = readCityGml("src/test/resources/SimpleSolid_TooFewPoints.gml");
-
-		List<CityObjectMember> cityObjectMember = cityModel.getCityObjectMember();
-		CityObjectMember com = cityObjectMember.get(0);
-		AbstractCityObject aco = com.getCityObject();
-		Building b = (Building) aco;
-
-		List<ADEComponent> gen = b.getGenericApplicationPropertyOfCityObject();
-		ADEComponent resultComp = gen.get(0);
-		ValidationResult result = (ValidationResult) resultComp;
-		assertEquals(ResultType.ERROR, result.getResult());
-		assertFalse(result.getErrors().isEmpty());
-		List<ValidationError> errors = result.getErrors();
-		ValidationError validationError = errors.get(0);
-		assertTrue(validationError instanceof TooFewPoints);
-		TooFewPoints err = (TooFewPoints) validationError;
-		assertEquals("_Simple_BD.1_PG.6_LR.1", err.getLinearRingId());
-	}
-
-	@Test
-	void testReadingRingSelfIntersectionError()
-			throws ADEException, CityGMLBuilderException, CityGMLReadException, FileNotFoundException {
-		CityModel cityModel = readCityGml("src/test/resources/SimpleSolid_RingSelfIntersection.gml");
-
-		List<CityObjectMember> cityObjectMember = cityModel.getCityObjectMember();
-		CityObjectMember com = cityObjectMember.get(0);
-		AbstractCityObject aco = com.getCityObject();
-		Building b = (Building) aco;
-
-		List<ADEComponent> gen = b.getGenericApplicationPropertyOfCityObject();
-		ADEComponent resultComp = gen.get(0);
-		ValidationResult result = (ValidationResult) resultComp;
-		assertEquals(ResultType.ERROR, result.getResult());
-		assertFalse(result.getErrors().isEmpty());
-		List<ValidationError> errors = result.getErrors();
-		ValidationError validationError = errors.get(0);
-		assertTrue(validationError instanceof RingSelfIntersection);
-		RingSelfIntersection err = (RingSelfIntersection) validationError;
-		assertEquals("_Simple_BD.1_PG.6_LR.1", err.getLinearRingId());
-		assertEquals(RingSelfIntType.POINT_TOUCHES_EDGE, err.getType());
-		assertNull(err.getEdge2());
-		Edge edge1 = err.getEdge1();
-		assertEquals(10.0, edge1.getFrom().getValue().get(0), 0.000001);
-		assertEquals(11.0, edge1.getTo().getValue().get(0), 0.000001);
-		assertEquals(5.0, err.getVertex1().getValue().get(0));
-		assertNull(err.getVertex2());
-	}
-
-	@Test
-	void testReadingRingNotClosedError()
-			throws ADEException, CityGMLBuilderException, CityGMLReadException, FileNotFoundException {
-		CityModel cityModel = readCityGml("src/test/resources/SimpleSolid_RingNotClosed.gml");
-
-		List<CityObjectMember> cityObjectMember = cityModel.getCityObjectMember();
-		CityObjectMember com = cityObjectMember.get(0);
-		AbstractCityObject aco = com.getCityObject();
-		Building b = (Building) aco;
-
-		List<ADEComponent> gen = b.getGenericApplicationPropertyOfCityObject();
-		ADEComponent resultComp = gen.get(0);
-		ValidationResult result = (ValidationResult) resultComp;
-		assertEquals(ResultType.ERROR, result.getResult());
-		assertFalse(result.getErrors().isEmpty());
-		List<ValidationError> errors = result.getErrors();
-		ValidationError validationError = errors.get(0);
-		assertTrue(validationError instanceof RingNotClosed);
-		RingNotClosed err = (RingNotClosed) validationError;
-		assertEquals("_Simple_BD.1_PG.6_LR.1", err.getLinearRingId());
-	}
-
-	@Test
-	void testReadingInteriorDisconnectedError()
-			throws ADEException, CityGMLBuilderException, CityGMLReadException, FileNotFoundException {
-		CityModel cityModel = readCityGml("src/test/resources/SimpleSolid_InteriorDisconnected.gml");
-
-		List<CityObjectMember> cityObjectMember = cityModel.getCityObjectMember();
-		CityObjectMember com = cityObjectMember.get(0);
-		AbstractCityObject aco = com.getCityObject();
-		Building b = (Building) aco;
-
-		List<ADEComponent> gen = b.getGenericApplicationPropertyOfCityObject();
-		ADEComponent resultComp = gen.get(0);
-		ValidationResult result = (ValidationResult) resultComp;
-		assertEquals(ResultType.ERROR, result.getResult());
-		assertFalse(result.getErrors().isEmpty());
-		List<ValidationError> errors = result.getErrors();
-		ValidationError validationError = errors.get(0);
-
-		assertTrue(validationError instanceof InteriorDisconnected);
-		InteriorDisconnected err = (InteriorDisconnected) validationError;
-		assertEquals("_Simple_BD.1_PG.1", err.getPolygonId());
-	}
-
-	@Test
-	void testReadingIntersectingRingsError()
-			throws ADEException, CityGMLBuilderException, CityGMLReadException, FileNotFoundException {
-		CityModel cityModel = readCityGml("src/test/resources/SimpleSolid_IntersectingRings.gml");
-
-		List<CityObjectMember> cityObjectMember = cityModel.getCityObjectMember();
-		CityObjectMember com = cityObjectMember.get(0);
-		AbstractCityObject aco = com.getCityObject();
-		Building b = (Building) aco;
-
-		List<ADEComponent> gen = b.getGenericApplicationPropertyOfCityObject();
-		ADEComponent resultComp = gen.get(0);
-		ValidationResult result = (ValidationResult) resultComp;
-		assertEquals(ResultType.ERROR, result.getResult());
-		assertFalse(result.getErrors().isEmpty());
-		List<ValidationError> errors = result.getErrors();
-		ValidationError validationError = errors.get(0);
-
-		assertTrue(validationError instanceof IntersectingRings);
-		IntersectingRings err = (IntersectingRings) validationError;
-		assertEquals("_Simple_BD.1_PG.1", err.getPolygonId());
-		assertEquals("_Simple_BD.1_PG.1_Ring1", err.getLinearRingId1());
-		assertEquals("_Simple_BD.1_PG.1_Ring2", err.getLinearRingId2());
-	}
-
-	@Test
-	void testReadingNonPlanarPolygonDistancePlaneError()
-			throws ADEException, CityGMLBuilderException, CityGMLReadException, FileNotFoundException {
-		CityModel cityModel = readCityGml("src/test/resources/SimpleSolid_NonPlanarPolygonDistancePlane.gml");
-
-		List<CityObjectMember> cityObjectMember = cityModel.getCityObjectMember();
-		CityObjectMember com = cityObjectMember.get(0);
-		AbstractCityObject aco = com.getCityObject();
-		Building b = (Building) aco;
-
-		List<ADEComponent> gen = b.getGenericApplicationPropertyOfCityObject();
-		ADEComponent resultComp = gen.get(0);
-		ValidationResult result = (ValidationResult) resultComp;
-		assertEquals(ResultType.ERROR, result.getResult());
-		assertFalse(result.getErrors().isEmpty());
-		List<ValidationError> errors = result.getErrors();
-		ValidationError validationError = errors.get(0);
-
-		assertTrue(validationError instanceof NonPlanarDistancePlane);
-		NonPlanarDistancePlane err = (NonPlanarDistancePlane) validationError;
-		assertEquals("_Simple_BD.1_PG.1", err.getPolygonId());
-		assertEquals(1.0, err.getVertex().getValue().get(0), 0.000001);
-		assertEquals(0.001, err.getDistance().getValue(), 0.000001);
-		assertEquals("m", err.getDistance().getUom());
-	}
-
-	@Test
-	void testReadingInnerRingsNestedError()
-			throws ADEException, CityGMLBuilderException, CityGMLReadException, FileNotFoundException {
-		CityModel cityModel = readCityGml("src/test/resources/SimpleSolid_InnerRingNested.gml");
-
-		List<CityObjectMember> cityObjectMember = cityModel.getCityObjectMember();
-		CityObjectMember com = cityObjectMember.get(0);
-		AbstractCityObject aco = com.getCityObject();
-		Building b = (Building) aco;
-
-		List<ADEComponent> gen = b.getGenericApplicationPropertyOfCityObject();
-		ADEComponent resultComp = gen.get(0);
-		ValidationResult result = (ValidationResult) resultComp;
-		assertEquals(ResultType.ERROR, result.getResult());
-		assertFalse(result.getErrors().isEmpty());
-		List<ValidationError> errors = result.getErrors();
-		ValidationError validationError = errors.get(0);
-
-		assertTrue(validationError instanceof InnerRingsNested);
-		InnerRingsNested err = (InnerRingsNested) validationError;
-		assertEquals("_Simple_BD.1_PG.1", err.getPolygonId());
-		assertEquals("_Simple_BD.1_PG.1_Ring1", err.getLinearRingId1());
-		assertEquals("_Simple_BD.1_PG.1_Ring2", err.getLinearRingId2());
-	}
-
-	@Test
-	void testReadingHoleOutsideError()
-			throws ADEException, CityGMLBuilderException, CityGMLReadException, FileNotFoundException {
-		CityModel cityModel = readCityGml("src/test/resources/SimpleSolid_HoleOutside.gml");
-
-		List<CityObjectMember> cityObjectMember = cityModel.getCityObjectMember();
-		CityObjectMember com = cityObjectMember.get(0);
-		AbstractCityObject aco = com.getCityObject();
-		Building b = (Building) aco;
-
-		List<ADEComponent> gen = b.getGenericApplicationPropertyOfCityObject();
-		ADEComponent resultComp = gen.get(0);
-		ValidationResult result = (ValidationResult) resultComp;
-		assertEquals(ResultType.ERROR, result.getResult());
-		assertFalse(result.getErrors().isEmpty());
-		List<ValidationError> errors = result.getErrors();
-		ValidationError validationError = errors.get(0);
-
-		assertTrue(validationError instanceof HoleOutside);
-		HoleOutside err = (HoleOutside) validationError;
-		assertEquals("_Simple_BD.1_PG.1", err.getPolygonId());
-		assertEquals("_Simple_BD.1_PG.1_Ring1", err.getLinearRingId());
-	}
-
-	@Test
-	void testReadingNonPlanarNormalsDeviationError()
-			throws ADEException, CityGMLBuilderException, CityGMLReadException, FileNotFoundException {
-		CityModel cityModel = readCityGml("src/test/resources/SimpleSolid_NonPlanarPolygonNormalsDeviation.gml");
-
-		List<CityObjectMember> cityObjectMember = cityModel.getCityObjectMember();
-		CityObjectMember com = cityObjectMember.get(0);
-		AbstractCityObject aco = com.getCityObject();
-		Building b = (Building) aco;
-
-		List<ADEComponent> gen = b.getGenericApplicationPropertyOfCityObject();
-		ADEComponent resultComp = gen.get(0);
-		ValidationResult result = (ValidationResult) resultComp;
-		assertEquals(ResultType.ERROR, result.getResult());
-		assertFalse(result.getErrors().isEmpty());
-		List<ValidationError> errors = result.getErrors();
-		ValidationError validationError = errors.get(0);
-
-		assertTrue(validationError instanceof NonPlanarNormalsDeviation);
-		NonPlanarNormalsDeviation err = (NonPlanarNormalsDeviation) validationError;
-		assertEquals("_Simple_BD.1_PG.1", err.getPolygonId());
-		assertEquals(1.0, err.getDeviation().getValue());
-		assertEquals("deg", err.getDeviation().getUom());
-	}
-
-	@Test
-	void testReadingOrientationRingsSameError()
-			throws ADEException, CityGMLBuilderException, CityGMLReadException, FileNotFoundException {
-		CityModel cityModel = readCityGml("src/test/resources/SimpleSolid_OrientationRingsSame.gml");
-
-		List<CityObjectMember> cityObjectMember = cityModel.getCityObjectMember();
-		CityObjectMember com = cityObjectMember.get(0);
-		AbstractCityObject aco = com.getCityObject();
-		Building b = (Building) aco;
-
-		List<ADEComponent> gen = b.getGenericApplicationPropertyOfCityObject();
-		ADEComponent resultComp = gen.get(0);
-		ValidationResult result = (ValidationResult) resultComp;
-		assertEquals(ResultType.ERROR, result.getResult());
-		assertFalse(result.getErrors().isEmpty());
-		List<ValidationError> errors = result.getErrors();
-		ValidationError validationError = errors.get(0);
-
-		assertTrue(validationError instanceof OrientationRingsSame);
-		OrientationRingsSame err = (OrientationRingsSame) validationError;
-		assertEquals("_Simple_BD.1_PG.1", err.getPolygonId());
-		assertEquals("_Simple_BD.1_PG.1_Ring1", err.getLinearRingId());
-	}
-
-	@Test
-	void testReadingAllPolygonsWrongOrientationError()
-			throws ADEException, CityGMLBuilderException, CityGMLReadException, FileNotFoundException {
-		CityModel cityModel = readCityGml("src/test/resources/SimpleSolid_AllPolygonsWrongOrientation.gml");
-
-		List<CityObjectMember> cityObjectMember = cityModel.getCityObjectMember();
-		CityObjectMember com = cityObjectMember.get(0);
-		AbstractCityObject aco = com.getCityObject();
-		Building b = (Building) aco;
-
-		List<ADEComponent> gen = b.getGenericApplicationPropertyOfCityObject();
-		ADEComponent resultComp = gen.get(0);
-		ValidationResult result = (ValidationResult) resultComp;
-		assertEquals(ResultType.ERROR, result.getResult());
-		assertFalse(result.getErrors().isEmpty());
-		List<ValidationError> errors = result.getErrors();
-		ValidationError validationError = errors.get(0);
-
-		assertTrue(validationError instanceof AllPolygonsWrongOrientation);
-		AllPolygonsWrongOrientation err = (AllPolygonsWrongOrientation) validationError;
-		assertEquals("_Simple_BD.1_Geom1", err.getGeometryId());
-	}
-
-	@Test
-	void testReadingPolygonWrongOrientationError()
-			throws ADEException, CityGMLBuilderException, CityGMLReadException, FileNotFoundException {
-		CityModel cityModel = readCityGml("src/test/resources/SimpleSolid_PolygonWrongOrientation.gml");
-
-		List<CityObjectMember> cityObjectMember = cityModel.getCityObjectMember();
-		CityObjectMember com = cityObjectMember.get(0);
-		AbstractCityObject aco = com.getCityObject();
-		Building b = (Building) aco;
-
-		List<ADEComponent> gen = b.getGenericApplicationPropertyOfCityObject();
-		ADEComponent resultComp = gen.get(0);
-		ValidationResult result = (ValidationResult) resultComp;
-		assertEquals(ResultType.ERROR, result.getResult());
-		assertFalse(result.getErrors().isEmpty());
-		List<ValidationError> errors = result.getErrors();
-		ValidationError validationError = errors.get(0);
-
-		assertTrue(validationError instanceof PolygonWrongOrientation);
-		PolygonWrongOrientation err = (PolygonWrongOrientation) validationError;
-		assertEquals("_Simple_BD.1_Geom1", err.getGeometryId());
-		assertFalse(err.getEdges().isEmpty());
-		List<Edge> edges = err.getEdges();
-		Edge edge = edges.get(0);
-		DirectPosition from = edge.getFrom();
-		assertEquals(10.0, from.getValue().get(0), 0.000001);
-		assertEquals(11.0, edge.getTo().getValue().get(0), 0.000001);
-	}
-
-	@Test
-	void testReadingNonManifoldVertexError()
-			throws ADEException, CityGMLBuilderException, CityGMLReadException, FileNotFoundException {
-		CityModel cityModel = readCityGml("src/test/resources/SimpleSolid_NonManifoldVertex.gml");
-
-		List<CityObjectMember> cityObjectMember = cityModel.getCityObjectMember();
-		CityObjectMember com = cityObjectMember.get(0);
-		AbstractCityObject aco = com.getCityObject();
-		Building b = (Building) aco;
-
-		List<ADEComponent> gen = b.getGenericApplicationPropertyOfCityObject();
-		ADEComponent resultComp = gen.get(0);
-		ValidationResult result = (ValidationResult) resultComp;
-		assertEquals(ResultType.ERROR, result.getResult());
-		assertFalse(result.getErrors().isEmpty());
-		List<ValidationError> errors = result.getErrors();
-		ValidationError validationError = errors.get(0);
-
-		assertTrue(validationError instanceof NonManifoldVertex);
-		NonManifoldVertex err = (NonManifoldVertex) validationError;
-		assertEquals("_Simple_BD.1_Geom1", err.getGeometryId());
-		DirectPosition vertex = err.getVertex();
-		assertEquals(1.0, vertex.getValue().get(0), 0.000001);
-	}
-
-	@Test
-	void testReadingNonManifoldEdgeError()
-			throws ADEException, CityGMLBuilderException, CityGMLReadException, FileNotFoundException {
-		CityModel cityModel = readCityGml("src/test/resources/SimpleSolid_NonManifoldEdge.gml");
-
-		List<CityObjectMember> cityObjectMember = cityModel.getCityObjectMember();
-		CityObjectMember com = cityObjectMember.get(0);
-		AbstractCityObject aco = com.getCityObject();
-		Building b = (Building) aco;
-
-		List<ADEComponent> gen = b.getGenericApplicationPropertyOfCityObject();
-		ADEComponent resultComp = gen.get(0);
-		ValidationResult result = (ValidationResult) resultComp;
-		assertEquals(ResultType.ERROR, result.getResult());
-		assertFalse(result.getErrors().isEmpty());
-		List<ValidationError> errors = result.getErrors();
-		ValidationError validationError = errors.get(0);
-
-		assertTrue(validationError instanceof NonManifoldEdge);
-		NonManifoldEdge err = (NonManifoldEdge) validationError;
-		assertEquals("_Simple_BD.1_Geom1", err.getGeometryId());
-		assertFalse(err.getEdges().isEmpty());
-		List<Edge> edges = err.getEdges();
-		Edge edge = edges.get(0);
-		DirectPosition from = edge.getFrom();
-		assertEquals(10.0, from.getValue().get(0), 0.000001);
-		assertEquals(11.0, edge.getTo().getValue().get(0), 0.000001);
-	}
-
-	@Test
-	void testReadingSolidNotClosedError()
-			throws ADEException, CityGMLBuilderException, CityGMLReadException, FileNotFoundException {
-		CityModel cityModel = readCityGml("src/test/resources/SimpleSolid_SolidNotClosed.gml");
-
-		List<CityObjectMember> cityObjectMember = cityModel.getCityObjectMember();
-		CityObjectMember com = cityObjectMember.get(0);
-		AbstractCityObject aco = com.getCityObject();
-		Building b = (Building) aco;
-
-		List<ADEComponent> gen = b.getGenericApplicationPropertyOfCityObject();
-		ADEComponent resultComp = gen.get(0);
-		ValidationResult result = (ValidationResult) resultComp;
-		assertEquals(ResultType.ERROR, result.getResult());
-		assertFalse(result.getErrors().isEmpty());
-		List<ValidationError> errors = result.getErrors();
-		ValidationError validationError = errors.get(0);
-
-		assertTrue(validationError instanceof SolidNotClosed);
-		SolidNotClosed err = (SolidNotClosed) validationError;
-		assertEquals("_Simple_BD.1_Geom1", err.getGeometryId());
-		assertFalse(err.getEdges().isEmpty());
-		List<Edge> edges = err.getEdges();
-		Edge edge = edges.get(0);
-		DirectPosition from = edge.getFrom();
-		assertEquals(10.0, from.getValue().get(0), 0.000001);
-		assertEquals(11.0, edge.getTo().getValue().get(0), 0.000001);
-	}
-
-	@Test
-	void testReadingTooFewPolygonsError()
-			throws ADEException, CityGMLBuilderException, CityGMLReadException, FileNotFoundException {
-		CityModel cityModel = readCityGml("src/test/resources/SimpleSolid_TooFewPolygons.gml");
-
-		List<CityObjectMember> cityObjectMember = cityModel.getCityObjectMember();
-		CityObjectMember com = cityObjectMember.get(0);
-		AbstractCityObject aco = com.getCityObject();
-		Building b = (Building) aco;
-
-		List<ADEComponent> gen = b.getGenericApplicationPropertyOfCityObject();
-		ADEComponent resultComp = gen.get(0);
-		ValidationResult result = (ValidationResult) resultComp;
-		assertEquals(ResultType.ERROR, result.getResult());
-		assertFalse(result.getErrors().isEmpty());
-		List<ValidationError> errors = result.getErrors();
-		ValidationError validationError = errors.get(0);
-
-		assertTrue(validationError instanceof TooFewPolygons);
-		TooFewPolygons err = (TooFewPolygons) validationError;
-		assertEquals("_Simple_BD.1_Geom1", err.getGeometryId());
-	}
-
-	@Test
-	void testReadingMultipleConnectedComponentsError()
-			throws ADEException, CityGMLBuilderException, CityGMLReadException, FileNotFoundException {
-		CityModel cityModel = readCityGml("src/test/resources/SimpleSolid_MultipleConnectedComponents.gml");
-
-		List<CityObjectMember> cityObjectMember = cityModel.getCityObjectMember();
-		CityObjectMember com = cityObjectMember.get(0);
-		AbstractCityObject aco = com.getCityObject();
-		Building b = (Building) aco;
-
-		List<ADEComponent> gen = b.getGenericApplicationPropertyOfCityObject();
-		ADEComponent resultComp = gen.get(0);
-		ValidationResult result = (ValidationResult) resultComp;
-		assertEquals(ResultType.ERROR, result.getResult());
-		assertFalse(result.getErrors().isEmpty());
-		List<ValidationError> errors = result.getErrors();
-		ValidationError validationError = errors.get(0);
-
-		assertTrue(validationError instanceof MultipleConnectedComponents);
-		MultipleConnectedComponents err = (MultipleConnectedComponents) validationError;
-		assertEquals("_Simple_BD.1_Geom1", err.getGeometryId());
-		assertEquals("_Simple_BD.1_PG.1", err.getComponents().get(0).getPolygonIds().get(0));
-		assertEquals("_Simple_BD.1_PG.2", err.getComponents().get(0).getPolygonIds().get(1));
-		assertEquals("_Simple_BD.1_PG.3", err.getComponents().get(1).getPolygonIds().get(0));
-		assertEquals("_Simple_BD.1_PG.4", err.getComponents().get(1).getPolygonIds().get(1));
-	}
-	
-	@Test
-	void testWritingAttributeMissingError()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Building b = new Building();
-		model.getCityObjectMember().add(new CityObjectMember(b));
-
-		ValidationResult result = new ValidationResult();
-		result.setResult(ResultType.ERROR);
-		b.addGenericApplicationPropertyOfCityObject(result);
-		AttributeMissing error = new AttributeMissing();
-		error.setAttributeName("TestName");
-		error.setChildId("TestId");
-		error.setGeneric(true);
-		result.getErrors().add(error);
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject();
-		List<ADEComponent> ades = co.getGenericApplicationPropertyOfCityObject();
-		ADEComponent adeComponent = ades.get(0);
-		ValidationResult valRes = (ValidationResult) adeComponent;
-		assertEquals(ResultType.ERROR, valRes.getResult());
-
-		ValidationError valError = valRes.getErrors().get(0);
-		AttributeMissing error2 = (AttributeMissing) valError;
-		assertEquals(error.getAttributeName(), error2.getAttributeName());
-		assertEquals(error.getChildId(), error2.getChildId());
-		assertEquals(error.isGeneric(), error2.isGeneric());
-	}
-	
-	@Test
-	void testWritingAttributeWrongValueError()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Building b = new Building();
-		model.getCityObjectMember().add(new CityObjectMember(b));
-
-		ValidationResult result = new ValidationResult();
-		result.setResult(ResultType.ERROR);
-		b.addGenericApplicationPropertyOfCityObject(result);
-		AttributeWrongValue error = new AttributeWrongValue();
-		error.setAttributeName("TestName");
-		error.setChildId("TestId");
-		error.setGeneric(true);
-		result.getErrors().add(error);
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject();
-		List<ADEComponent> ades = co.getGenericApplicationPropertyOfCityObject();
-		ADEComponent adeComponent = ades.get(0);
-		ValidationResult valRes = (ValidationResult) adeComponent;
-		assertEquals(ResultType.ERROR, valRes.getResult());
-
-		ValidationError valError = valRes.getErrors().get(0);
-		AttributeWrongValue error2 = (AttributeWrongValue) valError;
-		assertEquals(error.getAttributeName(), error2.getAttributeName());
-		assertEquals(error.getChildId(), error2.getChildId());
-		assertEquals(error.isGeneric(), error2.isGeneric());
-	}
-
-	@Test
-	void testWritingMultipleConnectedComponentsError()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Building b = new Building();
-		model.getCityObjectMember().add(new CityObjectMember(b));
-
-		ValidationResult result = new ValidationResult();
-		result.setResult(ResultType.ERROR);
-		b.addGenericApplicationPropertyOfCityObject(result);
-		MultipleConnectedComponents error = new MultipleConnectedComponents();
-		error.setGeometryId("TestGeometry");
-		Component c1 = new Component();
-		c1.getPolygonIds().add("TestPoly");
-		error.getComponents().add(c1);
-		result.getErrors().add(error);
-
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject();
-		List<ADEComponent> ades = co.getGenericApplicationPropertyOfCityObject();
-		ADEComponent adeComponent = ades.get(0);
-		ValidationResult valRes = (ValidationResult) adeComponent;
-		assertEquals(ResultType.ERROR, valRes.getResult());
-
-		ValidationError valError = valRes.getErrors().get(0);
-		MultipleConnectedComponents error2 = (MultipleConnectedComponents) valError;
-		assertEquals(error.getGeometryId(), error2.getGeometryId());
-		assertEquals(error.getComponents().get(0).getPolygonIds().get(0),
-				error2.getComponents().get(0).getPolygonIds().get(0));
-	}
-
-	@Test
-	void testWritingTooFewPolygonsError()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Building b = new Building();
-		model.getCityObjectMember().add(new CityObjectMember(b));
-
-		ValidationResult result = new ValidationResult();
-		result.setResult(ResultType.ERROR);
-		b.addGenericApplicationPropertyOfCityObject(result);
-		TooFewPolygons error = new TooFewPolygons();
-		error.setGeometryId("TestGeometry");
-		result.getErrors().add(error);
-
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject();
-		List<ADEComponent> ades = co.getGenericApplicationPropertyOfCityObject();
-		ADEComponent adeComponent = ades.get(0);
-		ValidationResult valRes = (ValidationResult) adeComponent;
-		assertEquals(ResultType.ERROR, valRes.getResult());
-
-		ValidationError valError = valRes.getErrors().get(0);
-		TooFewPolygons error2 = (TooFewPolygons) valError;
-		assertEquals(error.getGeometryId(), error2.getGeometryId());
-	}
-
-	@Test
-	void testWritingSolidNotClosedError()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Building b = new Building();
-		model.getCityObjectMember().add(new CityObjectMember(b));
-
-		ValidationResult result = new ValidationResult();
-		result.setResult(ResultType.ERROR);
-		b.addGenericApplicationPropertyOfCityObject(result);
-		SolidNotClosed error = new SolidNotClosed();
-		error.setGeometryId("TestGeometry");
-		DirectPosition from = new DirectPosition();
-		from.getValue().add(10.0);
-		DirectPosition to = new DirectPosition();
-		to.getValue().add(11.0);
-		Edge e = new Edge();
-		e.setFrom(from);
-		e.setTo(to);
-		error.getEdges().add(e);
-		result.getErrors().add(error);
-
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject();
-		List<ADEComponent> ades = co.getGenericApplicationPropertyOfCityObject();
-		ADEComponent adeComponent = ades.get(0);
-		ValidationResult valRes = (ValidationResult) adeComponent;
-		assertEquals(ResultType.ERROR, valRes.getResult());
-
-		ValidationError valError = valRes.getErrors().get(0);
-		SolidNotClosed error2 = (SolidNotClosed) valError;
-		assertEquals(error.getGeometryId(), error2.getGeometryId());
-		Edge edge = error.getEdges().get(0);
-		assertEquals(edge.getFrom().getValue().get(0), e.getFrom().getValue().get(0), 0.00001);
-		assertEquals(edge.getTo().getValue().get(0), e.getTo().getValue().get(0), 0.00001);
-	}
-
-	@Test
-	void testWritingNonManifoldEdgeError()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Building b = new Building();
-		model.getCityObjectMember().add(new CityObjectMember(b));
-
-		ValidationResult result = new ValidationResult();
-		result.setResult(ResultType.ERROR);
-		b.addGenericApplicationPropertyOfCityObject(result);
-		NonManifoldEdge error = new NonManifoldEdge();
-		error.setGeometryId("TestGeometry");
-		DirectPosition from = new DirectPosition();
-		from.getValue().add(10.0);
-		DirectPosition to = new DirectPosition();
-		to.getValue().add(11.0);
-		Edge e = new Edge();
-		e.setFrom(from);
-		e.setTo(to);
-		error.getEdges().add(e);
-		result.getErrors().add(error);
-
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject();
-		List<ADEComponent> ades = co.getGenericApplicationPropertyOfCityObject();
-		ADEComponent adeComponent = ades.get(0);
-		ValidationResult valRes = (ValidationResult) adeComponent;
-		assertEquals(ResultType.ERROR, valRes.getResult());
-
-		ValidationError valError = valRes.getErrors().get(0);
-		NonManifoldEdge error2 = (NonManifoldEdge) valError;
-		assertEquals(error.getGeometryId(), error2.getGeometryId());
-		Edge edge = error.getEdges().get(0);
-		assertEquals(edge.getFrom().getValue().get(0), e.getFrom().getValue().get(0), 0.00001);
-		assertEquals(edge.getTo().getValue().get(0), e.getTo().getValue().get(0), 0.00001);
-	}
-
-	@Test
-	void testWritingNonManifoldVertexError()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Building b = new Building();
-		model.getCityObjectMember().add(new CityObjectMember(b));
-
-		ValidationResult result = new ValidationResult();
-		result.setResult(ResultType.ERROR);
-		b.addGenericApplicationPropertyOfCityObject(result);
-		NonManifoldVertex error = new NonManifoldVertex();
-		error.setGeometryId("TestGeometry");
-		DirectPosition vertex = new DirectPosition();
-		vertex.getValue().add(10.0);
-		error.setVertex(vertex);
-		result.getErrors().add(error);
-
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject();
-		List<ADEComponent> ades = co.getGenericApplicationPropertyOfCityObject();
-		ADEComponent adeComponent = ades.get(0);
-		ValidationResult valRes = (ValidationResult) adeComponent;
-		assertEquals(ResultType.ERROR, valRes.getResult());
-
-		ValidationError valError = valRes.getErrors().get(0);
-		NonManifoldVertex error2 = (NonManifoldVertex) valError;
-		assertEquals(error.getGeometryId(), error2.getGeometryId());
-		assertEquals(error.getVertex().getValue().get(0), error2.getVertex().getValue().get(0));
-	}
-
-	@Test
-	void testWritingPolygonWrongOrientationError()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Building b = new Building();
-		model.getCityObjectMember().add(new CityObjectMember(b));
-
-		ValidationResult result = new ValidationResult();
-		result.setResult(ResultType.ERROR);
-		b.addGenericApplicationPropertyOfCityObject(result);
-		PolygonWrongOrientation error = new PolygonWrongOrientation();
-		error.setGeometryId("TestGeometry");
-		DirectPosition from = new DirectPosition();
-		from.getValue().add(10.0);
-		DirectPosition to = new DirectPosition();
-		to.getValue().add(11.0);
-		Edge e = new Edge();
-		e.setFrom(from);
-		e.setTo(to);
-		error.getEdges().add(e);
-		result.getErrors().add(error);
-
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject();
-		List<ADEComponent> ades = co.getGenericApplicationPropertyOfCityObject();
-		ADEComponent adeComponent = ades.get(0);
-		ValidationResult valRes = (ValidationResult) adeComponent;
-		assertEquals(ResultType.ERROR, valRes.getResult());
-
-		ValidationError valError = valRes.getErrors().get(0);
-		PolygonWrongOrientation error2 = (PolygonWrongOrientation) valError;
-		assertEquals(error.getGeometryId(), error2.getGeometryId());
-		Edge edge = error.getEdges().get(0);
-		assertEquals(edge.getFrom().getValue().get(0), e.getFrom().getValue().get(0), 0.00001);
-		assertEquals(edge.getTo().getValue().get(0), e.getTo().getValue().get(0), 0.00001);
-	}
-
-	@Test
-	void testWritingAllPolygonsWrongOrientationError()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Building b = new Building();
-		model.getCityObjectMember().add(new CityObjectMember(b));
-
-		ValidationResult result = new ValidationResult();
-		result.setResult(ResultType.ERROR);
-		b.addGenericApplicationPropertyOfCityObject(result);
-		AllPolygonsWrongOrientation error = new AllPolygonsWrongOrientation();
-		error.setGeometryId("TestGeometry");
-		result.getErrors().add(error);
-
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject();
-		List<ADEComponent> ades = co.getGenericApplicationPropertyOfCityObject();
-		ADEComponent adeComponent = ades.get(0);
-		ValidationResult valRes = (ValidationResult) adeComponent;
-		assertEquals(ResultType.ERROR, valRes.getResult());
-
-		ValidationError valError = valRes.getErrors().get(0);
-		AllPolygonsWrongOrientation error2 = (AllPolygonsWrongOrientation) valError;
-		assertEquals(error.getGeometryId(), error2.getGeometryId());
-	}
-
-	@Test
-	void testWritingOrientationRingsSameError()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Building b = new Building();
-		model.getCityObjectMember().add(new CityObjectMember(b));
-
-		ValidationResult result = new ValidationResult();
-		result.setResult(ResultType.ERROR);
-		b.addGenericApplicationPropertyOfCityObject(result);
-		OrientationRingsSame error = new OrientationRingsSame();
-		error.setPolygonId("TestPolygon");
-		error.setLinearRingId("TestRing");
-		result.getErrors().add(error);
-
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject();
-		List<ADEComponent> ades = co.getGenericApplicationPropertyOfCityObject();
-		ADEComponent adeComponent = ades.get(0);
-		ValidationResult valRes = (ValidationResult) adeComponent;
-		assertEquals(ResultType.ERROR, valRes.getResult());
-
-		ValidationError valError = valRes.getErrors().get(0);
-		OrientationRingsSame error2 = (OrientationRingsSame) valError;
-		assertEquals(error.getPolygonId(), error2.getPolygonId());
-		assertEquals(error.getLinearRingId(), error2.getLinearRingId());
-	}
-
-	@Test
-	void testWritingNonPlanarNormalsDeviationError()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Building b = new Building();
-		model.getCityObjectMember().add(new CityObjectMember(b));
-
-		ValidationResult result = new ValidationResult();
-		result.setResult(ResultType.ERROR);
-		b.addGenericApplicationPropertyOfCityObject(result);
-		NonPlanarNormalsDeviation error = new NonPlanarNormalsDeviation();
-		error.setPolygonId("TestPolygon");
-		Angle deviation = new Angle();
-		deviation.setValue(1.0);
-		deviation.setUom("deg");
-		error.setDeviation(deviation);
-		result.getErrors().add(error);
-
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject();
-		List<ADEComponent> ades = co.getGenericApplicationPropertyOfCityObject();
-		ADEComponent adeComponent = ades.get(0);
-		ValidationResult valRes = (ValidationResult) adeComponent;
-		assertEquals(ResultType.ERROR, valRes.getResult());
-
-		ValidationError valError = valRes.getErrors().get(0);
-		NonPlanarNormalsDeviation error2 = (NonPlanarNormalsDeviation) valError;
-		assertEquals(error.getPolygonId(), error2.getPolygonId());
-		assertEquals(error.getDeviation().getValue(), error2.getDeviation().getValue());
-		assertEquals(error.getDeviation().getUom(), error2.getDeviation().getUom());
-	}
-
-	@Test
-	void testWritingHoleOutsideError()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Building b = new Building();
-		model.getCityObjectMember().add(new CityObjectMember(b));
-
-		ValidationResult result = new ValidationResult();
-		result.setResult(ResultType.ERROR);
-		b.addGenericApplicationPropertyOfCityObject(result);
-		HoleOutside error = new HoleOutside();
-		error.setPolygonId("TestPolygon");
-		error.setLinearRingId("TestRing1");
-		result.getErrors().add(error);
-
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject();
-		List<ADEComponent> ades = co.getGenericApplicationPropertyOfCityObject();
-		ADEComponent adeComponent = ades.get(0);
-		ValidationResult valRes = (ValidationResult) adeComponent;
-		assertEquals(ResultType.ERROR, valRes.getResult());
-
-		ValidationError valError = valRes.getErrors().get(0);
-		HoleOutside error2 = (HoleOutside) valError;
-		assertEquals(error.getPolygonId(), error2.getPolygonId());
-		assertEquals(error.getLinearRingId(), error2.getLinearRingId());
-	}
-
-	@Test
-	void testWritingInnerRingsNestedError()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Building b = new Building();
-		model.getCityObjectMember().add(new CityObjectMember(b));
-
-		ValidationResult result = new ValidationResult();
-		result.setResult(ResultType.ERROR);
-		b.addGenericApplicationPropertyOfCityObject(result);
-		InnerRingsNested error = new InnerRingsNested();
-		error.setPolygonId("TestPolygon");
-		error.setLinearRingId1("TestRing1");
-		error.setLinearRingId2("TestRing2");
-		result.getErrors().add(error);
-
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject();
-		List<ADEComponent> ades = co.getGenericApplicationPropertyOfCityObject();
-		ADEComponent adeComponent = ades.get(0);
-		ValidationResult valRes = (ValidationResult) adeComponent;
-		assertEquals(ResultType.ERROR, valRes.getResult());
-
-		ValidationError valError = valRes.getErrors().get(0);
-		InnerRingsNested error2 = (InnerRingsNested) valError;
-		assertEquals(error.getPolygonId(), error2.getPolygonId());
-		assertEquals(error.getLinearRingId1(), error2.getLinearRingId1());
-		assertEquals(error.getLinearRingId2(), error2.getLinearRingId2());
-	}
-
-	@Test
-	void testWritingNonPlanarDistancePlaneError()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Building b = new Building();
-		model.getCityObjectMember().add(new CityObjectMember(b));
-
-		ValidationResult result = new ValidationResult();
-		result.setResult(ResultType.ERROR);
-		b.addGenericApplicationPropertyOfCityObject(result);
-		NonPlanarDistancePlane error = new NonPlanarDistancePlane();
-		error.setPolygonId("TestPolygon");
-		DirectPosition vertex = new DirectPosition();
-		vertex.getValue().add(1.0);
-		error.setVertex(vertex);
-		Length distance = new Length(0.1);
-		distance.setUom("m");
-		error.setDistance(distance);
-		result.getErrors().add(error);
-
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject();
-		List<ADEComponent> ades = co.getGenericApplicationPropertyOfCityObject();
-		ADEComponent adeComponent = ades.get(0);
-		ValidationResult valRes = (ValidationResult) adeComponent;
-		assertEquals(ResultType.ERROR, valRes.getResult());
-
-		ValidationError valError = valRes.getErrors().get(0);
-		NonPlanarDistancePlane error2 = (NonPlanarDistancePlane) valError;
-		assertEquals(error.getPolygonId(), error2.getPolygonId());
-		assertEquals(error.getVertex().getValue().get(0), error2.getVertex().getValue().get(0), 0.00001);
-		assertEquals(error.getDistance().getValue(), error2.getDistance().getValue(), 0.00001);
-	}
-
-	@Test
-	void testWritingIntersectingRingsError()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Building b = new Building();
-		model.getCityObjectMember().add(new CityObjectMember(b));
-
-		ValidationResult result = new ValidationResult();
-		result.setResult(ResultType.ERROR);
-		b.addGenericApplicationPropertyOfCityObject(result);
-		IntersectingRings error = new IntersectingRings();
-		error.setPolygonId("TestPolygon");
-		error.setLinearRingId1("TestRing1");
-		error.setLinearRingId2("TestRing2");
-		result.getErrors().add(error);
-
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject();
-		List<ADEComponent> ades = co.getGenericApplicationPropertyOfCityObject();
-		ADEComponent adeComponent = ades.get(0);
-		ValidationResult valRes = (ValidationResult) adeComponent;
-		assertEquals(ResultType.ERROR, valRes.getResult());
-
-		ValidationError valError = valRes.getErrors().get(0);
-		IntersectingRings error2 = (IntersectingRings) valError;
-		assertEquals(error.getPolygonId(), error2.getPolygonId());
-		assertEquals(error.getLinearRingId1(), error2.getLinearRingId1());
-		assertEquals(error.getLinearRingId2(), error2.getLinearRingId2());
-	}
-
-	@Test
-	void testWritingInteriorDisconnectedError()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Building b = new Building();
-		model.getCityObjectMember().add(new CityObjectMember(b));
-
-		ValidationResult result = new ValidationResult();
-		result.setResult(ResultType.ERROR);
-		b.addGenericApplicationPropertyOfCityObject(result);
-		InteriorDisconnected error = new InteriorDisconnected();
-		error.setPolygonId("TestPolygon");
-		result.getErrors().add(error);
-
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject();
-		List<ADEComponent> ades = co.getGenericApplicationPropertyOfCityObject();
-		ADEComponent adeComponent = ades.get(0);
-		ValidationResult valRes = (ValidationResult) adeComponent;
-		assertEquals(ResultType.ERROR, valRes.getResult());
-
-		ValidationError valError = valRes.getErrors().get(0);
-		InteriorDisconnected error2 = (InteriorDisconnected) valError;
-		assertEquals(error.getPolygonId(), error2.getPolygonId());
-	}
-
-	@Test
-	void testWritingRingNotClosedError()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Building b = new Building();
-		model.getCityObjectMember().add(new CityObjectMember(b));
-
-		ValidationResult result = new ValidationResult();
-		result.setResult(ResultType.ERROR);
-		b.addGenericApplicationPropertyOfCityObject(result);
-		RingNotClosed error = new RingNotClosed();
-		error.setLinearRingId("TestRing");
-		result.getErrors().add(error);
-
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject();
-		List<ADEComponent> ades = co.getGenericApplicationPropertyOfCityObject();
-		ADEComponent adeComponent = ades.get(0);
-		ValidationResult valRes = (ValidationResult) adeComponent;
-		assertEquals(ResultType.ERROR, valRes.getResult());
-
-		ValidationError valError = valRes.getErrors().get(0);
-		RingNotClosed error2 = (RingNotClosed) valError;
-		assertEquals(error.getLinearRingId(), error2.getLinearRingId());
-	}
-
-	@Test
-	void testWritingTooFewPointsError()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Building b = new Building();
-		model.getCityObjectMember().add(new CityObjectMember(b));
-
-		ValidationResult result = new ValidationResult();
-		result.setResult(ResultType.ERROR);
-		b.addGenericApplicationPropertyOfCityObject(result);
-		TooFewPoints error = new TooFewPoints();
-		error.setLinearRingId("TestRing");
-		result.getErrors().add(error);
-
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject();
-		List<ADEComponent> ades = co.getGenericApplicationPropertyOfCityObject();
-		ADEComponent adeComponent = ades.get(0);
-		ValidationResult valRes = (ValidationResult) adeComponent;
-		assertEquals(ResultType.ERROR, valRes.getResult());
-
-		ValidationError valError = valRes.getErrors().get(0);
-		TooFewPoints error2 = (TooFewPoints) valError;
-		assertEquals(error.getLinearRingId(), error2.getLinearRingId());
-	}
-
-	@Test
-	void testWritingConsecutiveSameError()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Building b = new Building();
-		model.getCityObjectMember().add(new CityObjectMember(b));
-
-		ValidationResult result = new ValidationResult();
-		result.setResult(ResultType.ERROR);
-		b.addGenericApplicationPropertyOfCityObject(result);
-
-		ConsecutivePointsSame error = new ConsecutivePointsSame();
-		error.setLinearRingId("TestRing");
-		DirectPosition vertex1 = new DirectPosition();
-		vertex1.getValue().add(10.0);
-		vertex1.getValue().add(5.0);
-		vertex1.getValue().add(7.0);
-		error.setVertex1(vertex1);
-		DirectPosition vertex2 = new DirectPosition();
-		vertex2.getValue().add(15.0);
-		vertex2.getValue().add(55.0);
-		vertex2.getValue().add(71.0);
-		error.setVertex2(vertex2);
-		result.getErrors().add(error);
-
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject();
-		List<ADEComponent> ades = co.getGenericApplicationPropertyOfCityObject();
-		ADEComponent adeComponent = ades.get(0);
-		ValidationResult valRes = (ValidationResult) adeComponent;
-		assertEquals(ResultType.ERROR, valRes.getResult());
-
-		ValidationError valError = valRes.getErrors().get(0);
-		ConsecutivePointsSame error2 = (ConsecutivePointsSame) valError;
-		assertEquals(error.getLinearRingId(), error2.getLinearRingId());
-		assertEquals(error.getVertex1().getValue().get(0), error2.getVertex1().getValue().get(0));
-		assertEquals(error.getVertex2().getValue().get(0), error2.getVertex2().getValue().get(0));
-	}
-
-	@Test
-	void testWritingRingSelfIntersection()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Building b = new Building();
-		model.getCityObjectMember().add(new CityObjectMember(b));
-
-		ValidationResult result = new ValidationResult();
-		result.setResult(ResultType.ERROR);
-		b.addGenericApplicationPropertyOfCityObject(result);
-
-		RingSelfIntersection error = new RingSelfIntersection();
-		error.setType(RingSelfIntType.DUPLICATE_POINT);
-		error.setLinearRingId("TestRing");
-		DirectPosition vertex1 = new DirectPosition();
-		vertex1.getValue().add(10.0);
-		vertex1.getValue().add(5.0);
-		vertex1.getValue().add(7.0);
-		error.setVertex1(vertex1);
-		DirectPosition vertex2 = new DirectPosition();
-		vertex2.getValue().add(15.0);
-		vertex2.getValue().add(55.0);
-		vertex2.getValue().add(71.0);
-		error.setVertex2(vertex2);
-		result.getErrors().add(error);
-
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject();
-		List<ADEComponent> ades = co.getGenericApplicationPropertyOfCityObject();
-		ADEComponent adeComponent = ades.get(0);
-		ValidationResult valRes = (ValidationResult) adeComponent;
-		assertEquals(ResultType.ERROR, valRes.getResult());
-
-		ValidationError valError = valRes.getErrors().get(0);
-		RingSelfIntersection error2 = (RingSelfIntersection) valError;
-		assertEquals(error.getLinearRingId(), error2.getLinearRingId());
-		assertEquals(error.getVertex1().getValue().get(0), error2.getVertex1().getValue().get(0));
-		assertEquals(error.getVertex2().getValue().get(0), error2.getVertex2().getValue().get(0));
-	}
-
-	@Test
-	void testWritingValidationPlan()
-			throws ADEException, CityGMLBuilderException, CityGMLWriteException, CityGMLReadException {
-		CityModel model = new CityModel();
-		Validation val = new Validation();
-		model.addGenericApplicationPropertyOfCityModel(val);
-
-		ZonedDateTime expectedDate = LocalDateTime.of(2002, 5, 30, 9, 0).atZone(ZoneId.systemDefault());
-
-		val.setValidationDate(expectedDate);
-		val.setValidationSoftware("CityDoctor2");
-		ValidationPlan plan = new ValidationPlan();
-		val.setValidationPlan(plan);
-
-		Parameter roundingParameter = new Parameter();
-		roundingParameter.setName("numberOfRoundingPlaces");
-		roundingParameter.setValue("8");
-		plan.getGlobalParameters().add(roundingParameter);
-
-		Parameter minVertexDistance = new Parameter();
-		minVertexDistance.setName("minVertexDistance");
-		minVertexDistance.setValue("0.0001");
-		minVertexDistance.setUom("m");
-		plan.getGlobalParameters().add(minVertexDistance);
-
-		Requirement rTooFewPoints = new Requirement();
-		rTooFewPoints.setEnabled(true);
-		rTooFewPoints.setName(RequirementId.R_GE_R_TOO_FEW_POINTS);
-		plan.getRequirements().add(rTooFewPoints);
-
-		Checking buildingChecking = new Checking();
-		buildingChecking.setValue(TopLevelFeatureType.BUILDING);
-		plan.getFilter().add(buildingChecking);
-
-		Statistics statistics = new Statistics();
-		val.setStatistics(statistics);
-
-		FeatureStatistics numErrorBridgeObjects = new FeatureStatistics();
-		numErrorBridgeObjects.setNumChecked(0);
-		numErrorBridgeObjects.setNumErrors(0);
-		statistics.setNumErrorBridgeObjects(numErrorBridgeObjects);
-
-		FeatureStatistics numErrorBuildings = new FeatureStatistics();
-		numErrorBuildings.setNumChecked(1);
-		numErrorBuildings.setNumErrors(1);
-		statistics.setNumErrorBuildings(numErrorBuildings);
-
-		FeatureStatistics numErrors = new FeatureStatistics();
-		statistics.setNumErrorLandObjects(numErrors);
-		statistics.setNumErrorTransportation(numErrors);
-		statistics.setNumErrorVegetation(numErrors);
-		statistics.setNumErrorWaterObjects(numErrors);
-
-		ErrorStatistics stats1 = new ErrorStatistics();
-		stats1.setAmount(1);
-		stats1.setName(ErrorId.GE_R_CONSECUTIVE_POINTS_SAME);
-		statistics.getErrorStatistics().add(stats1);
-
-		byte[] gml = writeCityGml(model);
-		model = readCityGml(gml);
-
-		testValidationPlan(model);
-	}
-
-	private CityModel readCityGml(InputStream input)
-			throws ADEException, CityGMLBuilderException, CityGMLReadException {
-		CityGMLContext context = CityGMLContext.getInstance();
-		List<ADEContext> adeContexts = context.getADEContexts();
-		if (adeContexts.isEmpty()) {
-			for (ADEContext adeContext : ServiceLoader.load(ADEContext.class)) {
-				context.registerADEContext(adeContext);
-			}
-		}
-
-		CityGMLBuilder builder = context.createCityGMLBuilder();
-		CityGMLInputFactory in = builder.createCityGMLInputFactory();
-		in.setProperty(CityGMLInputFactory.USE_VALIDATION, true);
-		in.setProperty(CityGMLInputFactory.FEATURE_READ_MODE, FeatureReadMode.NO_SPLIT);
-		in.setValidationEventHandler(event -> {
-			System.out.print(
-					"[" + event.getLocator().getLineNumber() + "," + event.getLocator().getColumnNumber() + "] ");
-			System.out.println(event.getMessage());
-			throw new IllegalStateException(event.getLinkedException());
-		});
-		CityModel cityModel;
-		try (CityGMLReader reader = in.createCityGMLReader("?", input)) {
-			cityModel = (CityModel) reader.nextFeature();
-		}
-		return cityModel;
-	}
-
-	private CityModel readCityGml(File f)
-			throws FileNotFoundException, ADEException, CityGMLBuilderException, CityGMLReadException {
-		return readCityGml(new FileInputStream(f));
-	}
-
-	private CityModel readCityGml(String fileName)
-			throws FileNotFoundException, ADEException, CityGMLBuilderException, CityGMLReadException {
-		return readCityGml(new File(fileName));
-	}
-
-	private CityModel readCityGml(byte[] bytes) throws ADEException, CityGMLBuilderException, CityGMLReadException {
-		return readCityGml(new ByteArrayInputStream(bytes));
-	}
-
-	private void testValidationPlan(CityModel cityModel) {
-		assertFalse(cityModel.getGenericApplicationPropertyOfCityModel().isEmpty());
-		List<ADEComponent> ades = cityModel.getGenericApplicationPropertyOfCityModel();
-		ADEComponent adeComponent = ades.get(0);
-		assertTrue(adeComponent instanceof Validation);
-		Validation val = (Validation) adeComponent;
-		ZonedDateTime expectedDate = LocalDateTime.of(2002, 5, 30, 9, 0).atZone(ZoneId.systemDefault());
-		assertTrue(expectedDate.isEqual(val.getValidationDate()));
-		assertEquals("CityDoctor2", val.getValidationSoftware());
-		assertNotNull(val.getValidationPlan());
-		ValidationPlan plan = val.getValidationPlan();
-		assertNotNull(plan.getGlobalParameters());
-		assertFalse(plan.getGlobalParameters().isEmpty());
-		List<Parameter> globalParameters = plan.getGlobalParameters();
-		Parameter roundingParameter = globalParameters.get(0);
-		assertEquals("numberOfRoundingPlaces", roundingParameter.getName());
-		assertEquals("8", roundingParameter.getValue());
-		assertNull(roundingParameter.getUom());
-		Parameter minVertexDistance = globalParameters.get(1);
-		assertEquals("minVertexDistance", minVertexDistance.getName());
-		assertEquals("0.0001", minVertexDistance.getValue());
-		assertEquals("m", minVertexDistance.getUom());
-
-		assertNotNull(plan.getRequirements());
-		assertFalse(plan.getRequirements().isEmpty());
-
-		List<Requirement> requirements = plan.getRequirements();
-		Requirement rTooFewPoints = requirements.get(0);
-		assertEquals(RequirementId.R_GE_R_TOO_FEW_POINTS, rTooFewPoints.getName());
-		assertTrue(rTooFewPoints.isEnabled());
-
-		assertNotNull(plan.getFilter());
-		assertFalse(plan.getFilter().isEmpty());
-
-		List<Checking> filter = plan.getFilter();
-		Checking buildingChecking = filter.get(0);
-		assertEquals(TopLevelFeatureType.BUILDING, buildingChecking.getValue());
-
-		Statistics statistics = val.getStatistics();
-		assertNotNull(statistics);
-		FeatureStatistics numErrorBridgeObjects = statistics.getNumErrorBridgeObjects();
-		assertNotNull(numErrorBridgeObjects);
-		assertEquals(0, numErrorBridgeObjects.getNumChecked());
-		assertEquals(0, numErrorBridgeObjects.getNumErrors());
-
-		FeatureStatistics numErrorBuildings = statistics.getNumErrorBuildings();
-		assertEquals(1, numErrorBuildings.getNumChecked());
-		assertEquals(1, numErrorBuildings.getNumErrors());
-
-		List<ErrorStatistics> errorStatistics = statistics.getErrorStatistics();
-		assertNotNull(errorStatistics);
-		assertFalse(errorStatistics.isEmpty());
-		ErrorStatistics stats1 = errorStatistics.get(0);
-		assertEquals(ErrorId.GE_R_CONSECUTIVE_POINTS_SAME, stats1.getName());
-		assertEquals(1, stats1.getAmount());
-	}
-
-	private byte[] writeCityGml(CityModel model) throws ADEException, CityGMLBuilderException, CityGMLWriteException {
-		CityGMLContext context = CityGMLContext.getInstance();
-		List<ADEContext> adeContexts = context.getADEContexts();
-		if (adeContexts == null || adeContexts.isEmpty()) {
-			for (ADEContext adeContext : ServiceLoader.load(ADEContext.class)) {
-				context.registerADEContext(adeContext);
-			}
-		}
-
-		CityGMLBuilder builder = context.createCityGMLBuilder();
-
-		CityGMLOutputFactory outputFactory = builder.createCityGMLOutputFactory(CityGMLVersion.DEFAULT);
-		ByteArrayOutputStream out = new ByteArrayOutputStream();
-		try (CityGMLWriter writer = outputFactory.createCityGMLWriter(out)) {
-			writer.setIndentString("  ");
-			writer.setPrefixes(CityGMLVersion.DEFAULT);
-			writer.setPrefix("qual", QualityADEModule.NAMESPACE_URI);
-			writer.setSchemaLocation(QualityADEModule.NAMESPACE_URI,
-					QualityADEModule.NAMESPACE_URI + "/qualityAde.xsd");
-			writer.setSchemaLocations(CityGMLVersion.DEFAULT);
-			writer.write(model);
-			return out.toByteArray();
-		}
-	}
-
-}