diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..7b943bd
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,22 @@
+# eclipse
+.classpath
+.project
+.settings/
+bin/
+
+# gradle
+.gradle
+build/
+gradle.properties
+
+# intellij
+.idea/
+out/
+*.ipr
+*.iml
+*.iws
+/bin/
+
+# node
+**/node_modules
+**/coverage
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..8f51d10
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,54 @@
+# Contributing to Eclipse MDM|BL
+
+Thanks for your interest in this project.
+
+## Project description
+
+* https://projects.eclipse.org/projects/technology.mdmbl
+
+## Developer resources
+
+Information regarding source code management, builds, coding standards, and
+more.
+
+* https://projects.eclipse.org/projects/technology.mdmbl/developer
+
+The project maintains the following source code repositories
+
+* https://git.eclipse.org/r/plugins/gitiles/mdmbl/org.eclipse.mdm.api.base
+* https://git.eclipse.org/r/plugins/gitiles/mdmbl/org.eclipse.mdm.api.default
+* https://git.eclipse.org/r/plugins/gitiles/mdmbl/org.eclipse.mdm.api.odsadapter
+* https://git.eclipse.org/r/plugins/gitiles/mdmbl/org.eclipse.mdm.mdfsorter
+* https://git.eclipse.org/r/plugins/gitiles/mdmbl/org.eclipse.mdm.nucleus
+* https://git.eclipse.org/r/plugins/gitiles/mdmbl/org.eclipse.mdm.openatfx.mdf
+
+This project uses Bugzilla to track ongoing development and issues.
+
+* Search for issues: https://bugs.eclipse.org/bugs/buglist.cgi?product=MDMBL
+* Create a new report:
+   https://bugs.eclipse.org/bugs/enter_bug.cgi?product=MDMBL
+
+Be sure to search for existing bugs before you create another one. Remember that
+contributions are always welcome!
+
+## Eclipse Contributor Agreement
+
+Before your contribution can be accepted by the project team contributors must
+electronically sign the Eclipse Contributor Agreement (ECA).
+
+* http://www.eclipse.org/legal/ECA.php
+
+Commits that are provided by non-committers must have a Signed-off-by field in
+the footer indicating that the author is aware of the terms by which the
+contribution has been provided to the project. The non-committer must
+additionally have an Eclipse Foundation account and must have a signed Eclipse
+Contributor Agreement (ECA) on file.
+
+For more information, please see the Eclipse Committer Handbook:
+https://www.eclipse.org/projects/handbook/#resources-commit
+
+## Contact
+
+Contact the project developers via the project's "dev" list.
+
+* https://dev.eclipse.org/mailman/listinfo/mdmbl-dev
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..e48e096
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,277 @@
+Eclipse Public License - v 2.0
+
+    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+    PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+    OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+  a) in the case of the initial Contributor, the initial content
+     Distributed under this Agreement, and
+
+  b) in the case of each subsequent Contributor:
+     i) changes to the Program, and
+     ii) additions to the Program;
+  where such changes and/or additions to the Program originate from
+  and are Distributed by that particular Contributor. A Contribution
+  "originates" from a Contributor if it was added to the Program by
+  such Contributor itself or anyone acting on such Contributor's behalf.
+  Contributions do not include changes or additions to the Program that
+  are not Modified Works.
+
+"Contributor" means any person or entity that Distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which
+are necessarily infringed by the use or sale of its Contribution alone
+or when combined with the Program.
+
+"Program" means the Contributions Distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement
+or any Secondary License (as applicable), including Contributors.
+
+"Derivative Works" shall mean any work, whether in Source Code or other
+form, that is based on (or derived from) the Program and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship.
+
+"Modified Works" shall mean any work in Source Code or other form that
+results from an addition to, deletion from, or modification of the
+contents of the Program, including, for purposes of clarity any new file
+in Source Code form that contains any contents of the Program. Modified
+Works shall not include works that contain only declarations,
+interfaces, types, classes, structures, or files of the Program solely
+in each case in order to link to, bind by name, or subclass the Program
+or Modified Works thereof.
+
+"Distribute" means the acts of a) distributing or b) making available
+in any manner that enables the transfer of a copy.
+
+"Source Code" means the form of a Program preferred for making
+modifications, including but not limited to software source code,
+documentation source, and configuration files.
+
+"Secondary License" means either the GNU General Public License,
+Version 2.0, or any later versions of that license, including any
+exceptions or additional permissions as identified by the initial
+Contributor.
+
+2. GRANT OF RIGHTS
+
+  a) Subject to the terms of this Agreement, each Contributor hereby
+  grants Recipient a non-exclusive, worldwide, royalty-free copyright
+  license to reproduce, prepare Derivative Works of, publicly display,
+  publicly perform, Distribute and sublicense the Contribution of such
+  Contributor, if any, and such Derivative Works.
+
+  b) Subject to the terms of this Agreement, each Contributor hereby
+  grants Recipient a non-exclusive, worldwide, royalty-free patent
+  license under Licensed Patents to make, use, sell, offer to sell,
+  import and otherwise transfer the Contribution of such Contributor,
+  if any, in Source Code or other form. This patent license shall
+  apply to the combination of the Contribution and the Program if, at
+  the time the Contribution is added by the Contributor, such addition
+  of the Contribution causes such combination to be covered by the
+  Licensed Patents. The patent license shall not apply to any other
+  combinations which include the Contribution. No hardware per se is
+  licensed hereunder.
+
+  c) Recipient understands that although each Contributor grants the
+  licenses to its Contributions set forth herein, no assurances are
+  provided by any Contributor that the Program does not infringe the
+  patent or other intellectual property rights of any other entity.
+  Each Contributor disclaims any liability to Recipient for claims
+  brought by any other entity based on infringement of intellectual
+  property rights or otherwise. As a condition to exercising the
+  rights and licenses granted hereunder, each Recipient hereby
+  assumes sole responsibility to secure any other intellectual
+  property rights needed, if any. For example, if a third party
+  patent license is required to allow Recipient to Distribute the
+  Program, it is Recipient's responsibility to acquire that license
+  before distributing the Program.
+
+  d) Each Contributor represents that to its knowledge it has
+  sufficient copyright rights in its Contribution, if any, to grant
+  the copyright license set forth in this Agreement.
+
+  e) Notwithstanding the terms of any Secondary License, no
+  Contributor makes additional grants to any Recipient (other than
+  those set forth in this Agreement) as a result of such Recipient's
+  receipt of the Program under the terms of a Secondary License
+  (if permitted under the terms of Section 3).
+
+3. REQUIREMENTS
+
+3.1 If a Contributor Distributes the Program in any form, then:
+
+  a) the Program must also be made available as Source Code, in
+  accordance with section 3.2, and the Contributor must accompany
+  the Program with a statement that the Source Code for the Program
+  is available under this Agreement, and informs Recipients how to
+  obtain it in a reasonable manner on or through a medium customarily
+  used for software exchange; and
+
+  b) the Contributor may Distribute the Program under a license
+  different than this Agreement, provided that such license:
+     i) effectively disclaims on behalf of all other Contributors all
+     warranties and conditions, express and implied, including
+     warranties or conditions of title and non-infringement, and
+     implied warranties or conditions of merchantability and fitness
+     for a particular purpose;
+
+     ii) effectively excludes on behalf of all other Contributors all
+     liability for damages, including direct, indirect, special,
+     incidental and consequential damages, such as lost profits;
+
+     iii) does not attempt to limit or alter the recipients' rights
+     in the Source Code under section 3.2; and
+
+     iv) requires any subsequent distribution of the Program by any
+     party to be under a license that satisfies the requirements
+     of this section 3.
+
+3.2 When the Program is Distributed as Source Code:
+
+  a) it must be made available under this Agreement, or if the
+  Program (i) is combined with other material in a separate file or
+  files made available under a Secondary License, and (ii) the initial
+  Contributor attached to the Source Code the notice described in
+  Exhibit A of this Agreement, then the Program may be made available
+  under the terms of such Secondary Licenses, and
+
+  b) a copy of this Agreement must be included with each copy of
+  the Program.
+
+3.3 Contributors may not remove or alter any copyright, patent,
+trademark, attribution notices, disclaimers of warranty, or limitations
+of liability ("notices") contained within the Program from any copy of
+the Program which they Distribute, provided that Contributors may add
+their own appropriate notices.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities
+with respect to end users, business partners and the like. While this
+license is intended to facilitate the commercial use of the Program,
+the Contributor who includes the Program in a commercial product
+offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes
+the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every
+other Contributor ("Indemnified Contributor") against any losses,
+damages and costs (collectively "Losses") arising from claims, lawsuits
+and other legal actions brought by a third party against the Indemnified
+Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program
+in a commercial product offering. The obligations in this section do not
+apply to any claims or Losses relating to any actual or alleged
+intellectual property infringement. In order to qualify, an Indemnified
+Contributor must: a) promptly notify the Commercial Contributor in
+writing of such claim, and b) allow the Commercial Contributor to control,
+and cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may
+participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those performance
+claims and warranties, and if a court requires any other Contributor to
+pay any damages as a result, the Commercial Contributor must pay
+those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
+BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
+TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
+PURPOSE. Each Recipient is solely responsible for determining the
+appropriateness of using and distributing the Program and assumes all
+risks associated with its exercise of rights under this Agreement,
+including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs
+or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
+SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further
+action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other software
+or hardware) infringes such Recipient's patent(s), then such Recipient's
+rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of
+time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use
+and distribution of the Program as soon as reasonably practicable.
+However, Recipient's obligations under this Agreement and any licenses
+granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement,
+but in order to avoid inconsistency the Agreement is copyrighted and
+may only be modified in the following manner. The Agreement Steward
+reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement
+Steward has the right to modify this Agreement. The Eclipse Foundation
+is the initial Agreement Steward. The Eclipse Foundation may assign the
+responsibility to serve as the Agreement Steward to a suitable separate
+entity. Each new version of the Agreement will be given a distinguishing
+version number. The Program (including Contributions) may always be
+Distributed subject to the version of the Agreement under which it was
+received. In addition, after a new version of the Agreement is published,
+Contributor may elect to Distribute the Program (including its
+Contributions) under the new version.
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+receives no rights or licenses to the intellectual property of any
+Contributor under this Agreement, whether expressly, by implication,
+estoppel or otherwise. All rights in the Program not expressly granted
+under this Agreement are reserved. Nothing in this Agreement is intended
+to be enforceable by any entity that is not a Contributor or Recipient.
+No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+
+"This Source Code may also be made available under the following
+Secondary Licenses when the conditions for such availability set forth
+in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+version(s), and exceptions or additional permissions here}."
+
+  Simply including a copy of this Agreement, including this Exhibit A
+  is not sufficient to license the Source Code under Secondary Licenses.
+
+  If it is not possible or desirable to put the notice in a particular
+  file, then You may include the notice in a location (such as a LICENSE
+  file in a relevant directory) where a recipient would be likely to
+  look for such a notice.
+
+  You may add additional accurate notices of copyright ownership.
diff --git a/NOTICE.txt b/NOTICE.txt
new file mode 100644
index 0000000..c43053d
--- /dev/null
+++ b/NOTICE.txt
@@ -0,0 +1,381 @@
+# Notices for Eclipse MDM|BL
+
+This content is produced and maintained by the Eclipse MDM|BL project,
+it is a project of the openMDM(R) Eclipse Working Group.
+
+* Project home: https://projects.eclipse.org/projects/technology.mdmbl
+
+## Trademarks
+
+Eclipse MDM|BL, MDM|BL and Eclipse openMDM(R) logo are registered trademarks
+of the Eclipse Foundation.
+
+## Copyright
+
+All content is the property of the following respective authors or their employers.
+For more information regarding authorship of content, please consult the listed
+source code repository logs.
+
+Copyright (c) 2016-2019 Gigatronik Ingolstadt GmbH
+Copyright (c) 2016-2020 Peak Solution GmbH
+Copyright (c) 2017-2020 science + computing AG Tuebingen (ATOS SE)
+Copyright (c) 2017-2018 Canoo Engineering AG
+Copyright (c) 2017-2020 Angelika Wittek
+Copyright (c) 2018-2019 Elektronische Fahrwerksysteme GMBH
+Copyright (c) 2018-2020 Karakun AG
+Copyright (c) 2018-2020 Alexander Nehmer
+
+## Declared Project Licenses
+
+This program and the accompanying materials are made available under the
+terms of the Eclipse Public License v. 2.0 which is available at
+http://www.eclipse.org/legal/epl-2.0.
+
+SPDX-License-Identifier: EPL-2.0
+
+## Source Code
+
+The project maintains the following source code repositories:
+
+org.eclipse.mdm.api.base.git	    - The openMDM(R) API.
+org.eclipse.mdm.api.default.git	    - Extension of the openMDM(R) API containing default elements.
+org.eclipse.mdm.api.odsadapter.git	- ODS implementation of persistence adapter.
+org.eclipse.mdm.nucleus.git	        - Core building blocks for the openMDM Business Logic and Web Frontend.
+
+## Third-party Content
+
+The Content includes items that have been sourced from third parties as set out below.
+If you did not receive this Content directly from the Eclipse Foundation, the following
+is provided for informational purposes only, and you should look to
+the Redistributor's license for terms and conditions of use.
+
+antlr4-4.5.3.jar(2.5.3)
+    * License: New BSD license
+
+aopalliance-repackaged-2.5.0-b05.jar (2.5.0-b05)
+    * License: CDDL
+
+commons-codec-1.2.jar (1.2)
+    * License: Apache License, 2.0
+
+commons-httpclient-3.1.jar  (3.1)
+    * License: Apache License, 2.0
+
+commons-lang3-3.8.1.jar (3.8.1)
+    * License: Apache License, 2.0
+
+commons-text-1.6.jar (1.6)
+    * License: Apache License, 2.0
+
+gson-2.7.jar (2.7)
+    * License: Apache License, 2.0
+
+Google Guava Version: 25.0-jre  (25.0)
+    * License: Apache License, 2.0
+
+Gradle Wrapper (4.10.2)
+    * License: Apache License, 2.0
+
+hk2-api-2.5.0-b05.jar (2.5.0-b05)
+    * License: CDDL-1.1
+
+hk2-locator-2.5.0-b05.jar(2.5.0-b05)
+    * License: CDDL
+
+hk2-utils-2.5.0-b05.jar (2.5.0-b05)
+    * License: CDDL
+
+jackson-annotations-2.9.0.jar  (2.9.0)
+    * License: Apache License, 2.0
+
+jackson-core-2.9.2.jar(2.9.2)
+    * License: Apache License, 2.0
+
+jackson-databind-2.9.2.jar  (2.9.2)
+    * License: Apache License, 2.0
+
+jackson-jaxrs-base-2.9.2.jar(2.9.2)
+    * License: Apache License, 2.0
+
+jackson-jaxrs-json-provider-2.9.2.jar(2.9.2)
+    * License: Apache License, 2.0
+
+jackson-module-jaxb-annotations-2.9.2.jar  (2.9.2)
+    * License: Apache License, 2.0
+
+javassist-3.20.0-GA.jar  (2.20.0-GA)
+    * License: Apache 2.0
+
+jcl-over-slf4j-1.7.25.jar(1.7.25)
+    * License: MIT License
+    * Licence Path: https://www.slf4j.org/license.html
+    * Project URL:  https://www.slf4j.org
+    * Source URL:   https://github.com/qos-ch/slf4j
+
+jersey-client-2.23.2.jar (2.23.2)
+     * License: CDDL
+
+jersey-common-2.23.2.jar (2.23.2)
+    * License: CDDL
+
+jersey-container-servlet-2.23.2.jar  (2.23.2)
+    * License: CDDL
+
+jersey-container-servlet-core-2.23.3.jar(2.23.2)
+    * License: CDDL
+
+jersey-guava-2.23.2.jar  (2.23.2)
+    * License: Apache License, 2.0
+
+jersey-media-jaxb-2.23.2.jar(2.23.2)
+    * License: CDDL
+
+jersey-media-sse-2.23.2.jar (2.23.2)
+    * License: CDDL
+
+jersey-media-multipart-2.23.2.jar (2.23.2)
+    * License: CDDL
+
+jersey-server-2.23.2.jar (2.23.2)
+    * License: Apache-2.0
+
+log4j-over-slf4j-1.7.25.jar (1.7.25)
+    * License: Apache-2.0
+
+logback-classic-1.2.3.jar(1.2.3)
+    * License: Eclipse Public License 1.0
+
+logback-core-1.2.3.jar(1.2.3)
+    * License: Eclipse Public License 1.0
+
+mimepull-1.9.6.jar (1.9.4)
+    * License: CDDL
+
+openatfx-0.7.4.jar (0.7.4)
+    * License: Apache-2.0
+
+osgi-resource-locator-1.0.1.jar(1.0.1)
+    * License: CDDL
+
+protobuf-java-3.2.0.jar (3.2.0)
+    * License: New BSD license
+
+protobuf-java-util-3.2.0.jar  (3.2.0)
+    * License: New BSD license
+
+swagger-annotations-2.0.8.jar (2.0.8)
+    * License: Apache-2.0
+
+swagger-ui-3.23.0.jar (3.23.0)
+    * License: Apache-2.0
+
+slf4j-api-1.7.25.jar  (1.7.25)
+    * License: MIT license
+    * Licence Path: https://www.slf4j.org/license.html
+    * Project URL: https://github.com/qos-ch/slf4j
+    * Source URL:  https://github.com/qos-ch/slf4j/releases/tag/v_1.7.25
+
+stax2-api-3.1.4.jar (3.1.4)
+    * License: BSD-2-Clause
+
+validation-api-1.1.0.Final.jar (1.1.0.Final)
+  * License: Apache License, 2.0
+
+vavr-0.9.1-sources.jar (0.9.1)
+  * License: Apache License, 2.0
+
+vavr-match-0.9.1.jar (0.9.1)
+  * License: Apache License, 2.0
+
+woodstox-core-asl-4.4.1.jar (4.4.1)
+  * License: Apache License, 2.0
+
+
+FFAMFAMFAM Silk Icon, Version 1.3
+    * License: Creative Commons Attribution 3.0 License
+    * Licence Path: https://creativecommons.org/licenses/by/3.0/
+    * Project: http://www.famfamfam.com/lab/icons/silk/
+    * Source:  http://www.famfamfam.com/lab/icons/silk/
+
+@angular/animations:7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io/api/animations
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/cdk:7.1.1
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io/api
+    * Source:  https://github.com/angular/angular/releases/tag/7.1.1
+
+
+@angular/common@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io/api/common
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4r
+
+@angular/compiler@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/core@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/forms@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/http@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/platform-browser-dynamic@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/platform-browser@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/router@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+bootstrap@4.1.3
+    * License: MIT
+    * Licence Path: https://github.com/twbs/bootstrap/raw/master/LICENSE
+    * Project: https://getbootstrap.com/
+    * Source:  https://github.com/twbs/bootstrap
+
+class-transformer@0.1.6
+    * License: MIT
+    * Licence Path: https://github.com/typestack/class-transformer/blob/master/LICENSE
+    * Project: https://github.com/pleerock/class-transformer
+    * Source:  https://github.com/pleerock/class-transformer
+
+core-js@2.6.0
+    * License: MIT
+    * Licence Path: https://github.com/zloirock/core-js/raw/master/LICENSE
+    * Project: https://github.com/zloirock/core-js
+    * Source:  https://github.com/zloirock/core-js/releases/tag/v2.6.0
+
+file-saver@1.3.3
+    * License: MIT
+    * Licence Path: https://github.com/eligrey/FileSaver.js/raw/master/LICENSE.md
+    * Project: https://github.com/eligrey/FileSaver.js
+    * Source:  https://github.com/eligrey/FileSaver.js
+
+font-awesome@4.7.0
+    * License: MIT
+    * Licence Path: https://github.com/FortAwesome/Font-Awesome/blob/master/LICENSE.txt
+    * Project: https://fontawesome.com/
+    * Source:  https://github.com/FortAwesome/Font-Awesome
+
+ng2-split-pane@1.3.1
+    * License: MIT
+    * Licence Path: https://github.com/wannabegeek/ng2-split-pane/raw/master/LICENSE
+    * Project: https://github.com/wannabegeek/ng2-split-pane
+    * Source:  https://github.com/wannabegeek/ng2-split-pane
+
+ngx-bootstrap@3.1.2
+    * License: MIT
+    * Licence Path: https://github.com/valor-software/ngx-bootstrap/blob/v3.1.2/LICENSE
+    * Project: https://valor-software.com/ngx-bootstrap
+    * Source:  https://github.com/valor-software/ngx-bootstrap/tree/v3.1.2
+
+@ngx-translate/core@11.0.1
+    * License: MIT 
+    * Licence Path:   https://github.com/ngx-translate/core/blob/v11.0.1/LICENSE  
+    * Project URL:    http://www.ngx-translate.com/
+    * Source URL:     https://github.com/ngx-translate/core
+
+@ngx-translate/http-loader@4.0.0
+    * License: MIT 
+    * Licence Path:   https://github.com/ngx-translate/http-loader/blob/v4.0.0/LICENSE  
+    * Project URL:    http://www.ngx-translate.com/
+    * Source URL:     https://github.com/ngx-translate/http-loader/tree/v4.0.0
+
+primeicons:1.0.0
+    * License: MIT
+    * Licence Path: https://github.com/primefaces/primeicons/blob/1.0.0/LICENSE
+    * Project: https://www.primefaces.org/primeng
+    * Source:  https://github.com/primefaces/primeicons/tree/1.0.0
+
+primeng@7.0.1
+    * License: MIT
+    * Licence Path: https://github.com/primefaces/primeng/blob/7.0.1/LICENSE.md
+    * Project: https://www.primefaces.org/primeng
+    * Source:  https://github.com/primefaces/primeng/tree/7.0.1
+
+rxjs@6.3.3
+    * License: Apache-2.0
+    * Project: https://rxjs-dev.firebaseapp.com/
+    * Source:  https://github.com/ReactiveX/rxjs/tree/6.3.3
+
+rxjs-compat:6.3.3
+    * License: Apache-2.0
+    * Project: https://rxjs-dev.firebaseapp.com/
+    * Source:  https://github.com/ReactiveX/rxjs/tree/6.3.3/compat
+
+tslib@1.9.0
+    * License: Apache-2.0
+    * Project: https://github.com/Microsoft/tslib
+    * Source:  https://github.com/Microsoft/tslib/tree/1.9.0
+
+zone.js@0.8.26
+    * License: MIT
+    * Licence Path: https://github.com/angular/zone.js/raw/master/LICENSE
+    * Project: https://github.com/angular
+    * Source:  https://github.com/angular/zone.js/releases/tag/v0.8.26
+
+OMG Event Service Specification (1.2)
+
+* License: LicenseRef - Object-Management-Group-License
+* Project: https://www.omg.org/spec/EVNT/1.2/
+* Source: https://www.omg.org/spec/EVNT/1.2/pdf
+
+OMG Notification Service Specification (1.1)
+
+* License: LicenseRef - Object-Management-Group-License
+* Project: https://www.omg.org/spec/NOT/
+* Source: https://www.omg.org/spec/NOT/1.1/PDF
+
+ods530.idl
+Date: Hoehenkirchen, 06/01/2016
+"The ASAM Board of Directors releases the IDL files for use under the EPL to the Eclipse IWG openMDM.
+This is valid for all versions of ASAM ODS 5.3.x.
+This permission is valid under the conditions of Eclipse will not modify the file."
+
+AvalonEvent.idl, CorbaFileServer.idl
+Date: 08/15/2016
+"Herewith, we release the generated Client-Source-Code generated from our CORBA IDLs, namely
+* CORBANotification Service (generated from „AvalonEvent.idl”)
+* CORBAFileServer (generated from „CorbaFileServer.idl“),
+Under the Eclipse Public License (EPL). This agreement does not include the „AvalonEvent.idl“ and
+„CorbaFileServer.idl“ itself, which remain protected property of HighQSoft. "
+
+## Cryptography
+
+Content may contain encryption software. The country in which you are currently
+may have restrictions on the import, possession, and use, and/or re-export to
+another country, of encryption software. BEFORE using any encryption software,
+please check the country's laws, regulations and policies concerning the import,
+possession, or use, and re-export of encryption software, to see if this is
+permitted.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..773f612
--- /dev/null
+++ b/README.md
@@ -0,0 +1,604 @@
+## Documentation
+
+Before you start, please take a look at the [Getting Started Guide](https://git.eclipse.org/c/mdmbl/org.eclipse.mdm.nucleus.git/plain/doc/GettingStarted_mdmbl.pdf) which can also be found in the [Download area](https://projects.eclipse.org/projects/technology.mdmbl/downloads) of the project and in the `docs` directory relative to this README.md
+
+## Minimum requirements
+* JDK 1.8.0_45
+
+> This project uses a Gradle Wrapper
+
+## Build dependencies
+Before you can build and deploy the application, you have to checkout the following repositories in the same root directory as the current project
+* `git clone https://git.eclipse.org/r/mdmbl/org.eclipse.mdm.api.base.git`
+* `git clone https://git.eclipse.org/r/mdmbl/org.eclipse.mdm.api.default.git`
+* `git clone https://git.eclipse.org/r/mdmbl/org.eclipse.mdm.api.odsadapter.git`
+
+You **MUST** have the following directory structure afterwards
+
+```
+.
+├── org.eclipse.mdm.api.base
+├── org.eclipse.mdm.api.default
+├── org.eclipse.mdm.api.odsadapter
+└── org.eclipse.mdm.nucleus
+```
+
+Now you can use `gradlew install` in the `org.eclipse.mdm.nucleus` directory, but you should configure the application first.
+
+## Build, deploy and configure the application
+
+1. Edit the `org.eclipse.mdm.nucleus/org.eclipse.mdm.application/src/main/webapp/src/app/core/property.service.ts` and set the `data_host` variable according to your deployment  
+ (This property will be used to create the REST URLs to communicate with the backend).
+ 
+2. Build the application with `gradlew install`.  
+ The command `gradlew install` executed at `org.eclipse.mdm.nucleus` creates a ZIP archive named `build/distributions/openMDM_application-${version}.zip` at `org.eclipse.mdm.nucleus/build/distributions`  
+ The ZIP archive contains the backend `org.eclipse.mdm.nucleus-${version}.war` and the configuration files in the `configuration` directory
+  
+3. Check that the database for the preference service is running, otherwise start it with `asadmin start-database` as described in the Getting Started Guide.
+
+4. Deploy the WAR file `org.eclipse.mdm.nucleuss-${version}.war` on your application server. Make sure to deploy the WAR file with application name `org.eclipse.mdm.nucleus`, otherwise the `LoginRealmModule` is not able to lookup the `ConnectorService` EJB.  
+ Additionally in the following examples, we assume that the context root is also set to `org.eclipse.mdm.nucleus`.  
+ When deploying from command line you can use `asadmin deploy --name org.eclipse.mdm.nucleus /path/to/org.eclipse.mdm.nucleus-${version}.war`
+ 
+5. Copy the content of the extracted `configuration` folder to `GLASSFISH_ROOT/glassfish/domains/domain1/config`.  
+ There is also a system property `org.eclipse.mdm.configPath`, which can be used to redefine the location of the folder to another location.
+ 
+6. Edit the `org.eclipse.mdm.connector/service.xml` file to configure the data sources
+
+7. Configure a `LoginModule` with name `MDMRealm` (See section **Configure LoginModule** for details)
+
+8. Restart the application server
+
+9. Visit the main page of the client to make sure everything works fine.  
+ The main page of the client should be available under `http://SERVER:PORT/{APPLICATIONROOT}` (eg: http://localhost:8080/org.eclipse.mdm.nucleus)
+
+## Configure LoginModule
+
+MDM 5 backend implements the delegated approach to roles and permissions, wherein the data sources (ASAM ODS server, PAK cloud)
+themselves can implement their own security scheme (which they already have) and then delegates the appropriate
+user data to the backends.
+
+In the case of ASAM ODS servers this is done using a technical user and the `for_user` attribute on the established
+connection, so it is a form of 'login on behalf'.
+
+In the case of PAK Cloud this is done by passing the user name along with a http header `X-Remote-User` which is then
+used by PAK Cloud to establish the users roles (from an internal database or an external authentication provider).
+
+Before the user is 'logged in on behalf' he is authenticated by a `LoginModule` within the Glassfish application server.
+There are different implementations available (e.g. LDAP, Certificate, JDBC, ...). To keep this guide simple, we will setup
+a `FileRealm`, which stores the user information in a flat file.
+
+The following command will create a `FileRealm` with name `MDMRealm` that stores the users in a file called `mdm-keyfile`
+```
+asadmin create-auth-realm --classname com.sun.enterprise.security.auth.realm.file.FileRealm --property file=${com.sun.aas.instanceRoot}/config/mdm-keyfile:jaas-context=MDMRealm:assign-groups=Guest MDMRealm
+```
+
+To be able to login you need to explicitly add users to the `MDMRealm`. 
+Here we add the user `MdmUser`
+```
+asadmin create-file-user --authrealmname MDMRealm --groups Admin:DescriptiveDataAuthor:Guest MdmUser
+```
+
+Currently three roles are supported by openMDM, adapt the users according to your needs
+* **Admin**: Administrator role allowed to access the Administration section in the web application
+* **DescriptiveDataAuthor**: Users allowed to edit context data
+* **Guest**: Default application users allowed to browse and read measurement data
+
+Keep in mind that the roles are mainly used to enable/disable certain actions in the web application.
+Authorization in openMDM is still done via the delegation approach, e.g. the adapters are responsible for handling authorization on data.
+
+Next you need to add the following snippet to your `login.conf` in `${com.sun.aas.instanceRoot}/config/`
+```
+MDMRealm {
+  com.sun.enterprise.security.auth.login.FileLoginModule required;
+};
+```
+
+As a last step you have to provide the credentials of the technical user in adapter configuration in `service.xml`. 
+For the ODS adapter you have to specify the parameters `user` and `password` of the technical user. For example
+```
+<service entityManagerFactoryClass="org.eclipse.mdm.api.odsadapter.ODSContextFactory">
+    ...
+	<param name="user">sa</param>
+	<param name="password">sa</param>
+	...
+</service>
+```
+
+Make sure to restart Glassfish afterwards.
+
+### Remove MDMLoginRealm from previous versions
+
+In versions 5.0.0M1, 0.10 and older the configuration of a custom login realm was necessary. If you configured your Glassfish server instance
+for one of these versions, you can remove the old configuration options and artifact, as they are no longer needed.
+
+#### Steps to delete the old configuration and artifacts
+
+* Delete the JAR file `org.eclipse.mdm.realm.login.glassfish-VERSION.jar` from `GLASSFISH_ROOT/glassfish/domains/domain1/lib`  
+* Open the Glassfish login **configuration file** at `GLASSFISH_ROOT/glassfish/domains/domain1/config/login.conf`
+* Delete custom MDM realm module entry to this config file  
+  ```   
+  MDMLoginRealm {
+    org.eclipse.mdm.realm.login.glassfish.LoginRealmModule required;
+  };
+  ```
+* Remove the `MDMLoginRealm` by executing `asadmin delete-auth-realm MDMLoginRealm` or by deleting it in the Glassfish web console  
+
+## Configure logging
+
+MDM 5 uses SLF4J and Logback for logging. The default configuration file can be found at `org.eclipse.mdm.nucleus/src/main/resources/logback.xml`.
+It logs INFO level messages to `mdm5.log` in the **logs** folder of the Glassfish domain.
+If you want to customize logging, you can either edit the file within the WAR file or preferably provide your own logging configuration via system parameter in the JVM settings in Glassfish `-Dlogback.configurationFile=/path/to/config.xml`
+
+## Available REST URLs
+
+Please use the generated OpenAPI Specification, which is generated at build time.
+The OpenAPI Specification is available in `org.eclipse.mdm.nucleus/build/openapi/openapi.json` or at runtime at `http://{SERVER}:{PORT}/{APPLICATIONROOT}/openapi.json`.
+Furthermore a Swagger UI is available at `http://{SERVER}:{PORT}/{APPLICATIONROOT}/swagger.html`
+
+### Structure of the URLs
+
+* `SERVER` the hostname of the Glassfish server
+* `PORT` the port of the Glassfish server
+* `APPLICATIONROOT` is the context root under which MDM is deployed
+* `SOURCENAME` is the source name the underlying data source
+
+#### Environment
+
+* `http://{SERVER}:{PORT}/{APPLICATIONROOT}/mdm/environments`
+* `http://{SERVER}:{PORT}/{APPLICATIONROOT}/mdm/environments/{SOURCENAME}`
+* `http://{SERVER}:{PORT}/{APPLICATIONROOT}/mdm/environments/{SOURCENAME}/localizations`
+
+#### Business objects
+
+The following parameters are recurring throughout the different URLs
+
+* `ID` the identifier of the business object
+
+* `CONTEXTTYPE` is one of
+  * `unitundertest`
+  * `testsequence`
+  * `testequipment`
+  
+* `DATATYPE` is one of
+  * `STRING`
+  * `STRING_SEQUENCE`
+  * `DATE, DATE_SEQUENCE`
+  * `BOOLEAN`
+  * `BOOLEAN_SEQUENCE`
+  * `BYTE`
+  * `BYTE_SEQUENCE`
+  * `SHORT`
+  * `SHORT_SEQUENCE`
+  * `INTEGER`
+  * `INTEGER_SEQUENCE`
+  * `LONG`
+  * `LONG_SEQUENCE`
+  * `FLOAT`
+  * `FLOAT_SEQUENCE`
+  * `DOUBLE`
+  * `DOUBLE_SEQUENCE`
+  * `BYTE_STREAM`
+  * `BYTE_STREAM_SEQUENCE`
+  * `FLOAT_COMPLEX`
+  * `FLOAT_COMPLEX_SEQUENCE`
+  * `DOUBLE_COMPLEX`
+  * `DOUBLE_COMPLEX_SEQUENCE`
+  * `FILE_LINK`
+  * `FILE_LINK_SEQUENCE`
+   
+* `FILTERSTRING` is a String defining a filter. For example `Test.Name eq "t*"` filters for all tests which names begin with `t`.  
+ Strings should be quoted with `"`. `"` characters within strings have to be escaped with a backslash. For backward compatibility `'` is also allowed to quote strings, but may be blocked in URLs in some environments, thus `"` should be preferred.
+ 
+* `REMOTE_PATH` is the remote path of a file link as it is returned in the attributes of type `FILE_LINK` and `FILE_LINK_SEQUENCE`  
+ Make sure to properly URL escape the value of the remote path. Especially slashes have to be escaped with `%2F`.
+ 
+##### Examples
+
+Most of the Business objects support the following calls (examples for **TestStep**)
+
+* `http://{SERVER}:{PORT}/{APPLICATIONROOT}/mdm/environments/{SOURCENAME}/teststeps?filter={FILTERSTRING}`
+* `http://{SERVER}:{PORT}/{APPLICATIONROOT}/mdm/environments/{SOURCENAME}/teststeps/searchattributes`
+* `http://{SERVER}:{PORT}/{APPLICATIONROOT}/mdm/environments/{SOURCENAME}/teststeps/localizations`
+* `http://{SERVER}:{PORT}/{APPLICATIONROOT}/mdm/environments/{SOURCENAME}/teststeps/{ID}`
+* `http://{SERVER}:{PORT}/{APPLICATIONROOT}/mdm/environments/{SOURCENAME}/teststeps/{ID}/contexts/{CONTEXTTYPE}`
+
+For **TestStep** and **Measurement** it is also possible to receive files
+
+* `http://{SERVER}:{PORT}/{APPLICATIONROOT}/mdm/environments/{SOURCENAME}/teststeps/{ID}/files/{REMOTE_PATH}`
+
+
+#### Query endpoint
+
+* `http://{SERVER}:{PORT}/{APPLICATIONROOT}/mdm/query`   
+ Example: `curl -POST -H "Content-Type: application/json" -d '{"resultType": "test", "columns": ["Test.Name", "TestStep.Name"], "filters": { "sourceName": "SOURCENAME", "filter": "Test.Id gt 1", "searchString": ""}}'http://sa:sa@localhost:8080/org.eclipse.mdm.nucleus/mdm/query`
+ 
+* `http://{SERVER}:{PORT}/{APPLICATIONROOT}/mdm/suggestions`  
+ Example: `curl -POST -H "Content-Type: application/json" -d '{"sourceNames": ["SOURCENAME"], "type": "Test", "attrName": "Name"}' http://sa:sa@localhost:8080/org.eclipse.mdm.nucleus/mdm/suggestions`
+
+#### ATFX Import
+
+POST: `http://{SERVER}:{PORT}/{APPLICATIONROOT}/mdm/environments/{SOURCENAME}/import`
+
+Imports an ATFX file into the specified environment. The ATFX file must conform to the MDM 5 data model.
+
+> TODO Templates
+
+Three content types are accepted
+* `application/xml`: The ATFX file is sent in the body of the POST request.
+
+* `multipart/form-data`: The ATFX file and its binary files are provided as multipart form data. The field name represents the original file name and the field value the contents of the file.  
+ The ATFX file is detected by its file extension 'atfx' or the media type 'application/xml'. Only one ATFX file can be sent at a time.
+
+* `application/zip`: The ATFX file and its component files are provided as a zip file. The ATFX file is detected by its file extension 'atfx'. Only one ATFX file can be included in the zip file.
+
+The POST request returns a JSON-Object with the following properties
+* state: Status of the import. Either `OK` or `FAILED`.
+* message: Error message in case the import fails.
+* stacktrace: Stacktrace in case the import fails.
+
+The returned HTTP status is either `200`, if the imported succeeded or `400`, if the import failed. 
+
+
+#### ATFX Export
+
+POST: `http://{SERVER}:{PORT}/{APPLICATIONROOT}/mdm/export`
+
+Accepts a shopping basket XML file and exports the contained elements into an ATFX file. 
+Currently it is only supported to export objects from one environment. 
+
+Returned content types in response:
+* `application/xml`: The response body contains the exported ATFX file
+
+* `application/zip`: The response contains a zip file with the exported ATFX file and accompanying component files.
+
+### Example: File download
+
+* Login  
+ `curl -XPOST --cookie-jar cookie -H "Content-Type: application/x-www-form-urlencoded" -d j_username=sa -d j_password=sa http://localhost:8080/org.eclipse.mdm.nucleus/j_security_check`
+
+* Request a test and extract the remotePath from the first file reference  
+ `FILE_PATH="$(curl --cookie cookie -s http://localhost:8080/org.eclipse.mdm.nucleus/mdm/environments/MDMNVH/teststeps/10 | jq -r '.data[0].attributes[] | select (.name | contains("MDMLinks")) | .value[0].remotePath')"`
+
+* Urlescape remotePath if necessary  
+ `FILE_PATH="$(echo $FILE_PATH | python -c 'import sys,urllib;print urllib.quote(sys.stdin.read().strip(), "")')"`
+
+* Request the file content  
+ `curl --cookie cookie http://localhost:8080/org.eclipse.mdm.nucleus/mdm/environments/MDMNVH/teststeps/10/files/$FILE_PATH`
+
+
+## Preference Service
+Preference service stores its data to a relational database. The database connection is looked up by JNDI and the JNDI name and other database relevant parameters are specified in `src/main/resources/META-INF/persistence.xml`. The default JNDI name for the JDBC resource is set to `jdbc/openMDM`. This JDBC resource and its dependent JDBC Connection Pool has to be created and configured within the Glassfish web administration console or through `asadmin` command line tool.
+
+Furthermore the schema has to be created in the configured database. Therefore database DDL scripts are available for PostgreSQL and Apache Derby databases in the folder `schema/org.eclipse.mdm.preferences` of the distribution.
+Other databases supported by EclipseLink may also work, but is up to the user to adapt the DDL scripts.
+
+### Examples
+* Receive values  
+ `curl -GET -H "Content-Type: application/json" http://localhost:8080/org.eclipse.mdm.nucleus/mdm/preferences?scope=SYSTEM&key=ignoredAttributes`
+ 
+* Set value  
+ `curl -PUT -H "Content-Type: application/json" -d '{"scope": "SYSTEM", "key": "ignoredAttributes", "value": "[\"*.MimeType\"]"}' http://localhost:8080/org.eclipse.mdm.nucleus/mdm/preferences`
+ 
+* Delete entry  
+ `curl -DELETE http://localhost:8080/org.eclipse.mdm.nucleus/mdm/preferences/ID`
+
+
+## FreeTextSearch
+### Configuration
+1. Start ElasticSearch. ElasticSearch can be downloaded at https://www.elastic.co/products/elasticsearch. The minimum supported Elasticsearch version is 7. For testing purpose, it can be simply started by executing `bin/run.sh`
+
+2. Edit the configuration (`global.properties`) to fit your environment. You need an ODS Server which supports Notifications. All fields have to be there, but can be empty. However certain ODS Servers ignore some parameters (e.g. PeakODS ignores pollingIntervall since it pushes notifications).
+
+3. Start the application. At the first run it will index the database. This might take a while. After that MDM registers itself as `NotificationListener` and adapts all changes one-by-one.
+
+### Run on dedicated server
+
+The Indexing is completely independent from the searching. So the Indexer can be freely deployed at any other machine.
+In the simplest case, the same steps as in Configuration have to be done.
+The application can then be deployed on any other machine. All components besides the FreeTextIndexer and its dependencies are not user. Those can be left out, if desired.
+
+## Connector and service.xml
+
+The `service.xml` contains all information necessary for the Connector-Service to connect to the available datasources/adapter instances.
+Since this information includes secret information like passwords, it is possible to provide lookups, which gives you the possibility to specify tokens as references to properties defined elsewhere.
+
+There are different lookups available
+* `sys`: Looks up variables defined as system properties
+* `env`: Looks up variables defined as environment variables
+
+Example:
+
+`<param name="password">${env:odsPassword}</param>`
+
+
+## Known issues
+
+If you run into `java.lang.ClassNotFoundException: javax.xml.parsers.ParserConfigurationException not found by org.eclipse.persistence.moxy` this is a bug described in https://bugs.eclipse.org/bugs/show_bug.cgi?id=463169 and https://java.net/jira/browse/GLASSFISH-21440.
+This solution is to replace `GLASSFISH_HOME/glassfish/modules/org.eclipse.persistence.moxy.jar` with this file http://central.maven.org/maven2/org/eclipse/persistence/org.eclipse.persistence.moxy/2.6.1/org.eclipse.persistence.moxy-2.6.1.jar
+
+If you run into `java.lang.ClassNotFoundException: com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector not found by com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider` you have to download http://central.maven.org/maven2/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.5.1/jackson-module-jaxb-annotations-2.5.1.jar and put in the `GLASSFISH_HOME/glassfish/domains/domain1/autodeploy/bundles` folder
+
+## Client preferences
+
+The applications preferences are managed in the administration section. This section can be accessed via the **Administration** button in the main navigation bar or via http://localhost:8080/org.eclipse.mdm.nucleus/administration
+
+A preference is a pair of a unique key and a value. The key is composed of a prefix defining the purpose of the preference followed by an arbitrary but unique identifier string.
+It is recommended to choose the identifier the same as the preferences `name` field, in case there is one. The value holds the preference's data in a JSON string.
+
+The following preferences, sorted by their scope, can be set
+
+* User
+  - Basket
+  - View
+  - Filter
+
+* System
+  - Node provider
+  - Shopping basket file extensions
+
+* Source
+  - Ignored attributes
+
+However, it might be necessary to reload the application before a newly defined preference is available or any changes on an existing preferences are applied.
+
+**WARNING**: Corrupted preferences can result in malfunctions of the application.
+
+### User scope
+
+A user scoped preference's area of effect is limited to the logged in user. All user scoped preferences can also be set in dialogs in the main application.
+
+1. Basket  
+ Basket preferences keys must start with the prefix `basket.nodes.`  
+ This preference has the fields `items` and `name` and holds all the information for saved baskets.  
+   * The field `items` holds an array of MDMItems, providing the relevant information of a related node, i.e. `source`, `type` and `id`.  
+   * The field `name` defines the name, which is provided in the main application to load this basket.
+   
+   Example  
+   ```
+   {
+     "items": [{"source":"MDMNVH","type":"Test","id":38}],
+     "name": "basketExample"
+   }
+   ```
+
+2. View  
+  View preferences keys must start with the prefix `tableview.view.`  
+  This preference has the fields `columns` and `name` and holds the layout information for the tables displaying the search results and the basket nodes.  
+    * The field `columns` holds an array of ViewColumn objects. A ViewColumn is an Object with the fields `type`, `name`, `sortOrder` and an optional field `style`.  
+    * The field `type` can be set to all available MDM data types, i.e. `Project`, `Pool`, `Test`, `TestStep`, `Measurement`, `ChannelGroup`, `Channel`.  
+    * The field `name` field specifies an attribute, which must be an searchable attribute for the given `type`.  
+    * The field `sortOrder` can be set by the number `1` (ascending), `-1` (descending), or null (unsorted). Only one column of the array can have a non-null value `sortOrder` at a time. The ViewColumn's style element can hold any CSS-style object. However, it is supposed to contain only the columns width. The column order in the array is identically with the appearance in the table.  
+    * The field `name` defines the name, which is provided in the main application to load this view.    
+
+    Example
+    ```
+    {
+     "columns": [
+       {
+         "type": "Test",
+         "name": "Id",
+         "style": {"width":"75px"},
+         "sortOrder": null
+       }
+     ],
+     "name": "viewExample" 
+    }
+    ```
+
+3. Filter  
+  Filter preferences keys must start with the prefix `filter.nodes.`  
+  This preference has the fields `conditions`, `name`, `environments`, `resultType` and `fulltextQuery`.  
+  It provides the information for the attribute based / advanced search.  
+    * The field `conditions` holds an array of Condition objects. A Condition specifies a search condition for attribute based search. It consists of the fields `type`, `name`, `operator`, `value` and `valueType`. The Condition's `type` can be set to all available MDM data types, i.e. `Project`, `Pool`, `Test`, `TestStep`, `Measurement`, `ChannelGroup`, `Channel`.
+      * The Condition's `name` field specifies an attribute, which must be an searchable attribute for the given `type`.  
+      * The Condition's `operator` field, holds on of the following numbers: `0`(=), `1`(<), `2`(>), `3`(like).
+      * The Condition's `value` field holds a string array containing input for the attribute based search.
+      * The Condition's `resultType` field should match the type corresponding to the attribute specified in the `'name` filed, e.g. `string`, `date` or `long`.
+    * The field `name` defines the name, which is provided in the main application to load this filter.
+    * The field `environments` holds an string array with the names of the sources that should be included in the search.
+    * The field `resultType` can be set to all available MDM data types (see above). Only nodes of this type will be included in the search.
+    * The field `fulltextQuery` holds a string containing full text search input.  
+  
+    Example
+    ```
+    { "conditions": [
+        {
+          "type": "Test",
+          "attribute": "Name",
+          "operator": 0,
+          "value": [],
+          "valueType":"string"
+        }
+      ],
+      "name": "filterExample",
+      "environments": ["sourceName"],
+      "resultType": "Test",
+      "fulltextQuery": ""
+    }
+    ```
+
+
+### System scope
+
+System scoped preference are applied globally.
+
+* Node provider  
+  The navigation tree structure can be defined via a node provider. The default node provider is set in `org.eclipse.mdm.nucleus/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/defaultnodeprovider.json`.  
+  It is recommended not to change the default node provider. Instead new node providers can be added as preferences.  
+  Their keys must start with the prefix `nodeprovider.`. Once a custom node provider is supplied it can be selected in the dropdown menu in the navigation tree header.  
+  
+  * Structure
+
+     * First layer/root nodes  
+      In the node provider each layer of nodes of the navigation tree is defined in a nested object.  
+      The first layer of nodes, is always the environment level. This is necessary due to the provided endpoints.  
+      The first layer consists of the fields `name`, `type`, and `children`.  
+       * The field `name` sets the name, which is displayed in the application to select the corresponding node provider.  
+       * The field `type` defines the data type of the nodes, which is always `Environments` on the first layer.
+         
+       The next layer of nodes are defined via the field `children`.
+
+     * Children  
+      A child object consists of the fields `type`, `query`, and `children`.  
+       * The field `type` sets the data type of this layer of nodes. It can be set to all available MDM data types, i.e. `Project`, `Pool`, `Test`, `TestStep`, `Measurement`, `ChannelGroup`, `Channel`.  
+       * The filed `query` holds the URL to load this layer of nodes. The first part of the query for each child object should be `/` plus the type of the layer in small letters followed by an `s`.  
+         For a nested child objected a filter is attached to the query in the form: `?filter=<parentType>.Id eq {<parentType>.Id}`. The placeholder <parentType> has to be replaced by the actual parent type (set in the field `type` in the parent child or root layer, see example below).  
+         At runtime the curly braces will be replaced by the Id of the parent node. Further child objects, and thereby more sublayers, can be nested via the field `children`.
+           
+       The children field does not need to be set for the last layer of nodes.
+  
+  * Examples
+
+    * Minimal node provider  
+      ```
+      { "name": "My name to display", "type": "Environment"}  
+      ```    
+
+    * Node provider with two child layers  
+      ```
+       {
+          "name": "My name to display",
+          "type": "Environment",
+          "children": {
+            "type": "Project",
+            "query": "/projects",
+            "children": {
+              "type": "Pool",
+              "query": "/pools?filter=Project.Id eq {Project.Id}"
+            }
+          }
+        }
+      ```
+
+* Shopping basket file extensions
+
+  When downloading the contents of a shopping basket, a file with extension `mdm` is generated.  
+  Additional file extensions can be adding by poviding a preference with key `shoppingbasket.fileextensions`.  
+  Here you can define a list of objects with attributes `label` and `extension`.  
+  For example: `[ { "label": "MyTool", "extension": "mdm-mytool" }, { "label": "OtherTool", "extension": "mdm-other" } ]`.  
+  If `MyTool` has a file handler registered for the extension `mdm-mytool`, the application will be launched if the browser automatically opens the file after download.
+
+### Source scope
+
+Source scoped preferences are applied at any user, but are limited to the specified source. The source can be specified in the **Add Preference** or **Edit Preference** dialog.
+
+* Ignored Attributes  
+  The ignore attributes preference must have the exact key `ignoredAttributes`. An identifier must not be added.  
+  The preference specifies all attributes, which are supposed to be ignored in the detail view. The preference is a simple JSON string holding a list of attributes in the form {"<type>.<AttributeName>"}.  
+  The placeholders <type> and <AttributeName> have to be replaced by the actual type and name of the attribute which should be ignored, respectively.
+
+  Example:  
+  `["*.MimeType", "TestStep.Sortindex"]`
+
+## Create a module for the Web application
+
+Any MDM module needs to be a valid [Angular module](https://angular.io/guide/architecture-modules) aka NgModule.  
+A NgModule consists of the module definition, components, services and other files that are in the scope of the module. 
+The component can hold any content. The component must be declared in a module definition to grant accessibility in the rest of the application.  
+All related files should be stored in a new module subfolder in the app folder `org.eclipse.mdm.nucleus/org.eclipse.mdm.application/src/main/webapp/src/app` (eg. `org.eclipse.mdm.nucleus/org.eclipse.mdm.application/src/main/webapp/src/app/new-module`)
+
+### Example module
+
+An example for a new module can be found at `org.eclipse.mdm.nucleus/org.eclipse.mdm.application/src/main/webapp/src/app/example-module`
+
+### Creating a MDM module
+
+1. Create a new folder eg. `org.eclipse.mdm.nucleus/org.eclipse.mdm.application/src/main/webapp/src/app/new-module`
+
+2. Create an Angular component (eg. `mdm-new.component.ts`) inside that new folder   
+   ```typescript
+    import {Component} from '@angular/core';
+    @Component({template: '<h1>Example Module</h1>'})
+    export class MDMNewComponent {}
+   ```
+   A component is defined in a Typescript file with the `@Component()` decorator.  
+   Any HTML content can be provided here in an inline template or via a link to an external HTML resource. Thereafter the component itself, which is supposed to hold any logic needed, is defined and exported.  
+   For more details see https://angular.io/guide/architecture-components.
+   
+3. Create a minimal NgModule  (eg. `mdm-new.module.ts` ) inside that new folder    
+   ```typescript
+    import { NgModule } from '@angular/core';
+    import { MDMCoreModule } from '../core/mdm-core.module';
+    import { MDMNewComponent } from './mdm-new.component';
+    @NgModule({imports: [MDMCoreModule], declarations: [MDMNewComponent]})
+    export class MDMNewModule {}
+   ```
+   The `imports` array holds all modules from the application needed in this MDM module. It should always hold the `MDMCoreModule`, which provides basic functionalities.  
+   On the other hand a NgModule grants accessibility of components of this module in other directives (including the HTML template) within the module (in a `declaration` array) or even in other parts of the application (in an `export` array).  
+   For more details see https://angular.io/guide/architecture-modules.
+
+### Embedding a module (no lazy loading)
+
+To embed this new module in MDM you have to register this module in the `MDMModules` Module.
+* Import the new module at `org.eclipse.mdm.nucleus/org.eclipse.mdm.application/src/main/webapp/src/app/modules/mdm-modules.module.ts`
+
+* Register a route to the new module at `org.eclipse.mdm.nucleus/org.eclipse.mdm.application/src/main/webapp/src/app/modules/mdm-modules-routing.module.ts`  
+  ```
+  { path: 'new', component: MDMNewComponent}
+  ```
+
+ * Furthermore you have to define a display name for the registered route in the `links` array in `org.eclipse.mdm.nucleus/org.eclipse.mdm.application/src/main/webapp/src/app/modules/mdm-modules.component.ts`    
+  ```
+  { path: 'new', name: 'New Module' }
+  ```
+
+For further information refer to the Angular documentation:
+* https://angular.io/guide/architecture-components
+* https://angular.io/guide/architecture-modules
+* https://angular.io/guide/router
+
+
+### Lazy loading and routing module
+
+For lazy-loading (recommended in case there is a high number of modules) embedding of the module is slightly different.
+```
+  { path: 'example', loadChildren: '../example-module/mdm-example.module#MDMExampleModule'}
+```
+
+Additionally, a NgModule, the so called routing module (eg. `mdm-new-routing.module.ts`), is needed to provide the routes to this modules components.
+```typescript
+  const moduleRoutes: Routes = [{ path: '', component: MDMExampleComponent }];
+  @NgModule({imports: [RouterModule.forChild(moduleRoutes)], exports: [RouterModule]})
+  export class MDMExampleRoutingModule {}
+```   
+
+### Filerelease module
+The filerelease module is stored in the following folder `org.eclipse.mdm.nucleus/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease`
+
+It can be embedded as any other module described above.  
+```
+{ path: 'filerelease', component: MDMFilereleaseComponent }
+```
+
+```
+{ name: 'MDM Files', path: 'filerelease'}
+```
+
+### Adding a module to the detail view (eg. filerelease module)
+To make the filerelease module available in the detail view it needs to be imported in the corresponding MDM Module `org.eclipse.mdm.nucleus/org.eclipse.mdm.application/src/main/webapp/src/app/details/mdm-detail.module.ts`  
+Thereafter, the `MDMFilereleaseCreateComponent` can be imported to the `org.eclipse.mdm.nucleus/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail-view/mdm-detail-view.component.ts`.  
+Then the following has to be added to the `org.eclipse.mdm.nucleus/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail-view/mdm-detail-view.component.html` file:
+```
+  <mdm-filerelease-create [node]=selectedNode [disabled]="isReleasable()"></mdm-filerelease-create>
+```
+
+It should be located right after the add to basket button:
+```
+<div class="btn-group pull-right" role="group">
+  <button type="button" class="btn btn-default" (click)="add2Basket()" [disabled]="isShopable()">In den Warenkorb</button>
+  <mdm-filerelease-create [node]=selectedNode [disabled]="isReleasable()"></mdm-filerelease-create>
+</div>
+```
+
+## Copyright and License
+Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+
+ See the NOTICE file(s) distributed with this work for additional  
+ information regarding copyright ownership.
+
+ This program and the accompanying materials are made available under the  
+ terms of the Eclipse Public License v. 2.0 which is available at  
+ http://www.eclipse.org/legal/epl-2.0.  
+
+ SPDX-License-Identifier: EPL-2.0
\ No newline at end of file
diff --git a/WebContent/META-INF/MANIFEST.MF b/WebContent/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5e94951
--- /dev/null
+++ b/WebContent/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path: 
+
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..49d7fe9
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,204 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+plugins {
+	id "org.sonarqube" version "2.5"
+	id "io.swagger.core.v3.swagger-gradle-plugin" version "2.0.8"
+}
+
+group = 'org.eclipse.mdm'
+version = '5.2.0M1'
+
+description = 'mdm nucleus'
+apply plugin: 'war'
+apply plugin: 'maven'
+apply plugin: 'eclipse'
+apply plugin: 'jacoco'
+apply plugin: 'org.sonarqube'
+
+sourceCompatibility = 1.8
+
+repositories {
+	mavenLocal()
+	mavenCentral()
+}
+
+subprojects {
+	configurations.all {
+		resolutionStrategy.dependencySubstitution {
+			substitute module("de.rechner:openatfx") with project(":org.eclipse.mdm.openatfx")
+		}
+	}
+	
+	group = rootProject.group
+	version = rootProject.version
+	
+	apply plugin: 'eclipse'
+	apply plugin: 'java'
+	apply plugin: 'maven'
+	apply plugin: 'jacoco'
+
+	sourceCompatibility = 1.8
+
+	repositories {
+		mavenLocal()
+		mavenCentral()
+	}
+
+	dependencies {
+		compileOnly 'org.slf4j:slf4j-api:1.7.25'
+		compileOnly 'javax:javaee-api:7.0'
+		compile 'io.swagger.core.v3:swagger-annotations:2.0.8'
+		runtime 'ch.qos.logback:logback-classic:1.2.3'
+
+		testCompile 'junit:junit:4.12'
+		testCompile 'org.assertj:assertj-core:3.6.2'
+		testCompile 'org.mockito:mockito-core:2.13.0'
+		testCompile 'javax:javaee-api:7.0'
+	}
+	
+	task sourcesJar(type: Jar, dependsOn: classes) {
+		classifier = 'sources'
+		from sourceSets.main.allSource
+	}
+	
+	artifacts {
+		archives sourcesJar
+	}
+}
+
+clean {
+	dependsOn gradle.includedBuilds*.task(':clean')
+}
+
+configurations.runtime {
+	resolutionStrategy.dependencySubstitution {
+		substitute module("de.rechner:openatfx") with project(":org.eclipse.mdm.openatfx")
+	}
+	exclude group: 'com.sun.mail', module: 'javax.mail'
+	exclude group: 'javax.ws.rs', module: 'javax.ws.rs-api'
+	exclude group: 'javax.activation', module: 'activation'
+	exclude group: 'javax.annotation', module: 'javax.annotation-api'
+	exclude group: 'javax.inject', module: 'javax.inject'
+	exclude group: 'org.glassfish.hk2.external', module: 'javax.inject'
+	exclude group: 'commons-logging', module: 'commons-logging'
+	// exclude guava dependencies
+	exclude group: 'com.google.code.findbugs', module: 'jsr305'
+	exclude group: 'com.google.errorprone', module: 'error_prone_annotations'
+	exclude group: 'com.google.j2objc', module: 'j2objc-annotations'
+	exclude group: 'org.codehaus.mojo', module: 'animal-sniffer-annotations'
+	exclude group: 'org.checkerframework', module: 'checker-compat-qual'
+}
+
+dependencies {
+	runtime project(':org.eclipse.mdm.application')
+	runtime project(':org.eclipse.mdm.apicopy')
+
+	compile 'org.webjars:swagger-ui:3.23.0'
+	// adapters
+	runtime project(':org.eclipse.mdm.api.atfxadapter')
+	runtime "org.eclipse.mdm:org.eclipse.mdm.api.odsadapter:${version}"
+}
+
+
+resolve {
+	outputPath = file('build/openapi')
+	outputFileName = 'openapi'
+	outputFormat = 'JSONANDYAML'
+	prettyPrint = 'TRUE'
+	classpath = sourceSets.main.runtimeClasspath
+	resourcePackages = ['org.eclipse.mdm']
+	openApiFile = file('src/main/openapi/openApiFile.json')
+}
+
+tasks.war.dependsOn("resolve")
+
+task collectConfiguration() {
+	doLast {
+		subprojects.each { subproject ->
+			copy {
+				from "${project.projectDir}/${subproject.name}/src/main/configuration/"
+				into "${project.projectDir}/build/tmp/openmdm_application/configuration/${subproject.name}"
+			}
+		}
+	}
+}
+
+task copySchema(dependsOn: ':org.eclipse.mdm.preferences:generateSchema') {
+	doLast {
+		copy {
+			from "${project.projectDir}/org.eclipse.mdm.preferences/build/generated-schema/"
+			into "${project.projectDir}/build/tmp/openmdm_application/schema/org.eclipse.mdm.preferences"
+		}
+		
+		copy {
+			from "${project.projectDir}/org.eclipse.mdm.preferences/src/main/sql/"
+			into "${project.projectDir}/build/tmp/openmdm_application/schema/update"
+		}
+	}
+}
+
+task distribute(type: Zip) {
+	archiveName = "openMDM_application-${version}.zip"
+
+	from "${project.projectDir}/LICENSE.txt"
+	from "${project.projectDir}/NOTICE.txt"
+	from "${project.projectDir}/CONTRIBUTING.md"
+	from "${project.projectDir}/readme.md"
+	from "${project.projectDir}/release_notes.md"
+
+	from "${project.projectDir}/doc/GettingStarted_mdmbl.pdf"
+	from "${project.projectDir}/doc/Installation Guide for the openMDM5 Application.pdf"
+
+	from "${project.projectDir}/build/tmp/openmdm_application"
+	from "${project.projectDir}/build/libs/"
+}
+distribute.dependsOn(collectConfiguration)
+distribute.dependsOn(copySchema)
+
+war {
+	from ('org.eclipse.mdm.application/build/node/dist') {
+		include('**/*')
+	}
+	from ("${project.projectDir}/build/openapi/") {
+		include('**/*')
+		filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [VERSION: version])
+	}
+	from ("${project.projectDir}/src/main/webapp/") {
+		include('**/*')
+	}
+
+
+	webXml = file('org.eclipse.mdm.application/src/main/webconfig/web.xml')
+	webInf  {from 'org.eclipse.mdm.application/src/main/webconfig/glassfish-web.xml'}
+
+	metaInf { from 'NOTICE.txt' }
+	metaInf { from 'LICENSE.txt' }
+	metaInf { from 'CONTRIBUTING.md' }
+}
+
+war.finalizedBy(distribute)
+
+jacoco {
+	toolVersion = "0.7.6.201602180812"
+	reportsDir = file("${project.buildDir}/jacoco/test.exec")
+}
+
+sonarqube {
+	properties {
+		property "sonar.java.coveragePlugin", "jacoco"
+		property "sonar.jacoco.reportPaths", "${project.buildDir}/jacoco/test.exec"
+	}
+}
+tasks["sonarqube"].dependsOn "org.eclipse.mdm.application:map_tslint"
\ No newline at end of file
diff --git a/doc/GettingStarted_mdmbl.pdf b/doc/GettingStarted_mdmbl.pdf
new file mode 100644
index 0000000..e0bc613
--- /dev/null
+++ b/doc/GettingStarted_mdmbl.pdf
Binary files differ
diff --git a/eclipse_formatter.xml b/eclipse_formatter.xml
new file mode 100644
index 0000000..eb0b582
--- /dev/null
+++ b/eclipse_formatter.xml
@@ -0,0 +1,347 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<profiles version="16">
+<profile kind="CodeFormatterProfile" name="openMDM 5 Formatter (Eclipse built-in 2019-3)" version="16">
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="common_lines"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_logical_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="common_lines"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="common_lines"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration" value="common_lines"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.align_with_spaces" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="common_lines"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_logical_operator" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line" value="one_line_never"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="80"/>
+<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_method_body_on_one_line" value="one_line_never"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line" value="one_line_never"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line" value="one_line_never"/>
+<setting id="org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line" value="one_line_never"/>
+<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" value="common_lines"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_additive_operator" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_relational_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line" value="one_line_never"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_before_shift_operator" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_loops" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_relational_operator" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" value="common_lines"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_additive_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_module_statements" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line" value="one_line_never"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_additive_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_shift_operator" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" value="2147483647"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>
+<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" value="common_lines"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_code_block_on_one_line" value="one_line_never"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" value="common_lines"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line" value="one_line_never"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_logical_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_before_relational_operator" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_tag_description" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_string_concatenation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_before_logical_operator" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_shift_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" value="common_lines"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_shift_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line" value="one_line_never"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_before_additive_operator" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="tab"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_relational_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_before_string_concatenation" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="120"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
+</profile>
+</profiles>
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..7a3265e
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..b82e006
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-bin.zip
diff --git a/gradlew b/gradlew
new file mode 100755
index 0000000..cccdd3d
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$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=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+    echo "$*"
+}
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# 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
+    ;;
+  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" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Escape application args
+save () {
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+    echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+  cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..e95643d
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,84 @@
+@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 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=
+
+@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 init
+
+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 init
+
+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
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+: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 %CMD_LINE_ARGS%
+
+: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/org.eclipse.mdm.api.atfxadapter/.gitignore b/org.eclipse.mdm.api.atfxadapter/.gitignore
new file mode 100644
index 0000000..49678ad
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/.gitignore
@@ -0,0 +1,17 @@
+# eclipse
+.classpath
+.project
+.settings/
+bin/
+
+# gradle
+.gradle
+build/
+
+# intellij
+.idea/
+out/
+*.ipr
+*.iml
+*.iws
+/bin/
diff --git a/org.eclipse.mdm.api.atfxadapter/build.gradle b/org.eclipse.mdm.api.atfxadapter/build.gradle
new file mode 100644
index 0000000..95dbed0
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/build.gradle
@@ -0,0 +1,41 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+description = 'MDM API - ATFXAdapter'
+
+configurations.all {
+	/* openatfx has a dependency on ODS corba interface classses, but we 
+	 * use the classes generated by org.eclipse.mdm.api.odsadapter and 
+	 * thus exclude the dependency from openatfx
+	 */ 
+	exclude group: 'org.asam', module: 'ods'
+}
+
+dependencies {
+	compile 'org.slf4j:slf4j-api:1.7.25'
+	compile project(':org.eclipse.mdm.openatfx')
+
+	// MDM5 API
+	compile "org.eclipse.mdm:org.eclipse.mdm.api.odsadapter:${version}"
+
+	testRuntime 'ch.qos.logback:logback-classic:1.2.3'
+	testCompile 'junit:junit:4.12'
+	testCompile 'org.assertj:assertj-core:3.6.2'
+	testCompile 'org.mockito:mockito-core:2.13.0'
+}
+
+jar {
+	metaInf { from 'NOTICE.txt' }
+	metaInf { from 'LICENSE.txt' }
+}
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXContext.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXContext.java
new file mode 100644
index 0000000..13f000a
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXContext.java
@@ -0,0 +1,190 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.api.atfxadapter;
+
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+import org.asam.ods.AoException;
+import org.asam.ods.AoSession;
+import org.asam.ods.ErrorCode;
+import org.asam.ods.SeverityFlag;
+import org.eclipse.mdm.api.atfxadapter.filetransfer.ATFXFileService;
+import org.eclipse.mdm.api.base.adapter.ModelManager;
+import org.eclipse.mdm.api.base.file.FileService;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.base.query.QueryService;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.EntityFactory;
+import org.eclipse.mdm.api.dflt.model.ExtSystemAttribute;
+import org.eclipse.mdm.api.odsadapter.query.ODSEntityFactory;
+import org.eclipse.mdm.api.odsadapter.query.ODSModelManager;
+import org.eclipse.mdm.api.odsadapter.query.ODSQueryService;
+import org.omg.CORBA.ORB;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * ATFXContext encapsulates a session to the ASAM ODS CORBA API of openATFX
+ *
+ */
+public class ATFXContext implements ApplicationContext {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(ATFXContext.class);
+
+	private Map<String, String> parameters;
+
+	private ODSModelManager modelManager;
+	private ATFXEntityManager entityManager;
+
+	private File atfxFile;
+
+	private static final String INCLUDE_CATALOG = "includeCatalog";
+
+	/**
+	 * Creates a new ATFX application context.
+	 * 
+	 * @param orb               the CORBA ORB used to connect to the ODS API
+	 * @param aoSession
+	 * @param parameters
+	 * @param atfxFile
+	 * @param extSystemAttrList
+	 * @throws AoException
+	 */
+	public ATFXContext(ORB orb, AoSession aoSession, Map<String, String> parameters,
+			List<ExtSystemAttribute> extSystemAttrList, File atfxFile) throws AoException {
+		this.parameters = parameters;
+
+		boolean includeCatalog = Boolean.valueOf(parameters.getOrDefault(INCLUDE_CATALOG, "false"));
+
+		this.modelManager = new ODSModelManager(orb, aoSession, new ATFXEntityConfigRepositoryLoader(includeCatalog));
+		this.entityManager = new ATFXEntityManager(this, extSystemAttrList);
+		this.atfxFile = atfxFile;
+
+		LOGGER.debug("ATFXContext initialized.");
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public Optional<EntityManager> getEntityManager() {
+		return Optional.of(entityManager);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public Optional<ModelManager> getModelManager() {
+		return Optional.of(modelManager);
+	}
+
+	@Override
+	public Optional<EntityFactory> getEntityFactory() {
+		try {
+			return Optional.of(new ODSEntityFactory(modelManager, entityManager.loadLoggedOnUser()));
+		} catch (DataAccessException e) {
+			throw new IllegalStateException("Unable to load instance of the logged in user.");
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public Optional<QueryService> getQueryService() {
+		return Optional.of(new ODSQueryService(modelManager));
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public Map<String, String> getParameters() {
+		return parameters;
+	}
+
+	/**
+	 * @returns the string "atfx"
+	 */
+	@Override
+	public String getAdapterType() {
+		return "atfx";
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void close() {
+		try {
+			modelManager.close();
+		} catch (AoException e) {
+			LOGGER.warn("Unable to close sesssion due to: " + e.reason, e);
+		}
+	}
+
+	/**
+	 * Returns the {@link ATFXModelManager} used for this context.
+	 * 
+	 * @return the {@link ATFXModelManager}
+	 */
+	public ODSModelManager getODSModelManager() {
+		return modelManager;
+	}
+
+	/**
+	 * Returns the {@link AoSession} used for this context.
+	 * 
+	 * @return {@link AoSession} used for this context.
+	 */
+	public AoSession getAoSession() {
+		return modelManager.getAoSession();
+	}
+
+	/**
+	 * Returns the ORB used for this context
+	 * 
+	 * @return ORB used for this context
+	 */
+	public ORB getORB() {
+		return modelManager.getORB();
+	}
+
+	/**
+	 * Returns a new {@link ATFXContext} with a new ODS co-session.
+	 *
+	 * @return The created {@code ODSContext} is returned.
+	 * @throws AoException Thrown on errors.
+	 */
+	public ATFXContext newContext() throws AoException {
+		throw new AoException(ErrorCode.AO_NOT_IMPLEMENTED, SeverityFlag.ERROR, 0,
+				"Method 'createCoSession' not implemented in openATFX");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.mdm.api.base.BaseApplicationContext#getFileService()
+	 */
+	@Override
+	public Optional<FileService> getFileService() {
+		return Optional.of(new ATFXFileService(this.atfxFile.getParentFile()));
+	}
+
+}
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXContextFactory.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXContextFactory.java
new file mode 100644
index 0000000..0187ba0
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXContextFactory.java
@@ -0,0 +1,98 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.api.atfxadapter;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.asam.ods.AoException;
+import org.asam.ods.AoSession;
+import org.eclipse.mdm.api.base.ConnectionException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.ApplicationContextFactory;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.ExtSystem;
+import org.eclipse.mdm.api.dflt.model.ExtSystemAttribute;
+import org.omg.CORBA.ORB;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Strings;
+
+import de.rechner.openatfx.AoServiceFactory;
+
+public class ATFXContextFactory implements ApplicationContextFactory {
+
+	private static final Logger LOG = LoggerFactory.getLogger(ATFXContextFactory.class);
+
+	private static final ORB orb = ORB.init(new String[] {}, System.getProperties());
+
+	private static final String PROP_EXTSYSTEMNAME = "extSystemName";
+
+	@Override
+	public ApplicationContext connect(Map<String, String> parameters) throws ConnectionException {
+		return initApplicationContext(parameters, null);
+	}
+
+	public ApplicationContext connect(Map<String, String> parameters, ApplicationContext targetContext)
+			throws ConnectionException {
+
+		EntityManager entityManager = targetContext.getEntityManager()
+				.orElseThrow(() -> new ConnectionException("TargetEntity manager not present!"));
+
+		String extSystemName = parameters.get(PROP_EXTSYSTEMNAME);
+
+		List<ExtSystemAttribute> extSystemAttrList = new ArrayList<>();
+
+		if (!Strings.isNullOrEmpty(extSystemName)) {
+			List<ExtSystem> extSystemList = entityManager.loadAll(ExtSystem.class, extSystemName);
+
+			if (extSystemList == null || extSystemList.isEmpty()) {
+				LOG.warn("External system with name '{}' nor found! Try to import file without mapping!",
+						extSystemName);
+			} else if (extSystemList.size() > 1) {
+				throw new ConnectionException(
+						String.format("More than one external system with name '%s' found!", extSystemName));
+			} else {
+				extSystemAttrList = entityManager.loadChildren(extSystemList.get(0), ExtSystemAttribute.class);
+			}
+		}
+
+		return initApplicationContext(parameters, extSystemAttrList);
+	}
+
+	private ApplicationContext initApplicationContext(Map<String, String> parameters,
+			List<ExtSystemAttribute> extSystemAttrList) throws ConnectionException {
+		File atfxFile = new File(parameters.get("atfxfile"));
+
+		try {
+			AoSession aoSession;
+			if (atfxFile.exists() && Files.size(atfxFile.toPath()) > 0L) {
+				aoSession = AoServiceFactory.getInstance().newAoSession(orb, atfxFile);
+			} else {
+				throw new ConnectionException(
+						"Cannot open session on a not existing or empty ATFX file: " + atfxFile.getAbsolutePath());
+			}
+			return new ATFXContext(orb, aoSession, parameters, extSystemAttrList, atfxFile);
+		} catch (AoException e) {
+			throw new ConnectionException("Error " + e.reason, e);
+		} catch (IOException e) {
+			throw new ConnectionException("Error reading ATFX file " + atfxFile.getAbsolutePath(), e);
+		}
+	}
+}
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityConfigRepositoryLoader.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityConfigRepositoryLoader.java
new file mode 100644
index 0000000..341606e
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityConfigRepositoryLoader.java
@@ -0,0 +1,225 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.api.atfxadapter;
+
+import java.util.Locale;
+
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.Relation;
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.ContextComponent;
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextSensor;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.Parameter;
+import org.eclipse.mdm.api.base.model.ParameterSet;
+import org.eclipse.mdm.api.base.model.PhysicalDimension;
+import org.eclipse.mdm.api.base.model.Quantity;
+import org.eclipse.mdm.api.base.model.Sortable;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.model.Unit;
+import org.eclipse.mdm.api.dflt.model.CatalogAttribute;
+import org.eclipse.mdm.api.dflt.model.CatalogComponent;
+import org.eclipse.mdm.api.dflt.model.CatalogSensor;
+import org.eclipse.mdm.api.dflt.model.Pool;
+import org.eclipse.mdm.api.dflt.model.Project;
+import org.eclipse.mdm.api.odsadapter.lookup.config.DefaultEntityConfigRepositoryLoader;
+import org.eclipse.mdm.api.odsadapter.lookup.config.EntityConfig;
+import org.eclipse.mdm.api.odsadapter.lookup.config.EntityConfig.Key;
+import org.eclipse.mdm.api.odsadapter.lookup.config.EntityConfigRepository;
+import org.eclipse.mdm.api.odsadapter.lookup.config.EntityConfigRepositoryLoader;
+import org.eclipse.mdm.api.odsadapter.query.ODSEntityType;
+import org.eclipse.mdm.api.odsadapter.query.ODSModelManager;
+import org.eclipse.mdm.api.odsadapter.utils.ODSUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ATFXEntityConfigRepositoryLoader implements EntityConfigRepositoryLoader {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(DefaultEntityConfigRepositoryLoader.class);
+
+	EntityConfigRepository entityConfigRepository;
+
+	private final boolean includeCatalog;
+
+	public ATFXEntityConfigRepositoryLoader(boolean includeCatalog) {
+		this.includeCatalog = includeCatalog;
+	}
+
+	/**
+	 * Loads the {@link EntityConfig}s.
+	 * 
+	 * @return
+	 */
+	@Override
+	public EntityConfigRepository loadEntityConfigurations(ODSModelManager modelManager) {
+		LOGGER.debug("Loading entity configurations...");
+		long start = System.currentTimeMillis();
+
+		entityConfigRepository = new EntityConfigRepository();
+
+		// Environment | Project | Pool | PhysicalDimension | User | Measurement
+		// | ChannelGroup
+		entityConfigRepository.register(create(modelManager, new Key<>(Environment.class), "Environment", false));
+		entityConfigRepository.register(create(modelManager, new Key<>(Project.class), "Project", false));
+		entityConfigRepository.register(create(modelManager, new Key<>(Pool.class), "StructureLevel", true));
+		entityConfigRepository
+				.register(create(modelManager, new Key<>(PhysicalDimension.class), "PhysDimension", false));
+		entityConfigRepository.register(create(modelManager, new Key<>(Measurement.class), "MeaResult", false));
+		entityConfigRepository.register(create(modelManager, new Key<>(ChannelGroup.class), "SubMatrix", false));
+
+		// Unit
+		EntityConfig<Unit> unitConfig = create(modelManager, new Key<>(Unit.class), "Unit", false);
+		unitConfig.addMandatory(entityConfigRepository.findRoot(new Key<>(PhysicalDimension.class)));
+		entityConfigRepository.register(unitConfig);
+
+		// Quantity
+		EntityConfig<Quantity> quantityConfig = create(modelManager, new Key<>(Quantity.class), "Quantity", false);
+		quantityConfig.addMandatory(entityConfigRepository.findRoot(new Key<>(Unit.class)));
+		entityConfigRepository.register(quantityConfig);
+
+		// Channel
+		EntityConfig<Channel> channelConfig = create(modelManager, new Key<>(Channel.class), "MeaQuantity", false);
+		channelConfig.addMandatory(entityConfigRepository.findRoot(new Key<>(Unit.class)));
+		channelConfig.addMandatory(entityConfigRepository.findRoot(new Key<>(Quantity.class)));
+		entityConfigRepository.register(channelConfig);
+
+		// ParameterSet
+		EntityConfig<Parameter> parameterConfig = create(modelManager, new Key<>(Parameter.class), "ResultParameter",
+				true);
+		parameterConfig.addOptional(entityConfigRepository.findRoot(new Key<>(Unit.class)));
+		EntityConfig<ParameterSet> parameterSetConfig = create(modelManager, new Key<>(ParameterSet.class),
+				"ResultParameterSet", true);
+		parameterSetConfig.addChild(parameterConfig);
+		entityConfigRepository.register(parameterSetConfig);
+
+		if (includeCatalog) {
+			// CatalogComponents
+			registerCatalogComponent(modelManager, ContextType.UNITUNDERTEST);
+			registerCatalogComponent(modelManager, ContextType.TESTSEQUENCE);
+			registerCatalogComponent(modelManager, ContextType.TESTEQUIPMENT);
+		}
+
+		// TestStep
+		EntityConfig<TestStep> testStepConfig = create(modelManager, new Key<>(TestStep.class), "TestStep", true);
+		testStepConfig.setComparator(Sortable.COMPARATOR);
+		entityConfigRepository.register(testStepConfig);
+
+		// Test
+		EntityConfig<Test> testConfig = create(modelManager, new Key<>(Test.class), "Test", true);
+		entityConfigRepository.register(testConfig);
+
+		// ContextRoots
+		registerContextRoot(modelManager, ContextType.UNITUNDERTEST);
+		registerContextRoot(modelManager, ContextType.TESTSEQUENCE);
+		registerContextRoot(modelManager, ContextType.TESTEQUIPMENT);
+
+		LOGGER.debug("Entity configurations loaded in {} ms.", System.currentTimeMillis() - start);
+
+		return entityConfigRepository;
+	}
+
+	/**
+	 * Loads the {@link EntityConfig}s required for {@link ContextRoot} with given
+	 * {@link ContextType}.
+	 *
+	 * @param contextType The {@code ContextType}.
+	 */
+	private void registerContextRoot(ODSModelManager modelManager, ContextType contextType) {
+		EntityConfig<ContextRoot> contextRootConfig = create(modelManager, new Key<>(ContextRoot.class, contextType),
+				ODSUtils.CONTEXTTYPES.get(contextType), true);
+		for (Relation contextComponentRelation : contextRootConfig.getEntityType().getChildRelations()) {
+			EntityType contextComponentEntityType = contextComponentRelation.getTarget();
+			EntityConfig<ContextComponent> contextComponentConfig = create(modelManager,
+					new Key<>(ContextComponent.class, contextType), contextComponentEntityType.getName(), true);
+			contextRootConfig.addChild(contextComponentConfig);
+			if (contextType.isTestEquipment()) {
+				for (Relation contextSensorRelation : contextComponentEntityType.getChildRelations()) {
+					EntityType contextSensorEntityType = contextSensorRelation.getTarget();
+					EntityConfig<ContextSensor> contextSensorConfig = create(modelManager,
+							new Key<>(ContextSensor.class), contextSensorEntityType.getName(), true);
+					contextComponentConfig.addChild(contextSensorConfig);
+				}
+			}
+		}
+		entityConfigRepository.register(contextRootConfig);
+	}
+
+	/**
+	 * Creates a new {@link EntityConfig}.
+	 *
+	 * @param <T>        The entity type.
+	 * @param key        Used as identifier.
+	 * @param typeName   Name of the associated {@link EntityType}.
+	 * @param appendName Flag indicates whether to append the entity types base name
+	 *                   to the MIME type.
+	 * @return The created {@code EntityConfig} is returned.
+	 */
+	private <T extends Entity> EntityConfig<T> create(ODSModelManager modelManager, Key<T> key, String typeName,
+			boolean appendName) {
+		EntityConfig<T> entityConfig = new EntityConfig<>(key);
+		ODSEntityType entityType = (ODSEntityType) modelManager.getEntityType(typeName);
+		entityConfig.setEntityType(entityType);
+		entityConfig.setMimeType(buildDefaultMimeType(entityType, appendName));
+		return entityConfig;
+	}
+
+	/**
+	 * Loads the {@link EntityConfig}s required for {@link CatalogComponent} with
+	 * given {@link ContextType}.
+	 *
+	 * @param contextType The {@code ContextType}.
+	 */
+	private void registerCatalogComponent(ODSModelManager modelManager, ContextType contextType) {
+		String odsName = ODSUtils.CONTEXTTYPES.get(contextType);
+		EntityConfig<CatalogAttribute> catalogAttributeConfig = create(modelManager,
+				new Key<>(CatalogAttribute.class, contextType), "Cat" + odsName + "Attr", true);
+		catalogAttributeConfig.setComparator(Sortable.COMPARATOR);
+		EntityConfig<CatalogComponent> catalogComponentConfig = create(modelManager,
+				new Key<>(CatalogComponent.class, contextType), "Cat" + odsName + "Comp", true);
+		catalogComponentConfig.addChild(catalogAttributeConfig);
+		if (contextType.isTestEquipment()) {
+			EntityConfig<CatalogAttribute> catalogSensorAttributeConfig = create(modelManager,
+					new Key<>(CatalogAttribute.class), "CatSensorAttr", true);
+			EntityConfig<CatalogSensor> catalogSensorConfig = create(modelManager, new Key<>(CatalogSensor.class),
+					"CatSensor", true);
+			catalogSensorConfig.addChild(catalogSensorAttributeConfig);
+			catalogComponentConfig.addChild(catalogSensorConfig);
+		}
+		entityConfigRepository.register(catalogComponentConfig);
+	}
+
+	/**
+	 * Creates a default MIME type for given {@link EntityType}.
+	 *
+	 * @param entityType The {@code EntityType}.
+	 * @param appendName Flag indicates whether to append the entity types base name
+	 *                   to the MIME type.
+	 * @return The created MIME type {@code String} is returned.
+	 */
+	private String buildDefaultMimeType(ODSEntityType entityType, boolean appendName) {
+		StringBuilder sb = new StringBuilder();
+		sb.append("application/x-asam.");
+		sb.append(entityType.getBaseName().toLowerCase(Locale.ROOT));
+		if (appendName) {
+			sb.append('.').append(entityType.getName().toLowerCase(Locale.ROOT));
+		}
+		return sb.toString();
+	}
+}
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityManager.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityManager.java
new file mode 100644
index 0000000..06da146
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityManager.java
@@ -0,0 +1,591 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.api.atfxadapter;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import javax.management.ServiceNotFoundException;
+
+import org.asam.ods.AoException;
+import org.asam.ods.ApplicationStructure;
+import org.asam.ods.ElemId;
+import org.asam.ods.InstanceElement;
+import org.asam.ods.T_LONGLONG;
+import org.eclipse.mdm.api.atfxadapter.transaction.ATFXTransaction;
+import org.eclipse.mdm.api.base.ServiceNotProvidedException;
+import org.eclipse.mdm.api.base.Transaction;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.Relation;
+import org.eclipse.mdm.api.base.massdata.ReadRequest;
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.ContextComponent;
+import org.eclipse.mdm.api.base.model.ContextDescribable;
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.MeasuredValues;
+import org.eclipse.mdm.api.base.model.StatusAttachable;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.model.User;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.base.query.Filter;
+import org.eclipse.mdm.api.base.query.JoinType;
+import org.eclipse.mdm.api.base.query.Query;
+import org.eclipse.mdm.api.base.query.QueryService;
+import org.eclipse.mdm.api.base.query.Record;
+import org.eclipse.mdm.api.base.query.Result;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.Classification;
+import org.eclipse.mdm.api.dflt.model.EntityFactory;
+import org.eclipse.mdm.api.dflt.model.ExtSystemAttribute;
+import org.eclipse.mdm.api.dflt.model.MDMAttribute;
+import org.eclipse.mdm.api.dflt.model.Status;
+import org.eclipse.mdm.api.dflt.model.TemplateTest;
+import org.eclipse.mdm.api.dflt.model.TemplateTestStep;
+import org.eclipse.mdm.api.odsadapter.ODSContext;
+import org.eclipse.mdm.api.odsadapter.ODSContextFactory;
+import org.eclipse.mdm.api.odsadapter.ODSEntityManager;
+import org.eclipse.mdm.api.odsadapter.ReadRequestHandler;
+import org.eclipse.mdm.api.odsadapter.lookup.EntityLoader;
+import org.eclipse.mdm.api.odsadapter.lookup.config.EntityConfig.Key;
+import org.eclipse.mdm.api.odsadapter.query.ODSEntityFactory;
+import org.eclipse.mdm.api.odsadapter.query.ODSEntityType;
+import org.eclipse.mdm.api.odsadapter.query.ODSModelManager;
+import org.eclipse.mdm.api.odsadapter.utils.ODSConverter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Strings;
+
+/**
+ * ASAM ODS implementation of the {@link EntityManager} interface.
+ *
+ * @see ODSEntityManager
+ */
+public class ATFXEntityManager implements EntityManager {
+	private static final String AA_ID = "Id";
+
+	private static final String AE_TESTSTEP = "TestStep";
+
+	private static final String AE_TEST = "Test";
+
+	private static final String AE_STRUCTURE_LEVEL = "StructureLevel";
+
+	private static final String AE_PROJECT = "Project";
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(ATFXEntityManager.class);
+
+	private static final String PROP_ASAMPATH = "org.eclipse.mdm.api.atfxadapter.asampath";
+
+	private static final Pattern EXTSYSTEMCOMP_REGEX = Pattern.compile("\\[(.+)\\].*", Pattern.DOTALL);
+	private static final Pattern EXTSYSTEMATTR_REGEX = Pattern.compile("\\[.*\\](.+)", Pattern.DOTALL);
+
+	private final ATFXContext context;
+	private final ODSModelManager odsModelManager;
+	private final QueryService queryService;
+	private final EntityLoader entityLoader;
+	private final List<ExtSystemAttribute> extSystemAttrList;
+
+	private NameHelper nameHelper;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param context           The {@link ODSContext}.
+	 * @param extSystemAttrList
+	 * @throws ServiceNotFoundException
+	 */
+	public ATFXEntityManager(ATFXContext context, List<ExtSystemAttribute> extSystemAttrList) {
+		this.context = context;
+		this.odsModelManager = context.getODSModelManager();
+		this.queryService = context.getQueryService()
+				.orElseThrow(() -> new ServiceNotProvidedException(QueryService.class));
+		this.extSystemAttrList = extSystemAttrList;
+
+		entityLoader = new EntityLoader(odsModelManager, queryService);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public Environment loadEnvironment() throws DataAccessException {
+		List<Environment> environments = loadAll(Environment.class);
+		if (environments.size() != 1) {
+			throw new DataAccessException("Unable to laod the environment entity.");
+		}
+
+		return environments.get(0);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public Optional<User> loadLoggedOnUser() throws DataAccessException {
+		return Optional.empty();
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public <T extends Entity> List<T> load(Class<T> entityClass, Collection<String> instanceIDs)
+			throws DataAccessException {
+		return entityLoader.loadAll(new Key<>(entityClass), instanceIDs);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public <T extends Entity> List<T> load(Class<T> entityClass, ContextType contextType,
+			Collection<String> instanceIDs) throws DataAccessException {
+		return entityLoader.loadAll(new Key<>(entityClass, contextType), instanceIDs);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public <T extends Entity> Optional<T> loadParent(Entity child, Class<T> entityClass) throws DataAccessException {
+		EntityType parentEntityType = odsModelManager.getEntityType(entityClass);
+		EntityType childEntityType = odsModelManager.getEntityType(child);
+
+		Optional<String> instanceID = Optional.empty();
+
+		if (child instanceof Channel && ChannelGroup.class.equals(entityClass)) {
+			// this covers the gap between channel and channel group via local column
+			EntityType localColumnEntityType = odsModelManager.getEntityType("LocalColumn");
+
+			Relation relLocalColumnToChannel = localColumnEntityType.getRelation(childEntityType);
+			Relation relLocalColumnToChannelGroup = localColumnEntityType.getRelation(parentEntityType);
+
+			Optional<String> localColumnID = queryService.createQuery().select(localColumnEntityType.getIDAttribute())
+					.fetchSingleton(Filter.idOnly(relLocalColumnToChannel, child.getID()))
+					.map(r -> r.getRecord(localColumnEntityType)).map(r -> r.getID());
+
+			if (localColumnID.isPresent()) {
+				instanceID = queryService.createQuery().select(relLocalColumnToChannelGroup.getAttribute())
+						.fetchSingleton(Filter.idOnly(localColumnEntityType, localColumnID.get()))
+						.map(r -> r.getRecord(localColumnEntityType))
+						.map(r -> r.getID(relLocalColumnToChannelGroup).get());
+			}
+		} else {
+			Relation relationToParent = childEntityType.getRelation(parentEntityType);
+
+			Query query = queryService.createQuery().select(relationToParent.getAttribute());
+			instanceID = query.fetchSingleton(Filter.idOnly(childEntityType, child.getID()))
+					.map(r -> r.getRecord(childEntityType)).map(r -> r.getID(relationToParent).get());
+		}
+
+		if (instanceID.isPresent()) {
+			return Optional.of(entityLoader.load(new Key<>(entityClass), instanceID.get()));
+		}
+
+		return Optional.empty();
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public <T extends Entity> List<T> loadAll(Class<T> entityClass, String pattern) throws DataAccessException {
+		return entityLoader.loadAll(new Key<>(entityClass), pattern);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public <T extends StatusAttachable> List<T> loadAll(Class<T> entityClass, Status status, String pattern)
+			throws DataAccessException {
+		EntityType entityType = odsModelManager.getEntityType(entityClass);
+		EntityType classificationType = odsModelManager.getEntityType(Classification.class);
+		EntityType statusEntityType = odsModelManager.getEntityType(status.getTypeName());
+
+		List<String> instanceIDs = queryService.createQuery().join(entityType, classificationType)
+				.join(classificationType, statusEntityType).selectID(entityType)
+				.fetch(Filter.and().id(statusEntityType, status.getID()).name(entityType, pattern)).stream()
+				.map(r -> r.getRecord(entityType)).map(Record::getID).collect(Collectors.toList());
+
+		return entityLoader.loadAll(new Key<>(entityClass), instanceIDs);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public <T extends Entity> List<T> loadAll(Class<T> entityClass, ContextType contextType, String pattern)
+			throws DataAccessException {
+		return entityLoader.loadAll(new Key<>(entityClass, contextType), pattern);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public <T extends Entity> List<T> loadChildren(Entity parent, Class<T> entityClass, String pattern)
+			throws DataAccessException {
+		if (!Strings.isNullOrEmpty(pattern) && !"*".equals(pattern)) {
+			throw new DataAccessException("Pattern not supported by ATFXAdapter");
+		}
+		EntityType parentEntityType = odsModelManager.getEntityType(parent);
+		EntityType childEntityType = odsModelManager.getEntityType(entityClass);
+
+		List<String> instanceIDs;
+
+		if (parent instanceof ChannelGroup && Channel.class.equals(entityClass)) {
+			// this covers the gap between channel and channel group via local column
+			EntityType localColumnEntityType = odsModelManager.getEntityType("LocalColumn");
+
+			Relation relLocalColumnToChannel = localColumnEntityType.getRelation(childEntityType);
+			Relation relLocalColumnToChannelGroup = localColumnEntityType.getRelation(parentEntityType);
+
+			instanceIDs = queryService.createQuery().select(relLocalColumnToChannel.getAttribute())
+					.fetch(Filter.and().id(relLocalColumnToChannelGroup, parent.getID()).name(localColumnEntityType,
+							pattern))
+					.stream().map(r -> r.getRecord(localColumnEntityType))
+					.map(r -> r.getID(relLocalColumnToChannel).get()).collect(Collectors.toList());
+
+			return entityLoader.loadAll(new Key<>(entityClass), instanceIDs);
+		} else {
+			Relation relationToParent = childEntityType.getRelation(parentEntityType);
+
+			instanceIDs = queryService.createQuery().selectID(childEntityType).select(relationToParent.getAttribute())
+					.fetch(Filter.and().id(relationToParent, parent.getID()).name(childEntityType, pattern)).stream()
+					.map(r -> r.getRecord(childEntityType)).map(Record::getID).collect(Collectors.toList());
+		}
+
+		return entityLoader.loadAll(new Key<>(entityClass), instanceIDs);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public List<ContextType> loadContextTypes(ContextDescribable contextDescribable) throws DataAccessException {
+		EntityType contextDescribableEntityType = odsModelManager.getEntityType(contextDescribable);
+		Query query = queryService.createQuery();
+
+		Map<ContextType, EntityType> contextRootEntityTypes = new EnumMap<>(ContextType.class);
+		for (ContextType contextType : ContextType.values()) {
+			EntityType entityType = odsModelManager.getEntityType(ContextRoot.class, contextType);
+			contextRootEntityTypes.put(contextType, entityType);
+			query.join(contextDescribableEntityType.getRelation(entityType), JoinType.OUTER).selectID(entityType);
+		}
+
+		Optional<Result> result = query
+				.fetchSingleton(Filter.idOnly(contextDescribableEntityType, contextDescribable.getID()));
+		if (result.isPresent()) {
+			List<ContextType> contextTypes = new ArrayList<>();
+			for (Entry<ContextType, EntityType> entry : contextRootEntityTypes.entrySet()) {
+				Optional<String> instanceID = result.map(r -> r.getRecord(entry.getValue())).map(Record::getID);
+				if (instanceID.isPresent()) {
+					contextTypes.add(entry.getKey());
+				}
+			}
+
+			return contextTypes;
+		}
+
+		return Collections.emptyList();
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public Map<ContextType, ContextRoot> loadContexts(ContextDescribable contextDescribable,
+			ContextType... contextTypes) throws DataAccessException {
+		EntityType contextDescribableEntityType = odsModelManager.getEntityType(contextDescribable);
+
+		Map<ContextType, EntityType> contextRootEntityTypes = new EnumMap<>(ContextType.class);
+		Map<ContextType, ContextRoot> contextRoots = new EnumMap<>(ContextType.class);
+		for (ContextType contextType : contextTypes.length == 0 ? ContextType.values() : contextTypes) {
+
+			EntityType entityType = odsModelManager.getEntityType(ContextRoot.class, contextType);
+			contextRootEntityTypes.put(contextType, entityType);
+
+			// openATFX does not support joins in queries, thus we have to retrive the
+			// ContextRoots one by one by ID
+			ElemId elemId = new ElemId(((ODSEntityType) contextDescribableEntityType).getODSID(),
+					ODSConverter.toODSID(contextDescribable.getID()));
+			try {
+				Optional<Relation> relation = getRelation(contextDescribableEntityType, entityType);
+
+				if (relation.isPresent()) {
+					T_LONGLONG[] contextRootIds = odsModelManager.getApplElemAccess().getRelInst(elemId,
+							relation.get().getName());
+
+					if (contextRootIds != null && contextRootIds.length > 0) {
+						// There can only be one result per ContextType, thus we take the first one and
+						// ignore the rest
+						String instanceID = Long.toString(ODSConverter.fromODSLong(contextRootIds[0]));
+
+						contextRoots.put(contextType,
+								entityLoader.load(new Key<>(ContextRoot.class, contextType), instanceID));
+					}
+				}
+			} catch (AoException e) {
+				throw new DataAccessException("Cannot load contextRoot '" + entityType.getName() + "' for ID '"
+						+ contextDescribable.getID() + "': " + e.reason, e);
+			}
+		}
+
+		if (extSystemAttrList != null) {
+			contextRoots = mapAttributesWithExtSystem(contextRoots);
+		}
+
+		return contextRoots;
+	}
+
+	private Optional<Relation> getRelation(EntityType contextDescribableEntityType, EntityType entityType) {
+		try {
+			return Optional.of(contextDescribableEntityType.getRelation(entityType));
+		} catch (IllegalArgumentException e) {
+			return Optional.empty();
+		}
+	}
+
+	private Map<ContextType, ContextRoot> mapAttributesWithExtSystem(Map<ContextType, ContextRoot> contextRoots) {
+
+		EntityFactory entityFactory = this.context.getEntityFactory()
+				.orElseThrow(() -> new DataAccessException("ATFX EntityFactory not found!"));
+
+		Map<ContextType, ContextRoot> returnVal = contextRoots;
+
+		for (ExtSystemAttribute extSystemAttr : extSystemAttrList) {
+
+			String compName = getExtAttrComp(extSystemAttr.getName());
+			String attrName = getExtAttrAttr(extSystemAttr.getName());
+
+			if (!Strings.isNullOrEmpty(compName) && !Strings.isNullOrEmpty(attrName)) {
+				for (ContextRoot root : returnVal.values()) {
+					Optional<ContextComponent> contextComponentExt = root.getContextComponent(compName);
+
+					if (contextComponentExt.isPresent()) {
+
+						Value value = contextComponentExt.get().getValues().get(attrName);
+
+						if (value != null) {
+							for (MDMAttribute mdmAttr : extSystemAttr.getAttributes()) {
+								ContextRoot contextRootMDMAttr = returnVal
+										.get(ContextType.valueOf(mdmAttr.getComponentType().toUpperCase()));
+
+								if (contextRootMDMAttr != null) {
+									Optional<ContextComponent> contextComponentOptional = contextRootMDMAttr
+											.getContextComponent(mdmAttr.getComponentName());
+
+									ContextComponent contextComponent = null;
+
+									if (contextComponentOptional.isPresent()) {
+										contextComponent = contextComponentOptional.get();
+									} else {
+										contextComponent = entityFactory
+												.createContextComponent(mdmAttr.getComponentName(), contextRootMDMAttr);
+									}
+
+									Value valueMDMAttr = value.getValueType().create(mdmAttr.getAttributeName());
+									valueMDMAttr.set(value.extract(value.getValueType()));
+									ODSEntityFactory.extract(contextComponent).getValues()
+											.put(mdmAttr.getAttributeName(), valueMDMAttr);
+								}
+
+							}
+
+							break;
+						}
+
+					}
+
+				}
+			}
+		}
+
+		return returnVal;
+	}
+
+	private void writeValueToMDMAttribute(Map<ContextType, ContextRoot> contextRoots, Value value,
+			MDMAttribute mdmAttr) {
+		EntityFactory entityFactory = this.context.getEntityFactory()
+				.orElseThrow(() -> new DataAccessException("ATFX EntityFactory not found!"));
+
+		ContextRoot contextRootMDMAttr = contextRoots
+				.get(ContextType.valueOf(mdmAttr.getComponentType().toUpperCase()));
+
+		if (contextRootMDMAttr != null) {
+			Optional<ContextComponent> contextComponentOptional = contextRootMDMAttr
+					.getContextComponent(mdmAttr.getComponentName());
+
+			ContextComponent contextComponent = null;
+
+			if (contextComponentOptional.isPresent()) {
+				contextComponent = contextComponentOptional.get();
+			} else {
+
+				contextComponent = entityFactory.createContextComponent(mdmAttr.getComponentName(), contextRootMDMAttr);
+			}
+
+			Value valueMDMAttr = value.getValueType().create(mdmAttr.getAttributeName());
+			valueMDMAttr.set(value.extract(value.getValueType()));
+			ODSEntityFactory.extract(contextComponent).getValues().put(mdmAttr.getAttributeName(), valueMDMAttr);
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public List<MeasuredValues> readMeasuredValues(ReadRequest readRequest) throws DataAccessException {
+		return new ReadRequestHandler(odsModelManager, queryService).execute(readRequest);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public Transaction startTransaction() throws DataAccessException {
+		try {
+			return new ATFXTransaction(context);
+		} catch (AoException e) {
+			throw new DataAccessException("Unable to start transaction due to: " + e.reason, e);
+		}
+	}
+
+	/**
+	 * Retrives the ASAM paths for the given entities. The ASAM paths are prefixed
+	 * with a servicename, in the form
+	 * <code>corbaloc:[iop|ssliop]:1.2@HOSTNAME:PORT/NameService/MDM.ASAM-ODS/</code>
+	 * 
+	 * @returns returns a map with the ASAM paths to the given entities. If a entity
+	 *          is not found in the ODS server the entity is not included in the
+	 *          result map.
+	 * @throws DataAccessException      if links could not be loaded for the given
+	 *                                  entities
+	 * @throws IllegalArgumentException if a the source or typeName of an entity is
+	 *                                  invalid
+	 * @see org.eclipse.mdm.api.base.BaseEntityManager#getLinks(Collection)
+	 */
+	@Override
+	public Map<Entity, String> getLinks(Collection<Entity> entities) throws DataAccessException {
+
+		Map<Entity, String> linkMap = new HashMap<>();
+
+		ApplicationStructure appStructure;
+		try {
+			appStructure = odsModelManager.getAoSession().getApplicationStructure();
+		} catch (AoException e) {
+			throw new DataAccessException("Could not load application structure! Reason: " + e.reason, e);
+		}
+
+		String serverRoot = context.getParameters().get(ODSContextFactory.PARAM_NAMESERVICE) + "/"
+				+ context.getParameters().get(ODSContextFactory.PARAM_SERVICENAME);
+
+		Map<String, List<Entity>> entitiesByTypeName = entities.stream().filter(e -> e.getTypeName() != null)
+				.collect(Collectors.groupingBy(Entity::getTypeName));
+
+		for (Map.Entry<String, List<Entity>> entry : entitiesByTypeName.entrySet()) {
+			ODSEntityType et = (ODSEntityType) odsModelManager.getEntityType(entry.getKey());
+
+			List<ElemId> elemIds = entry.getValue().stream()
+					.map(e -> new ElemId(et.getODSID(), ODSConverter.toODSLong(Long.parseLong(e.getID()))))
+					.collect(Collectors.toList());
+
+			try {
+				InstanceElement[] instances = appStructure.getInstancesById(elemIds.toArray(new ElemId[0]));
+
+				for (InstanceElement ie : instances) {
+					String id = Long.toString(ODSConverter.fromODSLong(ie.getId()));
+					String asamPath = serverRoot + ie.getAsamPath();
+					entry.getValue().stream().filter(e -> e.getID().equals(id)).findFirst()
+							.ifPresent(e -> linkMap.put(e, asamPath));
+				}
+			} catch (AoException e) {
+				LOGGER.debug("Could not load links for entities: " + entities + ". Reason: " + e.reason, e);
+			}
+		}
+
+		return linkMap;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public <T extends Entity> List<T> loadRelatedEntities(Entity entity, String relationName, Class<T> relatedClass) {
+		ODSEntityType entityType = ((ODSEntityType) context.getODSModelManager().getEntityType(entity));
+		ElemId elemId = new ElemId(entityType.getODSID(), ODSConverter.toODSID(entity.getID()));
+
+		try {
+			T_LONGLONG[] instanceIds = context.getAoSession().getApplElemAccess().getRelInst(elemId, relationName);
+			List<String> instanceIDs = Stream.of(instanceIds).map(ODSConverter::fromODSLong).map(Object::toString)
+					.collect(Collectors.toList());
+			return entityLoader.loadAll(new Key<>(relatedClass), instanceIDs);
+		} catch (AoException e) {
+			throw new DataAccessException("Cannot load related instances: " + e.reason, e);
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public Optional<TemplateTest> loadTemplate(Test test) {
+		return Optional.of(ODSEntityFactory.extract(test).getMutableStore().get(TemplateTest.class));
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public Optional<TemplateTestStep> loadTemplate(TestStep testStep) {
+		return Optional.of(ODSEntityFactory.extract(testStep).getMutableStore().get(TemplateTestStep.class));
+	}
+
+	private static String getExtAttrComp(final String str) {
+		String returnVal = null;
+
+		Matcher matcher = EXTSYSTEMCOMP_REGEX.matcher(str);
+		if (matcher.matches()) {
+			returnVal = matcher.group(1);
+		}
+		return returnVal;
+	}
+
+	private static String getExtAttrAttr(final String str) {
+		String returnVal = null;
+
+		Matcher matcher = EXTSYSTEMATTR_REGEX.matcher(str);
+		if (matcher.matches()) {
+			returnVal = matcher.group(1);
+		}
+		return returnVal;
+	}
+}
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/NameHelper.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/NameHelper.java
new file mode 100644
index 0000000..97a3967
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/NameHelper.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+
+package org.eclipse.mdm.api.atfxadapter;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+import org.asam.ods.AoException;
+import org.asam.ods.AoSession;
+import org.asam.ods.ApplicationElement;
+import org.asam.ods.InstanceElement;
+import org.asam.ods.InstanceElementIterator;
+import org.asam.ods.Relationship;
+
+/**
+ * @author akn
+ *
+ */
+public class NameHelper {
+
+	private static final Pattern PATTERN_TESTSTEP_ASAM_PATH = Pattern.compile(
+			"\\/\\[Environment\\].+\\/\\[Project\\](.+)\\/\\[StructureLevel\\](.+)\\/\\[Test\\](.+)\\/\\[TestStep\\](.+)");
+
+	private final AoSession aoSession;
+	private final String compName;
+	private final String attrName;
+
+	private Map<String, String> asamAttrCache = new HashMap<>();
+
+	/**
+	 * @param aoSession
+	 * @param property
+	 * @throws AoException
+	 */
+	public NameHelper(AoSession aoSession, String compName, String attrName) throws AoException {
+		super();
+		this.aoSession = aoSession;
+		this.compName = compName;
+		this.attrName = attrName;
+		initCache();
+
+	}
+
+	private void initCache() throws AoException {
+		ApplicationElement testStep = this.aoSession.getApplicationStructure().getElementByName("TestStep");
+
+		InstanceElementIterator testStepInstances = testStep.getInstances("*");
+
+		List<InstanceElement> relatedIE = new ArrayList<>();
+
+		for (InstanceElement ie : testStepInstances.nextN(testStepInstances.getCount())) {
+			relatedIE.add(ie);
+			relatedIE.addAll(getParentIntances(ie));
+		}
+
+		int i = 0;
+
+	}
+
+	private List<InstanceElement> getParentIntances(InstanceElement ie) throws AoException {
+		List<InstanceElement> returnVal = new ArrayList<>();
+
+		InstanceElementIterator ieIterator = ie.getRelatedInstancesByRelationship(Relationship.FATHER, "*");
+
+		if (ieIterator != null && ieIterator.getCount() > 0) {
+			for (InstanceElement ieParent : ieIterator.nextN(ieIterator.getCount())) {
+				returnVal.add(ie);
+				returnVal.addAll(getParentIntances(ie));
+			}
+		}
+
+		return returnVal;
+	}
+
+}
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/filetransfer/ATFXFileService.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/filetransfer/ATFXFileService.java
new file mode 100644
index 0000000..5a00ee6
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/filetransfer/ATFXFileService.java
@@ -0,0 +1,229 @@
+/*******************************************************************************
+ * Copyright (c) 2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+
+package org.eclipse.mdm.api.atfxadapter.filetransfer;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.time.Duration;
+import java.time.LocalTime;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.stream.Collectors;
+
+import org.eclipse.mdm.api.base.file.FileService;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.FileLink;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author akn
+ *
+ */
+public class ATFXFileService implements FileService {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(ATFXFileService.class);
+
+	private final Path parentDirectory;
+
+	public ATFXFileService(File parentDirectory) {
+		this.parentDirectory = parentDirectory.toPath();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.mdm.api.base.file.FileService#downloadSequential(org.eclipse.mdm.
+	 * api.base.model.Entity, java.nio.file.Path, java.util.Collection,
+	 * org.eclipse.mdm.api.base.file.FileService.ProgressListener)
+	 */
+	@Override
+	public void downloadSequential(Entity entity, Path target, Collection<FileLink> fileLinks,
+			ProgressListener progressListener) throws IOException {
+		Map<String, List<FileLink>> groups = fileLinks.stream().filter(FileLink::isRemote)
+				.collect(Collectors.groupingBy(FileLink::getRemotePath));
+
+		long totalSize = calculateDownloadSize(groups);
+		final AtomicLong transferred = new AtomicLong();
+		LocalTime start = LocalTime.now();
+		UUID id = UUID.randomUUID();
+		LOGGER.debug("Sequential download of {} file(s) with id '{}' started.", groups.size(), id);
+		for (List<FileLink> group : groups.values()) {
+			FileLink fileLink = group.get(0);
+
+			download(entity, target, fileLink, (b, p) -> {
+				double tranferredBytes = transferred.addAndGet(b);
+				if (progressListener != null) {
+					progressListener.progress(b, (float) (tranferredBytes / totalSize));
+				}
+			});
+
+			for (FileLink other : group.subList(1, group.size())) {
+				other.setLocalStream(fileLink.getLocalStream());
+			}
+		}
+		LOGGER.debug("Sequential download with id '{}' finished in {}.", id, Duration.between(start, LocalTime.now()));
+
+	}
+
+	private long calculateDownloadSize(Map<String, List<FileLink>> groups) {
+		List<FileLink> links = groups.values().stream().map(l -> l.get(0)).collect(Collectors.toList());
+		long totalSize = 0;
+		for (FileLink fileLink : links) {
+			File f = new File(fileLink.getRemotePath());
+			// overflow may occur in case of total size exceeds 9223 PB!
+			totalSize = Math.addExact(totalSize, f.length());
+		}
+
+		return totalSize;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.mdm.api.base.file.FileService#downloadParallel(org.eclipse.mdm.
+	 * api.base.model.Entity, java.nio.file.Path, java.util.Collection,
+	 * org.eclipse.mdm.api.base.file.FileService.ProgressListener)
+	 */
+	@Override
+	public void downloadParallel(Entity entity, Path target, Collection<FileLink> fileLinks,
+			ProgressListener progressListener) throws IOException {
+		// TODO Auto-generated method stub
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.mdm.api.base.file.FileService#download(org.eclipse.mdm.api.base.
+	 * model.Entity, java.nio.file.Path, org.eclipse.mdm.api.base.model.FileLink,
+	 * org.eclipse.mdm.api.base.file.FileService.ProgressListener)
+	 */
+	@Override
+	public void download(Entity entity, Path target, FileLink fileLink, ProgressListener progressListener)
+			throws IOException {
+		if (Files.exists(target)) {
+			if (!Files.isDirectory(target)) {
+				throw new IllegalArgumentException("Target path is not a directory.");
+			}
+		} else {
+			Files.createDirectory(target);
+		}
+
+		try (InputStream inputStream = openStream(entity, fileLink)) {
+			Path absolutePath = target.resolve(fileLink.getFileName()).toAbsolutePath();
+			String remotePath = fileLink.getRemotePath();
+			LOGGER.debug("Starting download of file '{}' to '{}'.", remotePath, absolutePath);
+			LocalTime start = LocalTime.now();
+			Files.copy(inputStream, absolutePath);
+			LOGGER.debug("File '{}' successfully downloaded in {} to '{}'.", remotePath,
+					Duration.between(start, LocalTime.now()), absolutePath);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.mdm.api.base.file.FileService#openStream(org.eclipse.mdm.api.base
+	 * .model.Entity, org.eclipse.mdm.api.base.model.FileLink,
+	 * org.eclipse.mdm.api.base.file.FileService.ProgressListener)
+	 */
+	@Override
+	public InputStream openStream(Entity entity, FileLink fileLink, ProgressListener progressListener)
+			throws IOException {
+
+		return new FileInputStream(parentDirectory.resolve(fileLink.getRemotePath()).toFile());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.mdm.api.base.file.FileService#loadSize(org.eclipse.mdm.api.base.
+	 * model.Entity, org.eclipse.mdm.api.base.model.FileLink)
+	 */
+	@Override
+	public void loadSize(Entity entity, FileLink fileLink) throws IOException {
+		// TODO Auto-generated method stub
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.mdm.api.base.file.FileService#uploadSequential(org.eclipse.mdm.
+	 * api.base.model.Entity, java.util.Collection,
+	 * org.eclipse.mdm.api.base.file.FileService.ProgressListener)
+	 */
+	@Override
+	public void uploadSequential(Entity entity, Collection<FileLink> fileLinks, ProgressListener progressListener)
+			throws IOException {
+		// TODO Auto-generated method stub
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.mdm.api.base.file.FileService#uploadParallel(org.eclipse.mdm.api.
+	 * base.model.Entity, java.util.Collection,
+	 * org.eclipse.mdm.api.base.file.FileService.ProgressListener)
+	 */
+	@Override
+	public void uploadParallel(Entity entity, Collection<FileLink> fileLinks, ProgressListener progressListener)
+			throws IOException {
+		// TODO Auto-generated method stub
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.mdm.api.base.file.FileService#delete(org.eclipse.mdm.api.base.
+	 * model.Entity, java.util.Collection)
+	 */
+	@Override
+	public void delete(Entity entity, Collection<FileLink> fileLinks) {
+		// TODO Auto-generated method stub
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.mdm.api.base.file.FileService#delete(org.eclipse.mdm.api.base.
+	 * model.Entity, org.eclipse.mdm.api.base.model.FileLink)
+	 */
+	@Override
+	public void delete(Entity entity, FileLink fileLink) {
+		// TODO Auto-generated method stub
+
+	}
+
+}
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/ATFXTransaction.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/ATFXTransaction.java
new file mode 100644
index 0000000..253d027
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/ATFXTransaction.java
@@ -0,0 +1,426 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.api.atfxadapter.transaction;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.UUID;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import org.asam.ods.AoException;
+import org.eclipse.mdm.api.atfxadapter.ATFXContext;
+import org.eclipse.mdm.api.base.Transaction;
+import org.eclipse.mdm.api.base.adapter.Core;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.massdata.WriteRequest;
+import org.eclipse.mdm.api.base.model.BaseEntity;
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.Deletable;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.ScalarType;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.model.CatalogAttribute;
+import org.eclipse.mdm.api.dflt.model.CatalogComponent;
+import org.eclipse.mdm.api.dflt.model.CatalogSensor;
+import org.eclipse.mdm.api.dflt.model.TemplateAttribute;
+import org.eclipse.mdm.api.dflt.model.TemplateComponent;
+import org.eclipse.mdm.api.dflt.model.TemplateRoot;
+import org.eclipse.mdm.api.dflt.model.TemplateSensor;
+import org.eclipse.mdm.api.dflt.model.TemplateTest;
+import org.eclipse.mdm.api.dflt.model.TemplateTestStep;
+import org.eclipse.mdm.api.odsadapter.ODSContext;
+import org.eclipse.mdm.api.odsadapter.query.ODSEntityFactory;
+import org.eclipse.mdm.api.odsadapter.query.ODSModelManager;
+import org.eclipse.mdm.api.odsadapter.utils.ODSUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * ODS implementation of the {@link Transaction} interface.
+ *
+ * @see org.eclipse.mdm.api.odsadapter.transaction.ODSTransaction
+ */
+public final class ATFXTransaction implements Transaction {
+
+	// TODO: it should be possible to a attach a progress listener
+	// -> progress notification updates while uploading files
+	// -> any other useful informations?!
+	// -> splitting of tasks into subtasks may be required...
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(ATFXTransaction.class);
+
+	// this one is used to access the application model and execute queries
+	// instance is decoupled from its parent
+	private final ATFXContext context;
+
+	// only for logging
+	private final String id = UUID.randomUUID().toString();
+
+	// need to write version == instanceID -> update after create
+	private final List<ContextRoot> contextRoots = new ArrayList<>();
+
+	// reset instance IDs on abort
+	private final List<Core> created = new ArrayList<>();
+
+	// apply changes
+	private final List<Core> modified = new ArrayList<>();
+
+	private CatalogManager catalogManager;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param parentModelManager Used to access the persistence.
+	 * @param entity             Used for security checks
+	 * @param transfer           The file transfer type.
+	 * @throws AoException Thrown if unable to start a co-session.
+	 */
+	public ATFXTransaction(ATFXContext context) throws AoException {
+		this.context = context;
+		this.context.getAoSession().startTransaction();
+		LOGGER.debug("Transaction '{}' started.", id);
+	}
+
+	<T extends Entity> T removeReferencesToTemplates(T e) {
+		for (Class<? extends Entity> clazz : Arrays.asList(TemplateTest.class, TemplateTestStep.class,
+				TemplateRoot.class, TemplateComponent.class, TemplateAttribute.class, TemplateSensor.class)) {
+			ODSEntityFactory.getMutableStore((BaseEntity) e).remove(clazz);
+			ODSEntityFactory.extract((BaseEntity) e).apply();
+		}
+		return e;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	public <T extends Entity> void create(Collection<T> entities) throws DataAccessException {
+		if (entities.isEmpty()) {
+			return;
+		} else if (entities.stream().filter(e -> ODSUtils.isValidID(e.getID())).findAny().isPresent()) {
+			throw new IllegalArgumentException("At least one given entity is already persisted.");
+		}
+
+		entities = entities.stream().map(this::removeReferencesToTemplates).collect(Collectors.toList());
+
+		try {
+			Map<Class<?>, List<T>> entitiesByClassType = entities.stream()
+					.collect(Collectors.groupingBy(e -> e.getClass()));
+
+			List<CatalogComponent> catalogComponents = (List<CatalogComponent>) entitiesByClassType
+					.get(CatalogComponent.class);
+			if (catalogComponents != null) {
+				getCatalogManager().createCatalogComponents(catalogComponents);
+			}
+
+			List<CatalogSensor> catalogSensors = (List<CatalogSensor>) entitiesByClassType.get(CatalogSensor.class);
+			if (catalogSensors != null) {
+				// TODO anehmer on 2017-11-16: avalon 4.3b throws an exception in
+				// AoSession.commitTransaction() if multiple
+				// catalog sensors have been deleted and leaves the application
+				// model in a broken state. This is also stated in the documentation. This
+				// comment should be removed later.
+				getCatalogManager().createCatalogSensors(catalogSensors);
+			}
+
+			List<CatalogAttribute> catalogAttributes = (List<CatalogAttribute>) entitiesByClassType
+					.get(CatalogAttribute.class);
+			if (catalogAttributes != null) {
+				getCatalogManager().createCatalogAttributes(catalogAttributes);
+			}
+
+			List<TestStep> testSteps = (List<TestStep>) entitiesByClassType.get(TestStep.class);
+			if (testSteps != null) {
+				create(testSteps.stream().map(ContextRoot::of).collect(ArrayList::new, List::addAll, List::addAll));
+			}
+
+			List<Measurement> measurements = (List<Measurement>) entitiesByClassType.get(Measurement.class);
+			if (measurements != null) {
+				// Use set here, since measurement siblings point to the same
+				// context roots. Only create those ContextRoots that haven't been created yet:
+				create(measurements.stream().map(ContextRoot::of)
+						.collect(HashSet<ContextRoot>::new, Set<ContextRoot>::addAll, Set<ContextRoot>::addAll).stream()
+						.filter(cr -> !ODSUtils.isValidID(cr.getID())).collect(Collectors.toSet()));
+			}
+
+			executeStatements(et -> new InsertStatement(this, et), entities);
+
+			List<ContextRoot> roots = (List<ContextRoot>) entitiesByClassType.get(ContextRoot.class);
+			if (roots != null) {
+				roots.forEach(contextRoot -> {
+					contextRoot.setVersion(contextRoot.getID().toString());
+				});
+
+				// this will restore the ASAM path of each context root
+				executeStatements(et -> new UpdateStatement(this, et, true), roots);
+				contextRoots.addAll(roots);
+			}
+		} catch (AoException e) {
+			throw new DataAccessException("Unable to write new entities due to: " + e.reason, e);
+		} catch (IOException e) {
+			throw new DataAccessException("Unable to write new entities due to: " + e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	public <T extends Entity> void update(Collection<T> entities) throws DataAccessException {
+		if (entities.isEmpty()) {
+			return;
+		} else if (entities.stream().filter(e -> !ODSUtils.isValidID(e.getID())).findAny().isPresent()) {
+			throw new IllegalArgumentException("At least one given entity is not yet persisted.");
+		}
+
+		entities = entities.stream().map(this::removeReferencesToTemplates).collect(Collectors.toList());
+
+		try {
+			Map<Class<?>, List<T>> entitiesByClassType = entities.stream()
+					.collect(Collectors.groupingBy(e -> e.getClass()));
+			List<CatalogAttribute> catalogAttributes = (List<CatalogAttribute>) entitiesByClassType
+					.get(CatalogAttribute.class);
+			if (catalogAttributes != null) {
+				getCatalogManager().updateCatalogAttributes(catalogAttributes);
+			}
+
+			executeStatements(et -> new UpdateStatement(this, et, false), entities);
+		} catch (AoException e) {
+			throw new DataAccessException("Unable to update entities due to: " + e.reason, e);
+		} catch (IOException e) {
+			throw new DataAccessException("Unable to update entities due to: " + e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	public <T extends Deletable> void delete(Collection<T> entities) throws DataAccessException {
+		if (entities.isEmpty()) {
+			return;
+		}
+
+		entities = entities.stream().map(this::removeReferencesToTemplates).collect(Collectors.toList());
+
+		List<T> filteredEntities = entities.stream().filter(e -> ODSUtils.isValidID(e.getID()))
+				.collect(Collectors.toList());
+
+		try {
+			Map<Class<?>, List<T>> entitiesByClassType = filteredEntities.stream()
+					.collect(Collectors.groupingBy(e -> e.getClass()));
+
+			List<CatalogComponent> catalogComponents = (List<CatalogComponent>) entitiesByClassType
+					.get(CatalogComponent.class);
+			if (catalogComponents != null) {
+				getCatalogManager().deleteCatalogComponents(catalogComponents);
+			}
+
+			List<CatalogSensor> catalogSensors = (List<CatalogSensor>) entitiesByClassType.get(CatalogSensor.class);
+			if (catalogSensors != null) {
+				// TODO anehmer on 2017-11-16: avalon 4.3b throws an exception in
+				// AoSession.commitTransaction() if multiple
+				// catalog sensors have been deleted and leaves the application
+				// model in a broken state. This is also stated in the documentation. This
+				// comment should be removed later.
+				getCatalogManager().deleteCatalogSensors(catalogSensors);
+			}
+
+			List<CatalogAttribute> catalogAttributes = (List<CatalogAttribute>) entitiesByClassType
+					.get(CatalogAttribute.class);
+			if (catalogAttributes != null) {
+				getCatalogManager().deleteCatalogAttributes(catalogAttributes);
+			}
+
+			/*
+			 * TODO: for any template that has to be deleted it is required to ensure there
+			 * are no links to it...
+			 */
+
+			executeStatements(et -> new DeleteStatement(this, et, true), filteredEntities);
+		} catch (AoException e) {
+			throw new DataAccessException("Unable to delete entities due to: " + e.reason, e);
+		} catch (IOException e) {
+			throw new DataAccessException("Unable to delete entities due to: " + e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void writeMeasuredValues(Collection<WriteRequest> writeRequests) throws DataAccessException {
+		if (writeRequests.isEmpty()) {
+			return;
+		}
+
+		try {
+			Map<ScalarType, List<WriteRequest>> writeRequestsByRawType = writeRequests.stream()
+					.collect(Collectors.groupingBy(WriteRequest::getRawScalarType));
+
+			for (List<WriteRequest> writeRequestGroup : writeRequestsByRawType.values()) {
+				WriteRequestHandler writeRequestHandler = new WriteRequestHandler(this);
+				List<Channel> channels = new ArrayList<>();
+
+				for (WriteRequest writeRequest : writeRequestGroup) {
+					Channel channel = writeRequest.getChannel();
+					channel.setScalarType(writeRequest.getCalculatedScalarType());
+					// TODO it might be required to change relation to another
+					// unit?!??
+					channels.add(channel);
+					writeRequestHandler.addRequest(writeRequest);
+				}
+
+				update(channels);
+				writeRequestHandler.execute();
+			}
+		} catch (AoException e) {
+			throw new DataAccessException("Unable to write measured values due to: " + e.reason, e);
+		} catch (IOException e) {
+			throw new DataAccessException("Unable to write measured values due to: " + e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void commit() throws DataAccessException {
+		try {
+			context.getAoSession().commitTransaction();
+
+			// commit succeed -> apply changes in entity cores
+			modified.forEach(Core::apply);
+
+			if (catalogManager != null) {
+				// application model has been modified -> reload
+				// context.getODSModelManager().reloadApplicationModel();
+				// TODO
+			}
+
+			LOGGER.debug("Transaction '{}' committed.", id);
+		} catch (AoException e) {
+			throw new DataAccessException("Unable to commit transaction '" + id + "' due to: " + e.reason, e);
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void abort() {
+		try {
+			// reset version, since creation failed or was aborted
+			contextRoots.forEach(cr -> cr.setVersion(null));
+
+			// reset instance IDs
+			String virtualID = "0";
+			created.forEach(c -> c.setID(virtualID));
+
+			context.getAoSession().abortTransaction();
+
+			LOGGER.debug("Transaction '{}' aborted.", id);
+		} catch (AoException e) {
+			LOGGER.error("Unable to abort transaction '" + id + "' due to: " + e.reason, e);
+		}
+	}
+
+	/**
+	 * Once {@link #abort()} is called instance ID of given {@link Core} will be
+	 * reset to {@code 0} which indicates a virtual {@link Entity}, not yet
+	 * persisted, entity.
+	 *
+	 * @param core The {@code Core} of a newly written {@code Entity}.
+	 */
+	void addCreated(Core core) {
+		created.add(core);
+	}
+
+	/**
+	 * Once {@link #commit()} is {@link Core#apply()} will be called to apply
+	 * modified {@link Value} contents and removed related entities.
+	 *
+	 * @param core The {@code Core} of an updated {@code Entity}.
+	 */
+	void addModified(Core core) {
+		modified.add(core);
+	}
+
+	/**
+	 * Returns the {@link ODSContext}.
+	 *
+	 * @return The {@code ODSContext} is returned.
+	 */
+	ATFXContext getContext() {
+		return context;
+	}
+
+	/**
+	 * Returns the {@link ODSModelManager}.
+	 *
+	 * @return The {@code ODSModelManager} is returned.
+	 */
+	ODSModelManager getModelManager() {
+		return context.getODSModelManager();
+	}
+
+	/**
+	 * Returns the {@link CatalogManager}.
+	 *
+	 * @return The {@code CatalogManager} is returned.
+	 */
+	private CatalogManager getCatalogManager() {
+		if (catalogManager == null) {
+			catalogManager = new CatalogManager(this);
+		}
+
+		return catalogManager;
+	}
+
+	/**
+	 * Executes statements for given entities by using given statement factory.
+	 *
+	 * @param <T>              The entity type.
+	 * @param statementFactory Used to create a new statement for a given
+	 *                         {@link EntityType}.
+	 * @param entities         The processed {@code Entity}s.
+	 * @throws AoException         Thrown if the execution fails.
+	 * @throws DataAccessException Thrown if the execution fails.
+	 * @throws IOException         Thrown if a file transfer operation fails.
+	 */
+	private <T extends Entity> void executeStatements(Function<EntityType, BaseStatement> statementFactory,
+			Collection<T> entities) throws AoException, DataAccessException, IOException {
+		Map<EntityType, List<Entity>> entitiesByType = entities.stream()
+				.collect(Collectors.groupingBy(context.getODSModelManager()::getEntityType));
+		for (Entry<EntityType, List<Entity>> entry : entitiesByType.entrySet()) {
+			statementFactory.apply(entry.getKey()).execute(entry.getValue());
+		}
+	}
+}
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/BaseStatement.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/BaseStatement.java
new file mode 100644
index 0000000..4e28895
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/BaseStatement.java
@@ -0,0 +1,108 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.api.atfxadapter.transaction;
+
+import java.io.IOException;
+import java.util.Collection;
+
+import org.asam.ods.AoException;
+import org.asam.ods.ApplElemAccess;
+import org.eclipse.mdm.api.base.ServiceNotProvidedException;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.base.query.QueryService;
+import org.eclipse.mdm.api.odsadapter.query.ODSEntityType;
+import org.eclipse.mdm.api.odsadapter.query.ODSModelManager;
+
+/**
+ * A base implementation for execution statements (CREATE, UPDATE, DELETE).
+ *
+ * @see org.eclipse.mdm.api.odsadapter.transaction.BaseStatement
+ */
+abstract class BaseStatement {
+
+	private final ATFXTransaction transaction;
+	private final ODSEntityType entityType;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param transaction The owning {@link ATFXTransaction}.
+	 * @param entityType  The associated {@link EntityType}.
+	 */
+	protected BaseStatement(ATFXTransaction transaction, EntityType entityType) {
+		this.transaction = transaction;
+		this.entityType = (ODSEntityType) entityType;
+	}
+
+	/**
+	 * Executes this statement for given {@link Entity}s.
+	 *
+	 * @param entities The processed {@code Entity}s.
+	 * @throws AoException         Thrown if the execution fails.
+	 * @throws DataAccessException Thrown if the execution fails.
+	 * @throws IOException         Thrown if a file transfer operation fails.
+	 */
+	public abstract void execute(Collection<Entity> entities) throws AoException, DataAccessException, IOException;
+
+	/**
+	 * Returns the {@link ATFXTransaction}.
+	 *
+	 * @return The {@code ODSTransaction} is returned.
+	 */
+	protected ATFXTransaction getTransaction() {
+		return transaction;
+	}
+
+	/**
+	 * Returns the {@link ODSModelManager}.
+	 *
+	 * @return The {@code ODSModelManager} is returned.
+	 */
+	protected ODSModelManager getModelManager() {
+		return transaction.getModelManager();
+	}
+
+	/**
+	 * Returns the {@link QueryService}.
+	 *
+	 * @return The {@code QueryService} is returned.
+	 */
+	protected QueryService getQueryService() {
+		return transaction.getContext().getQueryService()
+				.orElseThrow(() -> new ServiceNotProvidedException(QueryService.class));
+	}
+
+	/**
+	 * Returns the {@link ApplElemAccess}.
+	 *
+	 * @return The {@code ApplElemAccess} is returned.
+	 * @throws AoException Thrown in case of errors.
+	 */
+	protected ApplElemAccess getApplElemAccess() throws AoException {
+		return transaction.getContext().getODSModelManager().getApplElemAccess();
+	}
+
+	/**
+	 * Returns the associated {@link EntityType}.
+	 *
+	 * @return The associated {@code EntityType} is returned.
+	 */
+	protected ODSEntityType getEntityType() {
+		return entityType;
+	}
+
+}
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/CatalogManager.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/CatalogManager.java
new file mode 100644
index 0000000..612c083
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/CatalogManager.java
@@ -0,0 +1,548 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.api.atfxadapter.transaction;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import org.asam.ods.AoException;
+import org.asam.ods.ApplicationAttribute;
+import org.asam.ods.ApplicationElement;
+import org.asam.ods.ApplicationRelation;
+import org.asam.ods.ApplicationStructure;
+import org.asam.ods.BaseAttribute;
+import org.asam.ods.BaseElement;
+import org.asam.ods.BaseStructure;
+import org.asam.ods.DataType;
+import org.asam.ods.RelationRange;
+import org.eclipse.mdm.api.base.ServiceNotProvidedException;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Unit;
+import org.eclipse.mdm.api.base.query.ComparisonOperator;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.base.query.Filter;
+import org.eclipse.mdm.api.base.query.Query;
+import org.eclipse.mdm.api.base.query.QueryService;
+import org.eclipse.mdm.api.base.query.Result;
+import org.eclipse.mdm.api.dflt.model.CatalogAttribute;
+import org.eclipse.mdm.api.dflt.model.CatalogComponent;
+import org.eclipse.mdm.api.dflt.model.CatalogSensor;
+import org.eclipse.mdm.api.odsadapter.utils.ODSConverter;
+import org.eclipse.mdm.api.odsadapter.utils.ODSEnumerations;
+import org.eclipse.mdm.api.odsadapter.utils.ODSUtils;
+
+/**
+ * Used to create, update or delete {@link CatalogComponent},
+ * {@link CatalogSensor} and {@link CatalogAttribute} entities. Modifications of
+ * the listed types results in modifications of the application model.
+ *
+ * @see org.eclipse.mdm.api.odsadapter.transaction.CatalogManager
+ */
+final class CatalogManager {
+
+	private final ATFXTransaction transaction;
+
+	private ApplicationStructure applicationStructure;
+	private BaseStructure baseStructure;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param transaction The {@link ATFXTransaction}.
+	 */
+	CatalogManager(ATFXTransaction transaction) {
+		this.transaction = transaction;
+	}
+
+	/**
+	 * Creates for each given {@link CatalogComponent} a corresponding application
+	 * element including all required application relations.
+	 *
+	 * @param catalogComponents The {@code CatalogComponent}s.
+	 * @throws AoException Thrown in case of errors.
+	 */
+	public void createCatalogComponents(Collection<CatalogComponent> catalogComponents) throws AoException {
+		Map<ContextType, List<CatalogComponent>> catalogComponentsByContextType = catalogComponents.stream()
+				.collect(Collectors.groupingBy(CatalogComponent::getContextType));
+
+		for (Entry<ContextType, List<CatalogComponent>> entry : catalogComponentsByContextType.entrySet()) {
+			String odsContextTypeName = ODSUtils.CONTEXTTYPES.get(entry.getKey());
+			ApplicationElement contextRootApplicationElement = getApplicationStructure()
+					.getElementByName(odsContextTypeName);
+			BaseElement contextRootBaseElement = contextRootApplicationElement.getBaseElement();
+			ApplicationElement contextTemplateComponentApplicationElement = getApplicationStructure()
+					.getElementByName("Tpl" + odsContextTypeName + "Comp");
+			BaseElement baseElement = getBaseStructure().getElementByType("Ao" + odsContextTypeName + "Part");
+
+			for (CatalogComponent catalogComponent : entry.getValue()) {
+				ApplicationElement applicationElement = createApplicationElement(catalogComponent.getName(),
+						baseElement);
+
+				// relation context root to context component
+				ApplicationRelation applicationRelation = getApplicationStructure().createRelation();
+				applicationRelation.setElem1(contextRootApplicationElement);
+				applicationRelation.setElem2(applicationElement);
+				applicationRelation.setRelationName(catalogComponent.getName());
+				applicationRelation.setInverseRelationName(odsContextTypeName);
+				applicationRelation
+						.setBaseRelation(getBaseStructure().getRelation(contextRootBaseElement, baseElement));
+				applicationRelation._release();
+
+				// relation template component to context component
+				applicationRelation = getApplicationStructure().createRelation();
+				applicationRelation.setElem1(contextTemplateComponentApplicationElement);
+				applicationRelation.setElem2(applicationElement);
+				applicationRelation.setRelationName(catalogComponent.getName());
+				applicationRelation.setInverseRelationName("Tpl" + odsContextTypeName + "Comp");
+				applicationRelation.setRelationRange(new RelationRange((short) 0, (short) -1));
+				applicationRelation.setInverseRelationRange(new RelationRange((short) 1, (short) 1));
+
+				// release resources
+				applicationElement._release();
+				applicationRelation._release();
+			}
+
+			// release resources
+			contextTemplateComponentApplicationElement._release();
+			contextRootApplicationElement._release();
+			contextRootBaseElement._release();
+			baseElement._release();
+		}
+	}
+
+	/**
+	 * Creates for each given {@link CatalogSensor} a corresponding application
+	 * element including all required application relations.
+	 *
+	 * @param catalogSensors The {@code CatalogSensor}s.
+	 * @throws AoException Thrown in case of errors.
+	 */
+	public void createCatalogSensors(Collection<CatalogSensor> catalogSensors) throws AoException {
+		Map<String, List<CatalogSensor>> catalogSensorsByCatalogComponent = catalogSensors.stream()
+				.collect(Collectors.groupingBy(cs -> cs.getCatalogComponent().getName()));
+
+		ApplicationElement channelApplicationElement = getApplicationStructure().getElementByName("MeaQuantity");
+		BaseElement channelBaseElement = channelApplicationElement.getBaseElement();
+
+		for (Entry<String, List<CatalogSensor>> entry : catalogSensorsByCatalogComponent.entrySet()) {
+			ApplicationElement contextComponentApplicationElement = getApplicationStructure()
+					.getElementByName(entry.getKey());
+			BaseElement contextComponentBaseElement = contextComponentApplicationElement.getBaseElement();
+			ApplicationElement contextTemplateSensorApplicationElement = getApplicationStructure()
+					.getElementByName("TplSensor");
+			BaseElement baseElement = getBaseStructure().getElementByType("AoTestEquipmentPart");
+
+			for (CatalogSensor catalogSensor : entry.getValue()) {
+				ApplicationElement applicationElement = createApplicationElement(catalogSensor.getName(), baseElement);
+
+				// relation context component to context sensor
+				ApplicationRelation applicationRelation = getApplicationStructure().createRelation();
+				applicationRelation.setElem1(contextComponentApplicationElement);
+				applicationRelation.setElem2(applicationElement);
+				applicationRelation.setRelationName(catalogSensor.getName());
+				applicationRelation.setInverseRelationName(entry.getKey());
+				applicationRelation
+						.setBaseRelation(getBaseStructure().getRelation(contextComponentBaseElement, baseElement));
+				applicationRelation._release();
+
+				// relation template sensor to context sensor
+				applicationRelation = getApplicationStructure().createRelation();
+				applicationRelation.setElem1(contextTemplateSensorApplicationElement);
+				applicationRelation.setElem2(applicationElement);
+				applicationRelation.setRelationName(catalogSensor.getName());
+				applicationRelation.setInverseRelationName("TplSensor");
+				applicationRelation.setRelationRange(new RelationRange((short) 0, (short) -1));
+				applicationRelation.setInverseRelationRange(new RelationRange((short) 1, (short) 1));
+				applicationRelation._release();
+
+				// relation channel to context sensor
+				applicationRelation = getApplicationStructure().createRelation();
+				applicationRelation.setElem1(channelApplicationElement);
+				applicationRelation.setElem2(applicationElement);
+				applicationRelation.setRelationName(catalogSensor.getName());
+				applicationRelation.setInverseRelationName("MeaQuantity");
+				applicationRelation.setBaseRelation(getBaseStructure().getRelation(channelBaseElement, baseElement));
+
+				// release resources
+				applicationElement._release();
+				applicationRelation._release();
+			}
+
+			// release resources
+			contextComponentApplicationElement._release();
+			contextTemplateSensorApplicationElement._release();
+			contextComponentBaseElement._release();
+			baseElement._release();
+		}
+
+		// release resources
+		channelApplicationElement._release();
+		channelBaseElement._release();
+	}
+
+	/**
+	 * Creates for each given {@link CatalogAttribute} a corresponding application
+	 * attribute.
+	 *
+	 * @param catalogAttributes The {@code CatalogAttribute}s.
+	 * @throws AoException Thrown in case of errors.
+	 */
+	public void createCatalogAttributes(Collection<CatalogAttribute> catalogAttributes) throws AoException {
+		Map<String, List<CatalogAttribute>> catalogAttributesByCatalogComponent = catalogAttributes.stream()
+				.collect(Collectors.groupingBy(CatalogManager::getParentName));
+
+		for (Entry<String, List<CatalogAttribute>> entry : catalogAttributesByCatalogComponent.entrySet()) {
+			ApplicationElement applicationElement = getApplicationStructure().getElementByName(entry.getKey());
+
+			for (CatalogAttribute catalogAttribute : entry.getValue()) {
+
+				ApplicationAttribute applicationAttribute = applicationElement.createAttribute();
+				DataType dataType = ODSUtils.VALUETYPES.get(catalogAttribute.getValueType());
+				applicationAttribute.setDataType(dataType);
+				applicationAttribute.setName(catalogAttribute.getName());
+				if (dataType == DataType.DT_ENUM) {
+					applicationAttribute.setEnumerationDefinition(getApplicationStructure().getEnumerationDefinition(
+							ODSEnumerations.getEnumName(catalogAttribute.getEnumerationObject())));
+				}
+				Optional<Unit> unit = catalogAttribute.getUnit();
+				if (unit.isPresent()) {
+					applicationAttribute.setUnit(ODSConverter.toODSID(unit.get().getID()));
+				}
+
+				// release resources
+				applicationAttribute._release();
+			}
+
+			// release resources
+			applicationElement._release();
+		}
+	}
+
+	/**
+	 * Updates the application attribute for each given {@link CatalogAttribute}.
+	 *
+	 * @param catalogAttributes The {@code CatalogAttribute}s.
+	 * @throws AoException Thrown in case of errors.
+	 */
+	public void updateCatalogAttributes(List<CatalogAttribute> catalogAttributes) throws AoException {
+		Map<String, List<CatalogAttribute>> catalogAttributesByCatalogComponent = catalogAttributes.stream()
+				.collect(Collectors.groupingBy(CatalogManager::getParentName));
+
+		for (Entry<String, List<CatalogAttribute>> entry : catalogAttributesByCatalogComponent.entrySet()) {
+			ApplicationElement applicationElement = getApplicationStructure().getElementByName(entry.getKey());
+
+			for (CatalogAttribute catalogAttribute : entry.getValue()) {
+
+				ApplicationAttribute applicationAttribute = applicationElement
+						.getAttributeByName(catalogAttribute.getName());
+
+				Optional<Unit> unit = catalogAttribute.getUnit();
+				if (unit.isPresent()) {
+					applicationAttribute.setUnit(ODSConverter.toODSID(unit.get().getID()));
+				}
+
+				// release resources
+				applicationAttribute._release();
+			}
+
+			// release resources
+			applicationElement._release();
+		}
+	}
+
+	/**
+	 * Deletes the corresponding application element for each given
+	 * {@link CatalogComponent}. Deleting a {@code CatalogComponent} is only allowed
+	 * if it is not used in templates and all of its children could be deleted. So
+	 * at first it is tried to delete its {@link CatalogAttribute}s and
+	 * {@link CatalogSensor}s. On success it is ensured none of the given {@code
+	 * CatalogComponent}s is used in templates. Finally the corresponding
+	 * application elements are deleted.
+	 *
+	 * @param catalogComponents The {@code CatalogComponent}s.
+	 * @throws AoException         Thrown in case of errors.
+	 * @throws DataAccessException Thrown in case of errors.
+	 */
+	public void deleteCatalogComponents(Collection<CatalogComponent> catalogComponents)
+			throws AoException, DataAccessException {
+		List<CatalogAttribute> attributes = new ArrayList<>();
+		List<CatalogSensor> sensors = new ArrayList<>();
+		for (CatalogComponent catalogComponent : catalogComponents) {
+			attributes.addAll(catalogComponent.getCatalogAttributes());
+			sensors.addAll(catalogComponent.getCatalogSensors());
+		}
+		transaction.delete(sensors);
+		transaction.delete(attributes);
+
+		if (areReferencedInTemplates(catalogComponents)) {
+			throw new DataAccessException(
+					"Unable to delete given catalog components since at least " + "one is used in templates.");
+		}
+
+		for (CatalogComponent catalogComponent : catalogComponents) {
+			ApplicationElement applicationElement = getApplicationStructure()
+					.getElementByName(catalogComponent.getName());
+			for (ApplicationRelation applicationRelation : applicationElement.getAllRelations()) {
+				getApplicationStructure().removeRelation(applicationRelation);
+
+				// release resources
+				applicationRelation._release();
+			}
+			getApplicationStructure().removeElement(applicationElement);
+
+			// release resources
+			applicationElement._release();
+		}
+	}
+
+	/**
+	 * Deletes the corresponding application element for each given
+	 * {@link CatalogSensor}. Deleting a {@code CatalogSensor} is only allowed if it
+	 * is not used in templates and all of its children could be deleted. So at
+	 * first it is tried to delete its {@link CatalogAttribute}s. On success it is
+	 * ensured none of the given {@code CatalogSensor}s is used in templates.
+	 * Finally the corresponding application elements are deleted.
+	 *
+	 * @param catalogSensors The {@code CatalogSensor}s.
+	 * @throws AoException         Thrown in case of errors.
+	 * @throws DataAccessException Thrown in case of errors.
+	 */
+	public void deleteCatalogSensors(Collection<CatalogSensor> catalogSensors) throws AoException, DataAccessException {
+		List<CatalogAttribute> attributes = new ArrayList<>();
+		for (CatalogSensor catalogSensor : catalogSensors) {
+			attributes.addAll(catalogSensor.getCatalogAttributes());
+		}
+		transaction.delete(attributes);
+
+		if (areReferencedInTemplates(catalogSensors)) {
+			throw new DataAccessException(
+					"Unable to delete given catalog sensors since at " + "least one is used in templates.");
+		}
+
+		for (CatalogSensor catalogSensor : catalogSensors) {
+			ApplicationElement applicationElement = getApplicationStructure().getElementByName(catalogSensor.getName());
+			for (ApplicationRelation applicationRelation : applicationElement.getAllRelations()) {
+				getApplicationStructure().removeRelation(applicationRelation);
+
+				// release resources
+				applicationRelation._release();
+			}
+			getApplicationStructure().removeElement(applicationElement);
+
+			// release resources
+			applicationElement._release();
+		}
+
+	}
+
+	/**
+	 * Deletes the corresponding application attributes for each given
+	 * {@link CatalogAttribute}. Deleting a {@code CatalogAttribute} is only allowed
+	 * if it is not used in templates. So at first it is ensured none of the given
+	 * {@code CatalogAttribute}s is used in templates and finally the corresponding
+	 * application attributes are deleted.
+	 *
+	 * @param catalogAttributes The {@code CatalogAttribute}s.
+	 * @throws AoException         Thrown in case of errors.
+	 * @throws DataAccessException Thrown in case of errors.
+	 */
+	public void deleteCatalogAttributes(Collection<CatalogAttribute> catalogAttributes)
+			throws AoException, DataAccessException {
+		if (areReferencedInTemplates(catalogAttributes)) {
+			throw new DataAccessException(
+					"Unable to delete given catalog attributes since at least " + "one is used in templates.");
+		}
+
+		Map<String, List<CatalogAttribute>> catalogAttributesByParent = catalogAttributes.stream()
+				.collect(Collectors.groupingBy(CatalogManager::getParentName));
+
+		for (Entry<String, List<CatalogAttribute>> entry : catalogAttributesByParent.entrySet()) {
+			ApplicationElement applicationElement = getApplicationStructure().getElementByName(entry.getKey());
+
+			for (CatalogAttribute catalogAttribute : entry.getValue()) {
+				ApplicationAttribute applicationAttribute = applicationElement
+						.getAttributeByName(catalogAttribute.getName());
+				applicationElement.removeAttribute(applicationAttribute);
+
+				// release resources
+				applicationAttribute._release();
+			}
+
+			// release resources
+			applicationElement._release();
+		}
+	}
+
+	/**
+	 * Releases cached resources.
+	 */
+	public void clear() {
+		if (applicationStructure != null) {
+			applicationStructure._release();
+		}
+
+		if (baseStructure != null) {
+			baseStructure._release();
+		}
+	}
+
+	/**
+	 * Creates a new {@link ApplicationElement} with given name and
+	 * {@link BaseElement}. The returned {@code ApplicationElement} will be created
+	 * with the three mandatory {@link ApplicationAttribute}s for 'Id', 'Name' and
+	 * 'MimeType'.
+	 *
+	 * @param name        The name of the application element.
+	 * @param baseElement The {@code BaseElement} the created {@code
+	 * 		ApplicationElement} will be derived from.
+	 * @return The created {@code ApplicationElement} is returned.
+	 * @throws AoException Thrown in case of errors.
+	 */
+	private ApplicationElement createApplicationElement(String name, BaseElement baseElement) throws AoException {
+		ApplicationElement applicationElement = getApplicationStructure().createElement(baseElement);
+		applicationElement.setName(name);
+
+		// Id
+		ApplicationAttribute idApplicationAttribute = applicationElement.getAttributeByBaseName("id");
+		idApplicationAttribute.setName("Id");
+		idApplicationAttribute.setDataType(DataType.DT_LONGLONG);
+		idApplicationAttribute.setIsAutogenerated(true);
+
+		// Name
+		ApplicationAttribute nameApplicationAttribute = applicationElement.getAttributeByBaseName("name");
+		nameApplicationAttribute.setName("Name");
+		nameApplicationAttribute.setLength(50);
+
+		// MimeType
+		BaseAttribute mimeTypeBaseAttribute = baseElement.getAttributes("mime_type")[0];
+		ApplicationAttribute mimeTypeApplicationAttribute = applicationElement.createAttribute();
+		mimeTypeApplicationAttribute.setBaseAttribute(mimeTypeBaseAttribute);
+		mimeTypeApplicationAttribute.setName("MimeType");
+		mimeTypeApplicationAttribute.setDataType(DataType.DT_STRING);
+		mimeTypeApplicationAttribute.setLength(256);
+		mimeTypeApplicationAttribute.setIsObligatory(true);
+
+		// release resources
+		idApplicationAttribute._release();
+		nameApplicationAttribute._release();
+		mimeTypeApplicationAttribute._release();
+		mimeTypeBaseAttribute._release();
+
+		return applicationElement;
+	}
+
+	/**
+	 * Returns the cached {@link ApplicationStructure}.
+	 *
+	 * @return The {@code ApplicationStructure} is returned.
+	 * @throws AoException Thrown if unable to access the {@code
+	 * 		ApplicationStructure}.
+	 */
+	private ApplicationStructure getApplicationStructure() throws AoException {
+		if (applicationStructure == null) {
+			applicationStructure = transaction.getModelManager().getAoSession().getApplicationStructure();
+		}
+
+		return applicationStructure;
+	}
+
+	/**
+	 * Returns the cached {@link BaseStructure}.
+	 *
+	 * @return The {@code BaseStructure} is returned.
+	 * @throws AoException Thrown if unable to access the {@code
+	 * 		BaseStructure}.
+	 */
+	private BaseStructure getBaseStructure() throws AoException {
+		if (baseStructure == null) {
+			baseStructure = transaction.getModelManager().getAoSession().getBaseStructure();
+		}
+
+		return baseStructure;
+	}
+
+	/**
+	 * Checks whether given {@link Entity}s are referenced in templates.
+	 *
+	 * @param entities The checked entities ({@link CatalogComponent},
+	 *                 {@link CatalogSensor} or {@link CatalogAttribute}).
+	 * @return Returns {@code true} if at least one entity is referenced in a
+	 *         template.
+	 * @throws AoException         Thrown on errors.
+	 * @throws DataAccessException Thrown on errors.
+	 */
+	private boolean areReferencedInTemplates(Collection<? extends Entity> entities)
+			throws AoException, DataAccessException {
+		Map<EntityType, List<Entity>> entitiesByEntityType = entities.stream()
+				.collect(Collectors.groupingBy(transaction.getModelManager()::getEntityType));
+
+		for (Entry<EntityType, List<Entity>> entry : entitiesByEntityType.entrySet()) {
+			EntityType source = entry.getKey();
+			EntityType target = transaction.getModelManager().getEntityType(source.getName().replace("Cat", "Tpl"));
+
+			Query query = transaction.getContext().getQueryService()
+					.orElseThrow(() -> new ServiceNotProvidedException(QueryService.class)).createQuery()
+					.selectID(target).join(source, target);
+
+			List<Result> results = query.fetch(Filter.and().add(
+					ComparisonOperator.IN_SET.create(source.getIDAttribute(), collectInstanceIDs(entry.getValue()))));
+			if (results.size() > 0) {
+				return true;
+			}
+		}
+
+		return false;
+	}
+
+	/**
+	 * Collect the instance IDs of all given {@link Entity}s.
+	 *
+	 * @param entities The {@link Entity}s.
+	 * @return The instance IDs a {@code String[]} are turned.
+	 */
+	private static String[] collectInstanceIDs(List<Entity> entities) {
+		String[] ids = new String[entities.size()];
+
+		for (int i = 0; i < ids.length; i++) {
+			ids[i] = entities.get(i).getID();
+		}
+
+		return ids;
+	}
+
+	/**
+	 * Returns the parent name for given {@link CatalogAttribute}.
+	 *
+	 * @param catalogAttribute The {@code CatalogAttribute}.
+	 * @return The parent name is returned.
+	 */
+	private static String getParentName(CatalogAttribute catalogAttribute) {
+		Optional<CatalogComponent> catalogComponent = catalogAttribute.getCatalogComponent();
+		if (catalogComponent.isPresent()) {
+			return catalogComponent.get().getName();
+		}
+
+		return catalogAttribute.getCatalogSensor()
+				.orElseThrow(() -> new IllegalStateException("Parent entity is unknown.")).getName();
+	}
+
+}
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/DeleteStatement.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/DeleteStatement.java
new file mode 100644
index 0000000..08b7fdf
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/DeleteStatement.java
@@ -0,0 +1,227 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.api.atfxadapter.transaction;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.asam.ods.AoException;
+import org.asam.ods.T_LONGLONG;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.Relation;
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.FilesAttachable;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.ParameterSet;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.base.query.Filter;
+import org.eclipse.mdm.api.base.query.JoinType;
+import org.eclipse.mdm.api.base.query.Query;
+import org.eclipse.mdm.api.base.query.Result;
+import org.eclipse.mdm.api.odsadapter.lookup.config.EntityConfig;
+import org.eclipse.mdm.api.odsadapter.query.ODSEntityType;
+import org.eclipse.mdm.api.odsadapter.utils.ODSConverter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Delete statement is used to delete entities with their children.
+ *
+ * @see org.eclipse.mdm.api.odsadapter.transaction.DeleteStatement
+ */
+final class DeleteStatement extends BaseStatement {
+
+	private static final List<String> AUTO_DELETABLE = Arrays.asList("MeaQuantity", "SubMatrix", "LocalColumn",
+			"ExternalComponent");
+	private static final Logger LOGGER = LoggerFactory.getLogger(DeleteStatement.class);
+
+	private final boolean useAutoDelete;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param transaction   The owning {@link ATFXTransaction}.
+	 * @param entityType    The associated {@link EntityType}.
+	 * @param useAutoDelete If {@code true} child relations of {@link Measurement}
+	 *                      entities are not followed.
+	 */
+	DeleteStatement(ATFXTransaction transaction, EntityType entityType, boolean useAutoDelete) {
+		super(transaction, entityType);
+		this.useAutoDelete = useAutoDelete;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void execute(Collection<Entity> entities) throws AoException, DataAccessException {
+		if (entities.stream().filter(e -> !e.getTypeName().equals(getEntityType().getName())).findAny().isPresent()) {
+			throw new IllegalArgumentException("At least one given entity is of incompatible type.");
+		}
+
+		long start = System.currentTimeMillis();
+		int amount = delete(getEntityType(), entities.stream().map(Entity::getID).collect(Collectors.toSet()), false);
+		LOGGER.debug("{} instances deleted in {} ms.", amount, System.currentTimeMillis() - start);
+	}
+
+	/**
+	 * Recursively follows child relations of given entities and deletes all child
+	 * entities before deleting parent entities.
+	 *
+	 * @param entityType     {@link EntityType} of the deleted entities.
+	 * @param instanceIDs    Instance IDs of entities which have to be deleted.
+	 * @param ignoreSiblings Is it required to check whether {@link Measurement}
+	 *                       siblings share a common {@link ContextRoot}s.
+	 * @return Returns the total number of deleted instances.
+	 * @throws AoException         Thrown if unable to delete entities.
+	 * @throws DataAccessException Thrown if unable to query child entities.
+	 */
+	private int delete(EntityType entityType, Collection<String> instanceIDs, boolean ignoreSiblings)
+			throws AoException, DataAccessException {
+		if (instanceIDs.isEmpty()) {
+			return 0;
+		}
+
+		Query query = getQueryService().createQuery().selectID(entityType);
+		for (Relation relation : entityType.getChildRelations()) {
+			if (useAutoDelete && AUTO_DELETABLE.contains(relation.getTarget().getName())) {
+				continue;
+			}
+
+			if (!relation.getTarget().equals(relation.getSource())) {
+				query.join(relation, JoinType.OUTER).selectID(relation.getTarget());
+			}
+		}
+
+		// select attributes containing file links only for entity types
+		// implementing FilesAttachable
+		EntityConfig<?> entityConfig = getModelManager().getEntityConfig(entityType);
+		if (FilesAttachable.class.isAssignableFrom(entityConfig.getEntityClass())) {
+			entityType.getAttributes().stream().filter(a -> a.getValueType().isFileLinkType()).forEach(query::select);
+		}
+
+		EntityType testStep = getModelManager().getEntityType(TestStep.class);
+		EntityType measurement = getModelManager().getEntityType(Measurement.class);
+		EntityType channel = getModelManager().getEntityType(Channel.class);
+
+		EntityType unitUnderTest = getModelManager().getEntityType(ContextRoot.class, ContextType.UNITUNDERTEST);
+		EntityType testSequence = getModelManager().getEntityType(ContextRoot.class, ContextType.TESTSEQUENCE);
+		EntityType testEquipment = getModelManager().getEntityType(ContextRoot.class, ContextType.TESTEQUIPMENT);
+
+		// type in this list must be deleted AFTER this this instances have been
+		// deleted
+		// informative relation is considered as a child relation
+		List<EntityType> delayedDelete = new ArrayList<>();
+
+		// join context roots
+		if (measurement.equals(entityType) || testStep.equals(entityType)) {
+			query.join(entityType.getRelation(unitUnderTest), JoinType.OUTER).selectID(unitUnderTest);
+			query.join(entityType.getRelation(testSequence), JoinType.OUTER).selectID(testSequence);
+			query.join(entityType.getRelation(testEquipment), JoinType.OUTER).selectID(testEquipment);
+			delayedDelete.addAll(Arrays.asList(unitUnderTest, testSequence, testEquipment));
+		}
+
+		// join parameter sets
+		if (measurement.equals(entityType) || channel.equals(entityType)) {
+			EntityType parameterSet = getModelManager().getEntityType(ParameterSet.class);
+			query.join(entityType.getRelation(parameterSet), JoinType.OUTER).selectID(parameterSet);
+		}
+
+		Filter filter = Filter.or().ids(entityType, instanceIDs);
+		entityType.getParentRelations().stream().filter(r -> r.getTarget().equals(entityType))
+				.forEach(relation -> filter.ids(relation, instanceIDs));
+
+		// query child IDs
+		Map<EntityType, Set<String>> children = new HashMap<>();
+		for (Result result : query.fetch(filter)) {
+			// load children of other types
+			result.stream().filter(r -> r.getID() != null && r.getID().length() > 0).forEach(r -> {
+				children.computeIfAbsent(r.getEntityType(), k -> new HashSet<>()).add(r.getID());
+			});
+		}
+
+		// omit context roots with references to not removed measurements
+		if (!ignoreSiblings && measurement.equals(entityType)) {
+			for (EntityType contextRoot : Arrays.asList(unitUnderTest, testSequence, testEquipment)) {
+				Set<String> contextRootIDs = children.getOrDefault(contextRoot, Collections.emptySet());
+				if (contextRootIDs.isEmpty()) {
+					continue;
+				}
+
+				Query contextQuery = getQueryService().createQuery();
+				contextQuery.selectID(contextRoot, measurement);
+				contextQuery.join(contextRoot, measurement);
+
+				for (Result result : contextQuery.fetch(Filter.idsOnly(contextRoot, contextRootIDs))) {
+					if (instanceIDs.contains(result.getRecord(measurement).getID())) {
+						continue;
+					}
+
+					// context root references a not removed measurement
+					contextRootIDs.remove(result.getRecord(contextRoot).getID());
+				}
+			}
+		}
+
+		int amount = 0;
+		// delete real children
+		List<Entry<EntityType, Set<String>>> consideredChildren = new ArrayList<>();
+		for (Entry<EntityType, Set<String>> entry : children.entrySet()) {
+			EntityType childType = entry.getKey();
+			Set<String> childInstanceIDs = entry.getValue();
+			if (entityType.equals(childType)) {
+				childInstanceIDs.removeAll(instanceIDs);
+			} else if (delayedDelete.contains(entry.getKey())) {
+				consideredChildren.add(entry);
+				continue;
+			}
+			amount += delete(entry.getKey(), childInstanceIDs, true);
+		}
+
+		getApplElemAccess().deleteInstances(((ODSEntityType) entityType).getODSID(), toODSIDs(instanceIDs));
+
+		// delete considered children (informative relation)
+		for (Entry<EntityType, Set<String>> entry : consideredChildren) {
+			amount += delete(entry.getKey(), entry.getValue(), true);
+		}
+
+		return amount + instanceIDs.size();
+	}
+
+	/**
+	 * Converts given {@code Collection} of instance IDs to ODS a {@link T_LONGLONG}
+	 * array.
+	 *
+	 * @param instanceIDs The instance IDs.
+	 * @return The corresponding ODS {@code T_LONGLONG[]} is returned.
+	 */
+	private T_LONGLONG[] toODSIDs(Collection<String> instanceIDs) {
+		return instanceIDs.stream().map(ODSConverter::toODSID).toArray(T_LONGLONG[]::new);
+	}
+
+}
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/InsertStatement.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/InsertStatement.java
new file mode 100644
index 0000000..f71916c
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/InsertStatement.java
@@ -0,0 +1,277 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.api.atfxadapter.transaction;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.asam.ods.AIDName;
+import org.asam.ods.AIDNameValueSeqUnitId;
+import org.asam.ods.AoException;
+import org.asam.ods.ElemId;
+import org.asam.ods.T_LONGLONG;
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.Core;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.Relation;
+import org.eclipse.mdm.api.base.model.Deletable;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.FileLink;
+import org.eclipse.mdm.api.base.model.Sortable;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.query.Aggregation;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.base.query.Filter;
+import org.eclipse.mdm.api.base.query.Query;
+import org.eclipse.mdm.api.base.query.Record;
+import org.eclipse.mdm.api.base.query.Result;
+import org.eclipse.mdm.api.odsadapter.query.ODSEntityFactory;
+import org.eclipse.mdm.api.odsadapter.utils.ODSConverter;
+import org.eclipse.mdm.api.odsadapter.utils.ODSUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Insert statement is used to write new entities and their children.
+ *
+ * @see org.eclipse.mdm.api.odsadapter.transaction.InsertStatement
+ */
+final class InsertStatement extends BaseStatement {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(InsertStatement.class);
+
+	private final Map<Class<? extends Entity>, List<Entity>> childrenMap = new HashMap<>();
+	private final List<Core> cores = new ArrayList<>();
+	private final Map<String, List<Value>> insertMap = new HashMap<>();
+
+	private final List<FileLink> fileLinkToUpload = new ArrayList<>();
+
+	private final Map<String, SortIndexTestSteps> sortIndexTestSteps = new HashMap<>();
+	private boolean loadSortIndex;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param transaction The owning {@link ATFXTransaction}.
+	 * @param entityType  The associated {@link EntityType}.
+	 */
+	InsertStatement(ATFXTransaction transaction, EntityType entityType) {
+		super(transaction, entityType);
+
+		loadSortIndex = getModelManager().getEntityType(TestStep.class).equals(getEntityType());
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void execute(Collection<Entity> entities) throws AoException, DataAccessException, IOException {
+		entities.stream().map(ODSEntityFactory::extract).forEach(this::readEntityCore);
+		execute();
+	}
+
+	/**
+	 * Executes this statement for given {@link Core}s.
+	 *
+	 * @param cores The processed {@code Core}s.
+	 * @throws AoException         Thrown if the execution fails.
+	 * @throws DataAccessException Thrown if the execution fails.
+	 * @throws IOException         Thrown if a file transfer operation fails.
+	 */
+	public void executeWithCores(Collection<Core> cores) throws AoException, DataAccessException, IOException {
+		cores.forEach(this::readEntityCore);
+		execute();
+	}
+
+	/**
+	 * Uploads new {@link FileLink}s, adjusts sort indices for new {@link TestStep}
+	 * entities and writes collected insertion data at once. Once new entities are
+	 * written their children are created by delegation to the
+	 * {@link ATFXTransaction}.
+	 *
+	 * @throws AoException         Thrown if the execution fails.
+	 * @throws DataAccessException Thrown if the execution fails.
+	 * @throws IOException         Thrown if a file transfer operation fails.
+	 */
+	private void execute() throws AoException, DataAccessException, IOException {
+		List<AIDNameValueSeqUnitId> anvsuList = new ArrayList<>();
+		T_LONGLONG aID = getEntityType().getODSID();
+
+		// TODO tracing progress in this method...
+
+		if (loadSortIndex && !sortIndexTestSteps.isEmpty()) {
+			adjustMissingSortIndices();
+		}
+
+		for (Entry<String, List<Value>> entry : insertMap.entrySet()) {
+			Attribute attribute = getEntityType().getAttribute(entry.getKey());
+
+			AIDNameValueSeqUnitId anvsu = new AIDNameValueSeqUnitId();
+			anvsu.attr = new AIDName(aID, entry.getKey());
+			anvsu.unitId = ODSConverter.toODSLong(0);
+			anvsu.values = ODSConverter.toODSValueSeq(attribute, entry.getValue());
+			anvsuList.add(anvsu);
+		}
+
+		long start = System.currentTimeMillis();
+		ElemId[] elemIds = getApplElemAccess()
+				.insertInstances(anvsuList.toArray(new AIDNameValueSeqUnitId[anvsuList.size()]));
+		for (int i = 0; i < elemIds.length; i++) {
+			cores.get(i).setID(Long.toString(ODSConverter.fromODSLong(elemIds[i].iid)));
+		}
+		long stop = System.currentTimeMillis();
+
+		LOGGER.debug("{} " + getEntityType() + " instances created in {} ms.", elemIds.length, stop - start);
+
+		for (List<Entity> children : childrenMap.values()) {
+			getTransaction().create(children);
+		}
+	}
+
+	/**
+	 * Reads given {@link Core} and prepares its data to be written:
+	 *
+	 * <ul>
+	 * <li>collect new {@link FileLink}s</li>
+	 * <li>trace missing sort indices of TestSteps</li>
+	 * <li>collect property {@link Value}s</li>
+	 * <li>collect foreign key {@code Value}s</li>
+	 * <li>collect child entities for recursive creation</li>
+	 * </ul>
+	 *
+	 * @param core The {@code Core}.
+	 */
+	private void readEntityCore(Core core) {
+		if (!core.getTypeName().equals(getEntityType().getName())) {
+			throw new IllegalArgumentException("Entity core '" + core.getTypeName()
+					+ "' is incompatible with current insert statement for entity type '" + getEntityType() + "'.");
+		}
+
+		cores.add(core);
+
+		if (loadSortIndex) {
+			if ((Integer) core.getValues().get(Sortable.ATTR_SORT_INDEX).extract() < 0) {
+				sortIndexTestSteps.computeIfAbsent(core.getPermanentStore().get(Test.class).getID(),
+						k -> new SortIndexTestSteps()).testStepCores.add(core);
+			}
+		}
+
+		// add all entity values
+		for (Value value : core.getAllValues().values()) {
+			insertMap.computeIfAbsent(value.getName(), k -> new ArrayList<>()).add(value);
+		}
+
+		// collect file links
+		fileLinkToUpload.addAll(core.getAddedFileLinks());
+
+		// define "empty" values for informative relations
+		for (Relation relation : getEntityType().getInfoRelations()) {
+			insertMap.computeIfAbsent(relation.getName(), k -> new ArrayList<>()).add(relation.createValue());
+		}
+
+		// define "empty" values for parent relations
+		for (Relation relation : getEntityType().getParentRelations()) {
+			insertMap.computeIfAbsent(relation.getName(), k -> new ArrayList<>()).add(relation.createValue());
+		}
+
+		// replace "empty" relation values with corresponding instance IDs
+		setRelationIDs(core.getMutableStore().getCurrent());
+		setRelationIDs(core.getPermanentStore().getCurrent());
+
+		for (Entry<Class<? extends Deletable>, List<? extends Deletable>> entry : core.getChildrenStore().getCurrent()
+				.entrySet()) {
+			childrenMap.computeIfAbsent(entry.getKey(), k -> new ArrayList<>()).addAll(entry.getValue());
+		}
+
+		getTransaction().addModified(core);
+		getTransaction().addCreated(core);
+	}
+
+	/**
+	 * Overwrites empty foreign key {@link Value} containers.
+	 *
+	 * @param relatedEntities The related {@link Entity}s.
+	 */
+	private void setRelationIDs(Collection<Entity> relatedEntities) {
+		for (Entity relatedEntity : relatedEntities) {
+			if (!ODSUtils.isValidID(relatedEntity.getID())) {
+				throw new IllegalArgumentException("Related entity must be a persited entity.");
+			}
+
+			Relation relation = getEntityType().getRelation(getModelManager().getEntityType(relatedEntity));
+			List<Value> relationValues = insertMap.get(relation.getName());
+			if (relationValues == null) {
+				throw new IllegalStateException("Relation '" + relation + "' is incompatible with insert statement "
+						+ "for entity type '" + getEntityType() + "'");
+			}
+			relationValues.get(relationValues.size() - 1).set(relatedEntity.getID());
+		}
+	}
+
+	/**
+	 * Adjusts missing sort indices for {@link TestStep}s by querying last used max
+	 * sort index.
+	 *
+	 * @throws DataAccessException Thrown if unable to query used sort indices.
+	 */
+	private void adjustMissingSortIndices() throws DataAccessException {
+		EntityType testStep = getEntityType();
+		EntityType test = getModelManager().getEntityType(Test.class);
+		Relation parentRelation = testStep.getRelation(test);
+
+		Attribute attrSortIndex = testStep.getAttribute(Sortable.ATTR_SORT_INDEX);
+		Query query = getQueryService().createQuery().select(parentRelation.getAttribute())
+				.select(attrSortIndex, Aggregation.MAXIMUM).group(parentRelation.getAttribute());
+
+		Filter filter = Filter.idsOnly(parentRelation, sortIndexTestSteps.keySet());
+		for (Result result : query.fetch(filter)) {
+			Record record = result.getRecord(testStep);
+			int sortIndex = result.getValue(attrSortIndex, Aggregation.MAXIMUM).extract();
+			sortIndexTestSteps.remove(record.getID(parentRelation).get()).setIndices(sortIndex + 1);
+		}
+
+		// start at 1 for all remaining
+		sortIndexTestSteps.values().forEach(tss -> tss.setIndices(0));
+	}
+
+	/**
+	 * Utility class to write missing sort index of new {@link TestStep}s.
+	 */
+	private static final class SortIndexTestSteps {
+
+		private List<Core> testStepCores = new ArrayList<>();
+
+		/**
+		 * Assigns sort indices to {@link Core}s starting at given index.
+		 *
+		 * @param startIndex The start index.
+		 */
+		private void setIndices(int startIndex) {
+			int index = startIndex;
+			for (Core core : testStepCores) {
+				core.getValues().get(Sortable.ATTR_SORT_INDEX).set(index++);
+			}
+		}
+
+	}
+
+}
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/UpdateStatement.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/UpdateStatement.java
new file mode 100644
index 0000000..c8b0a28
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/UpdateStatement.java
@@ -0,0 +1,225 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.api.atfxadapter.transaction;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+
+import org.asam.ods.AIDName;
+import org.asam.ods.AIDNameValueSeqUnitId;
+import org.asam.ods.AoException;
+import org.asam.ods.T_LONGLONG;
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.Core;
+import org.eclipse.mdm.api.base.adapter.EntityStore;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.Relation;
+import org.eclipse.mdm.api.base.model.Deletable;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.FileLink;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.odsadapter.query.ODSEntityFactory;
+import org.eclipse.mdm.api.odsadapter.utils.ODSConverter;
+import org.eclipse.mdm.api.odsadapter.utils.ODSUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Insert statement is used to update entities and their children.
+ *
+ * @see org.eclipse.mdm.api.odsadapter.transaction.UpdateStatement
+ */
+final class UpdateStatement extends BaseStatement {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(UpdateStatement.class);
+
+	private final Map<Class<? extends Entity>, List<Entity>> childrenToCreate = new HashMap<>();
+	private final Map<Class<? extends Entity>, List<Entity>> childrenToUpdate = new HashMap<>();
+	private final Map<Class<? extends Deletable>, List<Deletable>> childrenToRemove = new HashMap<>();
+	private Map<String, List<Value>> updateMap = new HashMap<>();
+
+	private final List<String> nonUpdatableRelationNames;
+	private final boolean ignoreChildren;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param transaction    The owning {@link ATFXTransaction}.
+	 * @param entityType     The associated {@link EntityType}.
+	 * @param ignoreChildren If {@code true}, then child entities won't be
+	 *                       processed.
+	 */
+	UpdateStatement(ATFXTransaction transaction, EntityType entityType, boolean ignoreChildren) {
+		super(transaction, entityType);
+
+		nonUpdatableRelationNames = entityType.getInfoRelations().stream().map(Relation::getName)
+				.collect(Collectors.toList());
+		this.ignoreChildren = ignoreChildren;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void execute(Collection<Entity> entities) throws AoException, DataAccessException, IOException {
+		for (Entity entity : entities) {
+			readEntityCore(ODSEntityFactory.extract(entity));
+		}
+
+		// TODO tracing progress in this method...
+
+		List<AIDNameValueSeqUnitId> anvsuList = new ArrayList<>();
+		T_LONGLONG aID = getEntityType().getODSID();
+
+		for (Entry<String, List<Value>> entry : updateMap.entrySet()) {
+			if (nonUpdatableRelationNames.contains(entry.getKey())) {
+				// skip "empty" informative relation sequence
+				continue;
+			}
+
+			Attribute attribute = getEntityType().getAttribute(entry.getKey());
+
+			AIDNameValueSeqUnitId anvsu = new AIDNameValueSeqUnitId();
+			anvsu.attr = new AIDName(aID, entry.getKey());
+			anvsu.unitId = ODSConverter.toODSLong(0);
+			anvsu.values = ODSConverter.toODSValueSeq(attribute, entry.getValue());
+			anvsuList.add(anvsu);
+		}
+
+		long start = System.currentTimeMillis();
+		getApplElemAccess().updateInstances(anvsuList.toArray(new AIDNameValueSeqUnitId[anvsuList.size()]));
+		long stop = System.currentTimeMillis();
+
+		LOGGER.debug("{} " + getEntityType() + " instances updated in {} ms.", entities.size(), stop - start);
+
+		// delete first to make sure naming collisions do not occur!
+		for (List<Deletable> children : childrenToRemove.values()) {
+			getTransaction().delete(children);
+		}
+		for (List<Entity> children : childrenToCreate.values()) {
+			getTransaction().create(children);
+		}
+		for (List<Entity> children : childrenToUpdate.values()) {
+			getTransaction().update(children);
+		}
+	}
+
+	/**
+	 * Reads given {@link Core} and prepares its data to be written:
+	 *
+	 * <ul>
+	 * <li>collect new and removed {@link FileLink}s</li>
+	 * <li>collect property {@link Value}s</li>
+	 * <li>collect foreign key {@code Value}s</li>
+	 * <li>collect child entities for recursive create/update/delete</li>
+	 * </ul>
+	 *
+	 * @param core The {@code Core}.
+	 * @throws DataAccessException Thrown in case of errors.
+	 */
+	private void readEntityCore(Core core) throws DataAccessException {
+		if (!core.getTypeName().equals(getEntityType().getName())) {
+			throw new IllegalArgumentException("Entity core '" + core.getTypeName()
+					+ "' is incompatible with current update statement for entity type '" + getEntityType() + "'.");
+		}
+
+		// add all entity values
+		for (Value value : core.getAllValues().values()) {
+			updateMap.computeIfAbsent(value.getName(), k -> new ArrayList<>()).add(value);
+		}
+
+		updateMap.computeIfAbsent(getEntityType().getIDAttribute().getName(), k -> new ArrayList<>())
+				.add(getEntityType().getIDAttribute().createValue(core.getID()));
+
+		// define "empty" values for ALL informative relations
+		for (Relation relation : getEntityType().getInfoRelations()) {
+			updateMap.computeIfAbsent(relation.getName(), k -> new ArrayList<>()).add(relation.createValue());
+		}
+
+		// preserve "empty" relation values for removed related entities
+		EntityStore mutableStore = core.getMutableStore();
+		mutableStore.getRemoved().stream().map(e -> getModelManager().getEntityType(e))
+				.map(getEntityType()::getRelation).map(Relation::getName).forEach(nonUpdatableRelationNames::remove);
+
+		// replace "empty" relation values with corresponding instance IDs
+		setRelationIDs(mutableStore.getCurrent());
+
+		collectChildEntities(core);
+
+		getTransaction().addModified(core);
+	}
+
+	/**
+	 * Collects child entities for recursive processing.
+	 *
+	 * @param core The {@link Core}.
+	 */
+	private void collectChildEntities(Core core) {
+		if (ignoreChildren) {
+			return;
+		}
+
+		for (Entry<Class<? extends Deletable>, List<? extends Deletable>> entry : core.getChildrenStore().getCurrent()
+				.entrySet()) {
+			Map<Boolean, List<Entity>> partition = entry.getValue().stream()
+					.collect(Collectors.partitioningBy(e -> ODSUtils.isValidID(e.getID())));
+			List<Entity> virtualEntities = partition.get(Boolean.FALSE);
+			if (virtualEntities != null && !virtualEntities.isEmpty()) {
+				childrenToCreate.computeIfAbsent(entry.getKey(), k -> new ArrayList<>()).addAll(virtualEntities);
+			}
+			List<Entity> existingEntities = partition.get(Boolean.TRUE);
+			if (existingEntities != null && !existingEntities.isEmpty()) {
+				childrenToUpdate.computeIfAbsent(entry.getKey(), k -> new ArrayList<>()).addAll(existingEntities);
+			}
+		}
+
+		for (Entry<Class<? extends Deletable>, List<? extends Deletable>> entry : core.getChildrenStore().getRemoved()
+				.entrySet()) {
+			List<Deletable> toDelete = entry.getValue().stream().filter(e -> ODSUtils.isValidID(e.getID()))
+					.collect(Collectors.toList());
+			childrenToRemove.computeIfAbsent(entry.getKey(), k -> new ArrayList<>()).addAll(toDelete);
+		}
+	}
+
+	/**
+	 * Overwrites empty foreign key {@link Value} containers.
+	 *
+	 * @param relatedEntities The related {@link Entity}s.
+	 */
+	private void setRelationIDs(Collection<Entity> relatedEntities) {
+		for (Entity relatedEntity : relatedEntities) {
+			if (!ODSUtils.isValidID(relatedEntity.getID())) {
+				throw new IllegalArgumentException("Related entity must be a persited entity.");
+			}
+
+			Relation relation = getEntityType().getRelation(getModelManager().getEntityType(relatedEntity));
+			List<Value> relationValues = updateMap.get(relation.getName());
+			if (relationValues == null) {
+				throw new IllegalStateException("Relation '" + relation
+						+ "' is incompatible with update statement for entity type '" + getEntityType() + "'");
+			}
+			relationValues.get(relationValues.size() - 1).set(relatedEntity.getID());
+			nonUpdatableRelationNames.remove(relation.getName());
+		}
+	}
+
+}
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/WriteRequestHandler.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/WriteRequestHandler.java
new file mode 100644
index 0000000..61cd5a0
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/WriteRequestHandler.java
@@ -0,0 +1,147 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.api.atfxadapter.transaction;
+
+import java.io.IOException;
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.IntStream;
+
+import org.asam.ods.AoException;
+import org.eclipse.mdm.api.base.adapter.Core;
+import org.eclipse.mdm.api.base.adapter.DefaultCore;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.massdata.WriteRequest;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.odsadapter.utils.ODSConverter;
+
+/**
+ * Writes mass data specified in {@link WriteRequest}s.
+ *
+ * @see org.eclipse.mdm.api.odsadapter.transaction.WriteRequestHandler
+ */
+public final class WriteRequestHandler {
+
+	private static final String AE_LC_ATTR_INDEPENDENT = "IndependentFlag";
+	private static final String AE_LC_ATTR_REPRESENTATION = "SequenceRepresentation";
+	private static final String AE_LC_ATTR_PARAMETERS = "GenerationParameters";
+	private static final String AE_LC_ATTR_RAWDATATYPE = "RawDatatype";
+	private static final String AE_LC_ATTR_AXISTYPE = "axistype";
+	private static final String AE_LC_ATTR_VALUES = "Values";
+	private static final String AE_LC_ATTR_FLAGS = "Flags";
+	private static final String AE_LC_ATTR_GLOBAL_FLAG = "GlobalFlag";
+
+	private final List<Core> cores = new ArrayList<>();
+	private final EntityType localColumnEntityType;
+	private final InsertStatement insertStatement;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param transaction The owning {@link ATFXTransaction}.
+	 */
+	public WriteRequestHandler(ATFXTransaction transaction) {
+		localColumnEntityType = transaction.getModelManager().getEntityType("LocalColumn");
+		insertStatement = new InsertStatement(transaction, localColumnEntityType);
+	}
+
+	/**
+	 * Adds given {@link WriteRequest} to be processed.
+	 *
+	 * @param writeRequest The {@code WriteRequest}.
+	 */
+	public void addRequest(WriteRequest writeRequest) {
+		cores.add(createCore(writeRequest));
+	}
+
+	/**
+	 * Imports given mass data configurations.
+	 *
+	 * @throws AoException         Thrown if the execution fails.
+	 * @throws DataAccessException Thrown if the execution fails.
+	 * @throws IOException         Thrown if a file transfer operation fails.
+	 */
+	public void execute() throws AoException, DataAccessException, IOException {
+		insertStatement.executeWithCores(cores);
+	}
+
+	/**
+	 * Reads given {@link WriteRequest} and prepares a corresponding {@link Core}
+	 * for import.
+	 *
+	 * @param writeRequest The mass data configuration.
+	 * @return The created {@code Core} is returned.
+	 */
+	private Core createCore(WriteRequest writeRequest) {
+		Core core = new DefaultCore(localColumnEntityType);
+
+		core.getPermanentStore().set(writeRequest.getChannelGroup());
+		core.getMutableStore().set(writeRequest.getChannel());
+
+		Map<String, Value> values = core.getValues();
+		values.get(Entity.ATTR_NAME).set(writeRequest.getChannel().getName());
+		values.get(Entity.ATTR_MIMETYPE).set("application/x-asam.aolocalcolumn");
+		values.get(AE_LC_ATTR_INDEPENDENT).set((short) (writeRequest.isIndependent() ? 1 : 0));
+		values.get(AE_LC_ATTR_RAWDATATYPE).set(writeRequest.getRawScalarType());
+		values.get(AE_LC_ATTR_REPRESENTATION).set(writeRequest.getSequenceRepresentation());
+		values.get(AE_LC_ATTR_AXISTYPE).set(writeRequest.getAxisType());
+		values.get(AE_LC_ATTR_PARAMETERS).set(writeRequest.getGenerationParameters());
+
+		if (writeRequest.hasValues()) {
+			ValueType<?> valueType = writeRequest.getRawScalarType().toValueType();
+			String unitName = writeRequest.getChannel().getUnit().getName();
+			values.put(AE_LC_ATTR_VALUES,
+					valueType.create(AE_LC_ATTR_VALUES, unitName, true, writeRequest.getValues()));
+
+			// OpenATFX issue: For "implicit" columns, if no value for the
+			// GenerationParameters attribute is present,
+			// it is attempted to transfer the local column values (through which the
+			// generation parameters are
+			// available in these cases) to the GenerationParameters attribute without
+			// converting them to the
+			// correct DS_DOUBLE data type first (unless it is a DOUBLE or LONG column),
+			// resulting in an exception.
+			// Hence, supply correctly converted generation parameters as a workaround:
+			if (writeRequest.getSequenceRepresentation().isImplicit()) {
+				Object genParamValues = writeRequest.getValues();
+				double[] genParamD = new double[Array.getLength(genParamValues)];
+				IntStream.range(0, genParamD.length)
+						.forEach(i -> genParamD[i] = ((Number) Array.get(genParamValues, i)).doubleValue());
+				values.get(AE_LC_ATTR_PARAMETERS).set(genParamD);
+			}
+
+			// flags
+			if (writeRequest.areAllValid()) {
+				values.get(AE_LC_ATTR_GLOBAL_FLAG).set((short) 15);
+			} else {
+				short[] flags = ODSConverter.toODSValidFlagSeq(writeRequest.getFlags());
+				values.get(AE_LC_ATTR_FLAGS).set(flags);
+			}
+		} else if (writeRequest.hasExternalComponents()) {
+			// TODO
+			throw new UnsupportedOperationException("NOT YET IMPLEMENTED.");
+		} else {
+			throw new IllegalStateException("Given write request neither has measured values nor external components");
+		}
+
+		return core;
+	}
+
+}
diff --git a/org.eclipse.mdm.api.atfxadapter/src/test/java/org/eclipse/mdm/api/atfxadapter/AtfxAdaperTest.java b/org.eclipse.mdm.api.atfxadapter/src/test/java/org/eclipse/mdm/api/atfxadapter/AtfxAdaperTest.java
new file mode 100644
index 0000000..10aec8a
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/test/java/org/eclipse/mdm/api/atfxadapter/AtfxAdaperTest.java
@@ -0,0 +1,225 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.api.atfxadapter;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.List;
+import java.util.Map;
+
+import org.assertj.core.api.Assertions;
+import org.assertj.core.groups.Tuple;
+import org.eclipse.mdm.api.base.ConnectionException;
+import org.eclipse.mdm.api.base.massdata.ReadRequest;
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.FileLink;
+import org.eclipse.mdm.api.base.model.MeasuredValues;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.MimeType;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.Project;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.common.collect.ImmutableMap;
+
+public class AtfxAdaperTest {
+
+	public static final String ATFX_FILE = "src/test/resources/Right_Acc.atfx";
+
+	public static ApplicationContext context;
+
+	@BeforeClass
+	public static void init() throws ConnectionException {
+		Map<String, String> map = ImmutableMap.of("atfxfile", ATFX_FILE, "freetext.active", "false");
+
+		context = new ATFXContextFactory().connect(map);
+	}
+
+	@AfterClass
+	public static void teardown() throws ConnectionException {
+		context.close();
+	}
+
+	@org.junit.Test
+	public void testLoadLoggedOnUser() {
+		EntityManager em = context.getEntityManager().get();
+
+		assertThat(em.loadLoggedOnUser()).isNotNull();
+		;
+	}
+
+	@org.junit.Test
+	public void testLoadEnvironment() {
+		EntityManager em = context.getEntityManager().get();
+
+		assertThat(em.loadEnvironment().getName()).isEqualTo("MDM");
+	}
+
+	@org.junit.Test
+	public void testLoadAllProjects() {
+
+		EntityManager em = context.getEntityManager().get();
+
+		assertThat(em.loadAll(Project.class)).extracting(Project::getName).contains("PMV Model P");
+	}
+
+	@org.junit.Test
+	public void testLoadAllTests() {
+
+		EntityManager em = context.getEntityManager().get();
+
+		assertThat(em.loadAll(Test.class)).extracting(Test::getName).contains("PBN_UNECE_R51_20140314170907");
+	}
+
+	@org.junit.Test
+	public void testLoadAllTestSteps() {
+
+		EntityManager em = context.getEntityManager().get();
+
+		assertThat(em.loadAll(TestStep.class)).extracting(TestStep::getName).contains("PBN_UNECE_R51_Right_Acc_70");
+	}
+
+	@org.junit.Test
+	public void testLoadTestStepWithExtRef() {
+
+		EntityManager em = context.getEntityManager().get();
+
+		assertThat(em.load(TestStep.class, "1").getFileLinks())
+				.extracting(FileLink::getFileName, FileLink::getDescription, FileLink::getMimeType)
+				.contains(Tuple.tuple("extref.txt", "a simple text file", new MimeType("text/plain")),
+						Tuple.tuple("openmdm.png", "openMDM Logo", new MimeType("image/png")));
+	}
+
+	@org.junit.Test
+	public void testLoadAllMeasurements() {
+
+		EntityManager em = context.getEntityManager().get();
+		assertThat(em.loadAll(Measurement.class)).extracting(Measurement::getName).contains("Channel");
+	}
+
+	@org.junit.Test
+	public void testLoadParent() {
+
+		EntityManager em = context.getEntityManager().get();
+		Measurement meaResult = em.loadAll(Measurement.class).get(0);
+
+		assertThat(em.loadParent(meaResult, TestStep.class).get()).extracting(TestStep::getName)
+				.contains("PBN_UNECE_R51_Right_Acc_70");
+	}
+
+	@org.junit.Test
+	public void testLoadChildren() {
+
+		EntityManager em = context.getEntityManager().get();
+		Test test = em.loadAll(Test.class).get(0);
+
+		assertThat(em.loadChildren(test, TestStep.class).get(0)).extracting(TestStep::getName)
+				.contains("PBN_UNECE_R51_Right_Acc_70");
+	}
+
+	@org.junit.Test
+	public void testLoadChildrenForChannelGroup() {
+
+		EntityManager em = context.getEntityManager().get();
+		ChannelGroup channelGroup = em.loadAll(ChannelGroup.class).get(0);
+
+		assertThat(em.loadChildren(channelGroup, Channel.class)).extracting(Channel::getName).contains("X-Axis",
+				"CHANNEL01", "CHANNEL02", "CHANNEL03", "CHANNEL04", "CHANNEL05", "CHANNEL06", "CHANNEL07", "CHANNEL08",
+				"CHANNEL09", "CHANNEL10");
+	}
+
+	@org.junit.Test
+	public void testLoadChildrenForChannelGroupWithPattern() {
+
+		EntityManager em = context.getEntityManager().get();
+		ChannelGroup channelGroup = em.loadAll(ChannelGroup.class).get(0);
+
+		Assertions.assertThatThrownBy(() -> em.loadChildren(channelGroup, Channel.class, "*Axis"))
+				.isInstanceOf(DataAccessException.class).hasMessageContaining("not supported");
+
+		// assertThat(em.loadChildren(channelGroup, Channel.class,
+		// "*Axis")).extracting(Channel::getName)
+		// .contains("X-Axis", "CHANNEL01", "CHANNEL02", "CHANNEL03", "CHANNEL04",
+		// "CHANNEL05", "CHANNEL06", "CHANNEL07", "CHANNEL08", "CHANNEL09",
+		// "CHANNEL10");
+	}
+
+	@org.junit.Test
+	public void testLoadParentForChannel() {
+
+		EntityManager em = context.getEntityManager().get();
+		Channel channel = em.loadAll(Channel.class).get(0);
+
+		assertThat(em.loadParent(channel, ChannelGroup.class).get()).extracting(ChannelGroup::getName)
+				.contains("Channel");
+	}
+
+	@org.junit.Test
+	public void testLoadAllChannelGroups() {
+
+		EntityManager em = context.getEntityManager().get();
+
+		assertThat(em.loadAll(ChannelGroup.class)).extracting(ChannelGroup::getName).contains("Channel");
+	}
+
+	@org.junit.Test
+	public void testLoadAllChannels() {
+
+		EntityManager em = context.getEntityManager().get();
+
+		assertThat(em.loadAll(Channel.class)).extracting(Channel::getName).contains("X-Axis", "CHANNEL01", "CHANNEL02",
+				"CHANNEL03", "CHANNEL04", "CHANNEL05", "CHANNEL06", "CHANNEL07", "CHANNEL08", "CHANNEL09", "CHANNEL10");
+	}
+
+	@org.junit.Test
+	public void testLoadAllContext() {
+
+		EntityManager em = context.getEntityManager().get();
+
+		List<Measurement> measurements = em.loadAll(Measurement.class);
+		assertThat(measurements).hasSize(1);
+
+		Map<ContextType, ContextRoot> context = em.loadContexts(measurements.get(0));
+		assertThat(context.get(ContextType.UNITUNDERTEST).getContextComponents()).extracting(cc -> cc.getName())
+				.contains("FL_tyre");
+
+		assertThat(context.get(ContextType.UNITUNDERTEST).getContextComponents().get(0).getValues()).hasSize(7)
+				.containsEntry("Name", ValueType.STRING.create("Name", "FL_tyre"))
+				.containsEntry("axle", ValueType.SHORT.create("axle", (short) 1))
+				.containsEntry("side", ValueType.STRING.create("side", "Left"))
+				.containsEntry("manufacturer", ValueType.STRING.create("manufacturer", "Tunnelsand"));
+
+	}
+
+	@org.junit.Test
+	public void testReadMeasuredValues() {
+		EntityManager em = context.getEntityManager().get();
+
+		List<ChannelGroup> listCg = em.loadAll(ChannelGroup.class);
+		assertThat(listCg).hasSize(1);
+
+		List<MeasuredValues> values = em
+				.readMeasuredValues(ReadRequest.create(listCg.get(0)).allChannels().allValues());
+		assertThat(values).extracting(mv -> mv.getLength()).containsOnly(3001);
+	}
+}
diff --git a/org.eclipse.mdm.api.atfxadapter/src/test/java/org/eclipse/mdm/api/atfxadapter/AtfxAdapterTest.java b/org.eclipse.mdm.api.atfxadapter/src/test/java/org/eclipse/mdm/api/atfxadapter/AtfxAdapterTest.java
new file mode 100644
index 0000000..2ded697
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/test/java/org/eclipse/mdm/api/atfxadapter/AtfxAdapterTest.java
@@ -0,0 +1,211 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.api.atfxadapter;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.List;
+import java.util.Map;
+
+import org.assertj.core.api.Assertions;
+import org.eclipse.mdm.api.base.ConnectionException;
+import org.eclipse.mdm.api.base.massdata.ReadRequest;
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.MeasuredValues;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.Project;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.common.collect.ImmutableMap;
+
+public class AtfxAdapterTest {
+
+	public static final String ATFX_FILE = "src/test/resources/Right_Acc.atfx";
+
+	public static ApplicationContext context;
+
+	@BeforeClass
+	public static void init() throws ConnectionException {
+		Map<String, String> map = ImmutableMap.of("atfxfile", ATFX_FILE, "freetext.active", "false");
+
+		context = new ATFXContextFactory().connect(map);
+	}
+
+	@AfterClass
+	public static void teardown() throws ConnectionException {
+		context.close();
+	}
+
+	@org.junit.Test
+	public void testLoadLoggedOnUser() {
+		EntityManager em = context.getEntityManager().get();
+
+		assertThat(em.loadLoggedOnUser()).isNotNull();
+		;
+	}
+
+	@org.junit.Test
+	public void testLoadEnvironment() {
+		EntityManager em = context.getEntityManager().get();
+
+		assertThat(em.loadEnvironment().getName()).isEqualTo("MDM");
+	}
+
+	@org.junit.Test
+	public void testLoadAllProjects() {
+
+		EntityManager em = context.getEntityManager().get();
+
+		assertThat(em.loadAll(Project.class)).extracting(Project::getName).contains("PMV Model P");
+	}
+
+	@org.junit.Test
+	public void testLoadAllTests() {
+
+		EntityManager em = context.getEntityManager().get();
+
+		assertThat(em.loadAll(Test.class)).extracting(Test::getName).contains("PBN_UNECE_R51_20140314170907");
+	}
+
+	@org.junit.Test
+	public void testLoadAllTestSteps() {
+
+		EntityManager em = context.getEntityManager().get();
+
+		assertThat(em.loadAll(TestStep.class)).extracting(TestStep::getName).contains("PBN_UNECE_R51_Right_Acc_70");
+	}
+
+	@org.junit.Test
+	public void testLoadAllMeasurements() {
+
+		EntityManager em = context.getEntityManager().get();
+		assertThat(em.loadAll(Measurement.class)).extracting(Measurement::getName).contains("Channel");
+	}
+
+	@org.junit.Test
+	public void testLoadParent() {
+
+		EntityManager em = context.getEntityManager().get();
+		Measurement meaResult = em.loadAll(Measurement.class).get(0);
+
+		assertThat(em.loadParent(meaResult, TestStep.class).get()).extracting(TestStep::getName)
+				.contains("PBN_UNECE_R51_Right_Acc_70");
+	}
+
+	@org.junit.Test
+	public void testLoadChildren() {
+
+		EntityManager em = context.getEntityManager().get();
+		Test test = em.loadAll(Test.class).get(0);
+
+		assertThat(em.loadChildren(test, TestStep.class).get(0)).extracting(TestStep::getName)
+				.contains("PBN_UNECE_R51_Right_Acc_70");
+	}
+
+	@org.junit.Test
+	public void testLoadChildrenForChannelGroup() {
+
+		EntityManager em = context.getEntityManager().get();
+		ChannelGroup channelGroup = em.loadAll(ChannelGroup.class).get(0);
+
+		assertThat(em.loadChildren(channelGroup, Channel.class)).extracting(Channel::getName).contains("X-Axis",
+				"CHANNEL01", "CHANNEL02", "CHANNEL03", "CHANNEL04", "CHANNEL05", "CHANNEL06", "CHANNEL07", "CHANNEL08",
+				"CHANNEL09", "CHANNEL10");
+	}
+
+	@org.junit.Test
+	public void testLoadChildrenForChannelGroupWithPattern() {
+
+		EntityManager em = context.getEntityManager().get();
+		ChannelGroup channelGroup = em.loadAll(ChannelGroup.class).get(0);
+
+		Assertions.assertThatThrownBy(() -> em.loadChildren(channelGroup, Channel.class, "*Axis"))
+				.isInstanceOf(DataAccessException.class).hasMessageContaining("not supported");
+
+		// assertThat(em.loadChildren(channelGroup, Channel.class,
+		// "*Axis")).extracting(Channel::getName)
+		// .contains("X-Axis", "CHANNEL01", "CHANNEL02", "CHANNEL03", "CHANNEL04",
+		// "CHANNEL05", "CHANNEL06", "CHANNEL07", "CHANNEL08", "CHANNEL09",
+		// "CHANNEL10");
+	}
+
+	@org.junit.Test
+	public void testLoadParentForChannel() {
+
+		EntityManager em = context.getEntityManager().get();
+		Channel channel = em.loadAll(Channel.class).get(0);
+
+		assertThat(em.loadParent(channel, ChannelGroup.class).get()).extracting(ChannelGroup::getName)
+				.contains("Channel");
+	}
+
+	@org.junit.Test
+	public void testLoadAllChannelGroups() {
+
+		EntityManager em = context.getEntityManager().get();
+
+		assertThat(em.loadAll(ChannelGroup.class)).extracting(ChannelGroup::getName).contains("Channel");
+	}
+
+	@org.junit.Test
+	public void testLoadAllChannels() {
+
+		EntityManager em = context.getEntityManager().get();
+
+		assertThat(em.loadAll(Channel.class)).extracting(Channel::getName).contains("X-Axis", "CHANNEL01", "CHANNEL02",
+				"CHANNEL03", "CHANNEL04", "CHANNEL05", "CHANNEL06", "CHANNEL07", "CHANNEL08", "CHANNEL09", "CHANNEL10");
+	}
+
+	@org.junit.Test
+	public void testLoadAllContext() {
+
+		EntityManager em = context.getEntityManager().get();
+
+		List<Measurement> measurements = em.loadAll(Measurement.class);
+		assertThat(measurements).hasSize(1);
+
+		Map<ContextType, ContextRoot> context = em.loadContexts(measurements.get(0));
+		assertThat(context.get(ContextType.UNITUNDERTEST).getContextComponents()).extracting(cc -> cc.getName())
+				.contains("FL_tyre");
+
+		assertThat(context.get(ContextType.UNITUNDERTEST).getContextComponents().get(0).getValues()).hasSize(7)
+				.containsEntry("Name", ValueType.STRING.create("Name", "FL_tyre"))
+				.containsEntry("axle", ValueType.SHORT.create("axle", (short) 1))
+				.containsEntry("side", ValueType.STRING.create("side", "Left"))
+				.containsEntry("manufacturer", ValueType.STRING.create("manufacturer", "Tunnelsand"));
+
+	}
+
+	@org.junit.Test
+	public void testReadMeasuredValues() {
+		EntityManager em = context.getEntityManager().get();
+
+		List<ChannelGroup> listCg = em.loadAll(ChannelGroup.class);
+		assertThat(listCg).hasSize(1);
+
+		List<MeasuredValues> values = em
+				.readMeasuredValues(ReadRequest.create(listCg.get(0)).allChannels().allValues());
+		assertThat(values).extracting(mv -> mv.getLength()).containsOnly(3001);
+	}
+}
diff --git a/org.eclipse.mdm.api.atfxadapter/src/test/java/org/eclipse/mdm/api/atfxadapter/AtfxAdapterWriteTest.java b/org.eclipse.mdm.api.atfxadapter/src/test/java/org/eclipse/mdm/api/atfxadapter/AtfxAdapterWriteTest.java
new file mode 100644
index 0000000..182a5e5
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/test/java/org/eclipse/mdm/api/atfxadapter/AtfxAdapterWriteTest.java
@@ -0,0 +1,69 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.api.atfxadapter;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Map;
+
+import org.eclipse.mdm.api.base.ConnectionException;
+import org.eclipse.mdm.api.base.Transaction;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.model.CatalogComponent;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+import org.junit.rules.TemporaryFolder;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.io.Files;
+
+public class AtfxAdapterWriteTest {
+
+	public static final String ATFX_FILE = "src/test/resources/mdm_complete_application_model_500.xml";
+
+	public static ApplicationContext context;
+
+	@ClassRule
+	public static TemporaryFolder tmpFolder = new TemporaryFolder();
+
+	@BeforeClass
+	public static void init() throws ConnectionException, IOException {
+
+		File f = tmpFolder.newFile("open.atfx");
+		Files.copy(new File(ATFX_FILE), f);
+
+		Map<String, String> map = ImmutableMap.of("atfxfile", f.getAbsolutePath(), "freetext.active", "false",
+				"includeCatalog", "true");
+
+		context = new ATFXContextFactory().connect(map);
+	}
+
+	@AfterClass
+	public static void teardown() throws ConnectionException {
+		context.close();
+	}
+
+	@org.junit.Test
+	public void test() {
+		CatalogComponent catComp = context.getEntityFactory().get().createCatalogComponent(ContextType.UNITUNDERTEST,
+				"MyComp");
+
+		Transaction t = context.getEntityManager().get().startTransaction();
+		t.create(Arrays.asList(catComp));
+		t.commit();
+	}
+}
diff --git a/org.eclipse.mdm.api.atfxadapter/src/test/resources/Right_Acc.atfx b/org.eclipse.mdm.api.atfxadapter/src/test/resources/Right_Acc.atfx
new file mode 100644
index 0000000..f9594cc
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/test/resources/Right_Acc.atfx
@@ -0,0 +1,3509 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<atfx_file version="atfx_file: V1.2.0" xmlns="http://www.asam.net/ODS/5.2.0/Schema">
+  <documentation>
+    <exported_by>openATFX</exported_by>
+    <exporter>openATFX</exporter>
+    <export_date_time>20140317155010</export_date_time>
+    <exporter_version>0.4.3</exporter_version>
+  </documentation>
+  <base_model_version>asam30</base_model_version>
+  <application_model>
+    <application_enumeration>
+      <name>valid_enum</name>
+      <item>
+        <name>editing</name>
+        <value>0</value>
+      </item>
+      <item>
+        <name>valid</name>
+        <value>1</value>
+      </item>
+      <item>
+        <name>archive</name>
+        <value>2</value>
+      </item>
+    </application_enumeration>
+    <application_enumeration>
+      <name>axistype</name>
+      <item>
+        <name>Xaxis</name>
+        <value>0</value>
+      </item>
+      <item>
+        <name>Yaxis</name>
+        <value>1</value>
+      </item>
+      <item>
+        <name>Both</name>
+        <value>2</value>
+      </item>
+    </application_enumeration>
+    <application_element>
+      <name>Environment</name>
+      <basetype>AoEnvironment</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <obligatory>true</obligatory>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Max_test_level</name>
+        <base_attribute>max_test_level</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Base_model_version</name>
+        <base_attribute>base_model_version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>AppModelType</name>
+        <base_attribute>application_model_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>AppModelVersion</name>
+        <base_attribute>application_model_version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Timezone</name>
+        <base_attribute>timezone</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MeaningOfAliases</name>
+        <base_attribute>meaning_of_aliases</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+    </application_element>
+    <application_element>
+      <name>Project</name>
+      <basetype>AoTest</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>StructureLevel</name>
+        <ref_to>StructureLevel</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Project</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>StructureLevel</name>
+      <basetype>AoSubTest</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>Tests</name>
+        <ref_to>Test</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>StructureLevel</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Project</name>
+        <ref_to>Project</ref_to>
+        <base_relation>parent_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>StructureLevel</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>Test</name>
+      <basetype>AoSubTest</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateClosed</name>
+        <datatype>DT_DATE</datatype>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MDMLinks</name>
+        <base_attribute>external_references</base_attribute>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>ResponsiblePerson</name>
+        <ref_to>User</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>Tests</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>StructureLevel</name>
+        <ref_to>StructureLevel</ref_to>
+        <base_relation>parent_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>Tests</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSteps</name>
+        <ref_to>TestStep</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Test</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TestStep</name>
+      <basetype>AoSubTest</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Optional</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>Sortindex</name>
+        <datatype>DT_LONG</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MDMLinks</name>
+        <base_attribute>external_references</base_attribute>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>Test</name>
+        <ref_to>Test</ref_to>
+        <base_relation>parent_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TestSteps</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResults</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestStep</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>MeaResult</name>
+      <basetype>AoMeasurement</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MeasurementBegin</name>
+        <base_attribute>measurement_begin</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MeasurementEnd</name>
+        <base_attribute>measurement_end</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MDMLinks</name>
+        <base_attribute>external_references</base_attribute>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TestEquipment</name>
+        <ref_to>TestEquipment</ref_to>
+        <base_relation>equipments</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaResults</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>units_under_test</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaResults</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantities</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>MeaResult</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestStep</name>
+        <ref_to>TestStep</ref_to>
+        <base_relation>test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaResults</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>SubMatrices</name>
+        <ref_to>SubMatrix</ref_to>
+        <base_relation>submatrices</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>MeaResult</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ResultParameterSet</name>
+        <ref_to>ResultParameterSet</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>MeaResult</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSequence</name>
+        <ref_to>TestSequence</ref_to>
+        <base_relation>sequences</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaResults</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>UnitUnderTest</name>
+      <basetype>AoUnitUnderTest</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>engine</name>
+        <ref_to>engine</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>gearbox</name>
+        <ref_to>gearbox</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>tyre</name>
+        <ref_to>tyre</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>noise_reduction_system</name>
+        <ref_to>noise_reduction_system</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>vehicle</name>
+        <ref_to>vehicle</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>exhaust_piping</name>
+        <ref_to>exhaust_piping</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>expansion_chamber</name>
+        <ref_to>expansion_chamber</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>air_filter</name>
+        <ref_to>air_filter</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResults</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>measurement</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>silencer</name>
+        <ref_to>silencer</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>engine</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>power</name>
+        <datatype>DT_SHORT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>type</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>model</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>engine</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>gearbox</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>no_forward_gears</name>
+        <datatype>DT_SHORT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>transmission</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>gearbox</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>noise_reduction_system</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>design_family</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>noise_reduction_system</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>tyre</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>axle</name>
+        <datatype>DT_SHORT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>side</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>size</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>tread_depth</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>tyre</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>air_filter</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>min_bulk_material_density</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>air_filter</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>expansion_chamber</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>volume</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>expansion_chamber</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>exhaust_piping</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>material</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>length</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>exhaust_piping</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>vehicle</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>maximum_authorized_mass</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>vehicle_type</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>vehicle_category</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>model</name>
+        <datatype>DT_STRING</datatype>
+        <obligatory>true</obligatory>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>length</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>reference_point</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>mass_in_running_order</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>vehicle</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>silencer</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>location</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>model</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>type</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>fibre_type</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>silencer</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TestEquipment</name>
+      <basetype>AoTestEquipment</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>vehicle_measurement</name>
+        <ref_to>vehicle_measurement</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestEquipment</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>meteorological_measurement</name>
+        <ref_to>meteorological_measurement</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestEquipment</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>sound_measurement</name>
+        <ref_to>sound_measurement</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestEquipment</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResults</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>measurement</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestEquipment</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>vehicle_measurement</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>speed</name>
+        <ref_to>speed</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>vehicle_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestEquipment</name>
+        <ref_to>TestEquipment</ref_to>
+        <base_relation>parent_equipment</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>vehicle_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>rotational_speed</name>
+        <ref_to>rotational_speed</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>vehicle_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>acceleration</name>
+        <ref_to>acceleration</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>vehicle_measurement</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>speed</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>direction</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>vehicle_measurement</name>
+        <ref_to>vehicle_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>speed</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>speed</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>rotational_speed</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>vehicle_measurement</name>
+        <ref_to>vehicle_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>rotational_speed</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>rotational_speed</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>acceleration</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>type_code</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>last_calibration</name>
+        <datatype>DT_DATE</datatype>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>location</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>direction</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>vehicle_measurement</name>
+        <ref_to>vehicle_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>acceleration</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>acceleration</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>meteorological_measurement</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>temperature</name>
+        <ref_to>temperature</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>meteorological_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>barometric_pressure</name>
+        <ref_to>barometric_pressure</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>meteorological_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestEquipment</name>
+        <ref_to>TestEquipment</ref_to>
+        <base_relation>parent_equipment</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>meteorological_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>relative_humidity</name>
+        <ref_to>relative_humidity</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>meteorological_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>wind_speed</name>
+        <ref_to>wind_speed</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>meteorological_measurement</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>barometric_pressure</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>type_code</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>last_calibration</name>
+        <datatype>DT_DATE</datatype>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>height_above_ground</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>meteorological_measurement</name>
+        <ref_to>meteorological_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>barometric_pressure</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>barometric_pressure</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>temperature</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>meteorological_measurement</name>
+        <ref_to>meteorological_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>temperature</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>temperature</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>relative_humidity</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>meteorological_measurement</name>
+        <ref_to>meteorological_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>relative_humidity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>relative_humidity</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>wind_speed</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>wind_direction</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>meteorological_measurement</name>
+        <ref_to>meteorological_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>wind_speed</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>wind_speed</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>sound_measurement</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>microphone</name>
+        <ref_to>microphone</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>sound_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestEquipment</name>
+        <ref_to>TestEquipment</ref_to>
+        <base_relation>parent_equipment</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>sound_measurement</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>microphone</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>type_code</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>height_above_ground</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>last_calibration</name>
+        <datatype>DT_DATE</datatype>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>distance_from_target</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>windscreen_applied</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>sound_measurement</name>
+        <ref_to>sound_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>microphone</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>microphone</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>MeaQuantity</name>
+      <basetype>AoMeasurementQuantity</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DataType</name>
+        <base_attribute>datatype</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Interpolation</name>
+        <base_attribute>interpolation</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Rank</name>
+        <base_attribute>rank</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Dimension</name>
+        <base_attribute>dimension</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>TypeSize</name>
+        <base_attribute>type_size</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Minimum</name>
+        <base_attribute>minimum</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Maximum</name>
+        <base_attribute>maximum</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Average</name>
+        <base_attribute>average</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Deviation</name>
+        <base_attribute>standard_deviation</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>non_reference_channel_name</name>
+        <datatype>DT_STRING</datatype>
+        <length>128</length>
+      </application_attribute>
+      <application_attribute>
+        <name>reference_channel_name</name>
+        <datatype>DT_STRING</datatype>
+        <length>128</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>meq-for-ref-user-window-fct</name>
+        <ref_to>MeaQuantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>reference-user-window-function</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>speed</name>
+        <ref_to>speed</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>meq-forequalization-
+filter</name>
+        <ref_to>MeaQuantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>equalization-filter</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>barometric_pressure</name>
+        <ref_to>barometric_pressure</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Unit</name>
+        <ref_to>Unit</ref_to>
+        <base_relation>unit</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantities</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>relative_humidity</name>
+        <ref_to>relative_humidity</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>non_reference_channel_quantity</name>
+        <ref_to>Quantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>meq-for-non_ref_chan_quantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>equalization-filter</name>
+        <ref_to>MeaQuantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>meq-forequalization-
+filter</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>wind_speed</name>
+        <ref_to>wind_speed</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ResultParameterSet</name>
+        <ref_to>ResultParameterSet</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResult</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>measurement</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantities</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>user-window-function</name>
+        <ref_to>MeaQuantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>meq-for-user-window-fct</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>temperature</name>
+        <ref_to>temperature</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>microphone</name>
+        <ref_to>microphone</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>LocalColumns</name>
+        <ref_to>LocalColumn</ref_to>
+        <base_relation>local_columns</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>rotational_speed</name>
+        <ref_to>rotational_speed</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>reference-user-window-function</name>
+        <ref_to>MeaQuantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>meq-for-ref-user-window-fct</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>meq-for-user-window-fct</name>
+        <ref_to>MeaQuantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>user-window-function</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>reference_channel_quantity</name>
+        <ref_to>Quantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>meq-for-ref_chan_quantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Quantity</name>
+        <ref_to>Quantity</ref_to>
+        <base_relation>quantity</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantities</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>acceleration</name>
+        <ref_to>acceleration</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>Unit</name>
+      <basetype>AoUnit</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Factor</name>
+        <base_attribute>factor</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Offset</name>
+        <base_attribute>offset</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>dB</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>dB_reference_factor</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>Quantities</name>
+        <ref_to>Quantity</ref_to>
+        <base_relation>quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Unit</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>PhysDimension</name>
+        <ref_to>PhysDimension</ref_to>
+        <base_relation>phys_dimension</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>Units</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ResultParameter</name>
+        <ref_to>ResultParameter</ref_to>
+        <base_relation>parameters</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Unit</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantities</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Unit</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>PhysDimension</name>
+      <basetype>AoPhysicalDimension</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Length</name>
+        <base_attribute>length_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Mass</name>
+        <base_attribute>mass_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Time</name>
+        <base_attribute>time_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Current</name>
+        <base_attribute>current_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Temperature</name>
+        <base_attribute>temperature_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MolarAmount</name>
+        <base_attribute>molar_amount_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>LuminousIntensity</name>
+        <base_attribute>luminous_intensity_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>angle</name>
+        <datatype>DT_LONG</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>Units</name>
+        <ref_to>Unit</ref_to>
+        <base_relation>units</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>PhysDimension</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>Quantity</name>
+      <basetype>AoQuantity</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DefaultRank</name>
+        <base_attribute>default_rank</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>DefDimension</name>
+        <base_attribute>default_dimension</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>DefTypeSize</name>
+        <base_attribute>default_type_size</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>DefMQName</name>
+        <base_attribute>default_mq_name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DefDataType</name>
+        <base_attribute>default_datatype</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>ValidFlag</name>
+        <datatype>DT_ENUM</datatype>
+        <enumeration_type>valid_enum</enumeration_type>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>Unit</name>
+        <ref_to>Unit</ref_to>
+        <base_relation>default_unit</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>Quantities</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>meq-for-non_ref_chan_quantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>non_reference_channel_quantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>meq-for-ref_chan_quantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>reference_channel_quantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantities</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Quantity</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>ResultParameterSet</name>
+      <basetype>AoParameterSet</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>ResultParameter</name>
+        <ref_to>ResultParameter</ref_to>
+        <base_relation>parameters</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>ResultParameterSet</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ResultParameterSet</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResult</name>
+        <ref_to>MeaResult</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ResultParameterSet</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>ResultParameter</name>
+      <basetype>AoParameter</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DataType</name>
+        <base_attribute>parameter_datatype</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Value</name>
+        <base_attribute>pvalue</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>Unit</name>
+        <ref_to>Unit</ref_to>
+        <base_relation>unit</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ResultParameter</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ResultParameterSet</name>
+        <ref_to>ResultParameterSet</ref_to>
+        <base_relation>parameter_set</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ResultParameter</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>LocalColumn</name>
+      <basetype>AoLocalColumn</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>IndependentFlag</name>
+        <base_attribute>independent</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>SequenceRepresentation</name>
+        <base_attribute>sequence_representation</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>GlobalFlag</name>
+        <base_attribute>global_flag</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Values</name>
+        <base_attribute>values</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Flags</name>
+        <base_attribute>flags</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>GenerationParameters</name>
+        <base_attribute>generation_parameters</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>RawDatatype</name>
+        <base_attribute>raw_datatype</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>axistype</name>
+        <datatype>DT_ENUM</datatype>
+        <enumeration_type>axistype</enumeration_type>
+      </application_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantity</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>LocalColumns</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>SubMatrix</name>
+        <ref_to>SubMatrix</ref_to>
+        <base_relation>submatrix</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>LocalColumns</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ExternalComponent</name>
+        <ref_to>ExternalComponent</ref_to>
+        <base_relation>external_component</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>LocalColumn</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>SubMatrix</name>
+      <basetype>AoSubmatrix</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>SubMatrixNoRows</name>
+        <base_attribute>number_of_rows</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>y-axis-for-z-axis</name>
+        <ref_to>SubMatrix</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>z-axis-for-y-axis</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>y-axis-for-x-axis</name>
+        <ref_to>SubMatrix</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>x-axis-for-y-axis</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>LocalColumns</name>
+        <ref_to>LocalColumn</ref_to>
+        <base_relation>local_columns</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>SubMatrix</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>z-axis-for-y-axis</name>
+        <ref_to>SubMatrix</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>y-axis-for-z-axis</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResult</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>measurement</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>SubMatrices</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>x-axis-for-y-axis</name>
+        <ref_to>SubMatrix</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>y-axis-for-x-axis</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>ExternalComponent</name>
+      <basetype>AoExternalComponent</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>FilenameURL</name>
+        <base_attribute>filename_url</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>TypeSpecification</name>
+        <base_attribute>value_type</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Length</name>
+        <base_attribute>component_length</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>StartOffset</name>
+        <base_attribute>start_offset</base_attribute>
+        <datatype>DT_LONG</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Blocksize</name>
+        <base_attribute>block_size</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>ValuesPerBlock</name>
+        <base_attribute>valuesperblock</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>ValueOffset</name>
+        <base_attribute>value_offset</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>OrdinalNumber</name>
+        <base_attribute>ordinal_number</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>FlagsFilenameURL</name>
+        <base_attribute>flags_filename_url</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>FlagsStartOffset</name>
+        <base_attribute>flags_start_offset</base_attribute>
+        <datatype>DT_LONG</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>LocalColumn</name>
+        <ref_to>LocalColumn</ref_to>
+        <base_relation>local_column</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ExternalComponent</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TestSequence</name>
+      <basetype>AoTestSequence</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>PBN_test_conduction</name>
+        <ref_to>PBN_test_conduction</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestSequence</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>track</name>
+        <ref_to>track</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestSequence</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>SVN_test_conduction</name>
+        <ref_to>SVN_test_conduction</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestSequence</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>testsite</name>
+        <ref_to>testsite</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestSequence</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResults</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>measurement</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestSequence</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>PBN_test_conduction</name>
+      <basetype>AoTestSequencePart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>v_test</name>
+        <datatype>DT_FLOAT</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>PMR</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>accelerated</name>
+        <datatype>DT_BOOLEAN</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>tested_vehicle_side</name>
+        <datatype>DT_STRING</datatype>
+        <obligatory>true</obligatory>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TestSequence</name>
+        <ref_to>TestSequence</ref_to>
+        <base_relation>parent_sequence</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>PBN_test_conduction</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>track</name>
+      <basetype>AoTestSequencePart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>residual_voids_content</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>sound_absorption_coefficient</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>texture_depth</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>surface_homogeneity</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>last_check_texture_depth</name>
+        <datatype>DT_DATE</datatype>
+        <length>30</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TestSequence</name>
+        <ref_to>TestSequence</ref_to>
+        <base_relation>parent_sequence</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>track</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>SVN_test_conduction</name>
+      <basetype>AoTestSequencePart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TestSequence</name>
+        <ref_to>TestSequence</ref_to>
+        <base_relation>parent_sequence</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>SVN_test_conduction</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>testsite</name>
+      <basetype>AoTestSequencePart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>track_id</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TestSequence</name>
+        <ref_to>TestSequence</ref_to>
+        <base_relation>parent_sequence</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>testsite</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>User</name>
+      <basetype>AoUser</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>GivenName</name>
+        <datatype>DT_STRING</datatype>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Surname</name>
+        <datatype>DT_STRING</datatype>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Department</name>
+        <datatype>DT_STRING</datatype>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Telephone</name>
+        <datatype>DT_STRING</datatype>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>E-Mail</name>
+        <datatype>DT_STRING</datatype>
+        <length>50</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>users2groups</name>
+        <ref_to>Role</ref_to>
+        <base_relation>groups</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>groups2users</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Tests</name>
+        <ref_to>Test</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>ResponsiblePerson</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>Role</name>
+      <basetype>AoUserGroup</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>SuperuserFlag</name>
+        <base_attribute>superuser_flag</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>groups2users</name>
+        <ref_to>User</ref_to>
+        <base_relation>users</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>users2groups</inverse_name>
+      </relation_attribute>
+    </application_element>
+  </application_model>
+  <instance_data>
+    <Environment>
+      <Id>1</Id>
+      <Name>MDM</Name>
+      <MimeType>application/x-asam.aoenvironment</MimeType>
+      <Description>MDM Environment</Description>
+      <DateCreated>20120214120000</DateCreated>
+      <Max_test_level>4</Max_test_level>
+      <Base_model_version>asam30</Base_model_version>
+      <AppModelType>ASAM_SECURITY,ASAM_NVH,ASAM_WORKFLOW,MDM</AppModelType>
+      <AppModelVersion>4.4.1</AppModelVersion>
+      <Timezone>GMT</Timezone>
+      <MeaningOfAliases>
+        <s>,language=en</s>
+        <s>,language=de</s>
+      </MeaningOfAliases>
+    </Environment>
+    <Project>
+      <Id>1</Id>
+      <Name>PMV Model P</Name>
+      <MimeType>application/x-asam.aotest</MimeType>
+      <StructureLevel>1</StructureLevel>
+    </Project>
+    <StructureLevel>
+      <Id>1</Id>
+      <Name>PBN Measurements</Name>
+      <MimeType>application/x-asam.aosubtest.structurelevel</MimeType>
+      <Tests>1</Tests>
+      <Project>1</Project>
+    </StructureLevel>
+    <Test>
+      <Id>1</Id>
+      <Name>PBN_UNECE_R51_20140314170907</Name>
+      <MimeType>application/x-asam.aosubtest.test</MimeType>
+      <DateCreated>20140314170907</DateCreated>
+      <DateClosed>20140314170908</DateClosed>
+      <StructureLevel>1</StructureLevel>
+      <ResponsiblePerson>1</ResponsiblePerson>
+      <TestSteps>1</TestSteps>
+    </Test>
+    <TestStep>
+      <Id>1</Id>
+      <Name>PBN_UNECE_R51_Right_Acc_70</Name>
+      <MimeType>application/x-asam.aosubtest.teststep</MimeType>
+      <DateCreated>20140314170908</DateCreated>
+      <Optional>true</Optional>
+      <Sortindex>40</Sortindex>
+      <MDMLinks>
+        <external_reference>
+          <description>a simple text file</description>
+          <mimetype>text/plain</mimetype>
+          <location>extref.txt</location>
+        </external_reference>
+        <external_reference>
+          <description>openMDM Logo</description>
+          <mimetype>image/png</mimetype>
+          <location>openmdm.png</location>
+        </external_reference>
+      </MDMLinks>
+      <Test>1</Test>
+      <MeaResults>1</MeaResults>
+    </TestStep>
+    <MeaResult>
+      <Id>1</Id>
+      <Name>Channel</Name>
+      <MimeType>application/x-asam.aomeasurement</MimeType>
+      <DateCreated>20140317154822</DateCreated>
+      <TestEquipment>1</TestEquipment>
+      <UnitUnderTest>1</UnitUnderTest>
+      <MeaQuantities>1 2 3 4 5 6 7 8 9 10 11</MeaQuantities>
+      <TestStep>1</TestStep>
+      <SubMatrices>1</SubMatrices>
+      <TestSequence>1</TestSequence>
+    </MeaResult>
+    <UnitUnderTest>
+      <Id>1</Id>
+      <Name>PBN_vehicle</Name>
+      <Version>57</Version>
+      <MimeType>application/x-asam.aounitundertest.unitundertest</MimeType>
+      <engine>1</engine>
+      <gearbox>1</gearbox>
+      <tyre>1 2 3 4</tyre>
+      <noise_reduction_system>1</noise_reduction_system>
+      <vehicle>1</vehicle>
+      <exhaust_piping>1</exhaust_piping>
+      <expansion_chamber>1</expansion_chamber>
+      <air_filter>1</air_filter>
+      <MeaResults>1</MeaResults>
+      <silencer>1 2</silencer>
+    </UnitUnderTest>
+    <engine>
+      <Id>1</Id>
+      <Name>engine</Name>
+      <MimeType>application/x-asam.aounitundertestpart.engine.engine</MimeType>
+      <power>167</power>
+      <manufacturer>Peak Motors Ltd.</manufacturer>
+      <type>Compression-ignition</type>
+      <model>Peak Turbo V16</model>
+      <UnitUnderTest>1</UnitUnderTest>
+    </engine>
+    <gearbox>
+      <Id>1</Id>
+      <Name>gearbox</Name>
+      <MimeType>application/x-asam.aounitundertestpart.gearbox.gearbox</MimeType>
+      <no_forward_gears>6</no_forward_gears>
+      <transmission>Automatic</transmission>
+      <UnitUnderTest>1</UnitUnderTest>
+    </gearbox>
+    <noise_reduction_system>
+      <Id>1</Id>
+      <Name>noise_reduction_system</Name>
+      <MimeType>application/x-asam.aounitundertestpart.noise_reduction_system.noise_reduction_system</MimeType>
+      <design_family>Whisper</design_family>
+      <UnitUnderTest>1</UnitUnderTest>
+    </noise_reduction_system>
+    <tyre>
+      <Id>1</Id>
+      <Name>FL_tyre</Name>
+      <MimeType>application/x-asam.aounitundertestpart.tyre.fl_tyre</MimeType>
+      <axle>1</axle>
+      <side>Left</side>
+      <size>75R15</size>
+      <manufacturer>Tunnelsand</manufacturer>
+      <tread_depth>2.2</tread_depth>
+      <UnitUnderTest>1</UnitUnderTest>
+    </tyre>
+    <tyre>
+      <Id>2</Id>
+      <Name>FR_tyre</Name>
+      <MimeType>application/x-asam.aounitundertestpart.tyre.fr_tyre</MimeType>
+      <axle>1</axle>
+      <side>Right</side>
+      <size>75R15</size>
+      <manufacturer>Tunnelsand</manufacturer>
+      <tread_depth>2.3</tread_depth>
+      <UnitUnderTest>1</UnitUnderTest>
+    </tyre>
+    <tyre>
+      <Id>3</Id>
+      <Name>RL_tyre</Name>
+      <MimeType>application/x-asam.aounitundertestpart.tyre.rl_tyre</MimeType>
+      <axle>2</axle>
+      <side>Left</side>
+      <size>75R15</size>
+      <manufacturer>Tunnelsand</manufacturer>
+	  <tread_depth>2.1</tread_depth>
+      <UnitUnderTest>1</UnitUnderTest>
+    </tyre>
+    <tyre>
+      <Id>4</Id>
+      <Name>RR_tyre</Name>
+      <MimeType>application/x-asam.aounitundertestpart.tyre.rr_tyre</MimeType>
+      <axle>2</axle>
+      <side>Right</side>
+      <size>75R15</size>
+      <manufacturer>Tunnelsand</manufacturer>
+      <tread_depth>2.2</tread_depth>
+      <UnitUnderTest>1</UnitUnderTest>
+    </tyre>
+    <air_filter>
+      <Id>1</Id>
+      <Name>air_filter</Name>
+      <MimeType>application/x-asam.aounitundertestpart.air_filter.air_filter</MimeType>
+      <min_bulk_material_density>0.83</min_bulk_material_density>
+      <UnitUnderTest>1</UnitUnderTest>
+    </air_filter>
+    <expansion_chamber>
+      <Id>1</Id>
+      <Name>expansion_chamber</Name>
+      <MimeType>application/x-asam.aounitundertestpart.expansion_chamber.expansion_chamber</MimeType>
+      <volume>0.53</volume>
+      <UnitUnderTest>1</UnitUnderTest>
+    </expansion_chamber>
+    <exhaust_piping>
+      <Id>1</Id>
+      <Name>exhaust_piping</Name>
+      <MimeType>application/x-asam.aounitundertestpart.exhaust_piping.exhaust_piping</MimeType>
+      <material>Stainless steel</material>
+      <length>3.79</length>
+      <UnitUnderTest>1</UnitUnderTest>
+    </exhaust_piping>
+    <vehicle>
+      <Id>1</Id>
+      <Name>vehicle</Name>
+      <MimeType>application/x-asam.aounitundertestpart.vehicle.vehicle</MimeType>
+      <maximum_authorized_mass>1950.0</maximum_authorized_mass>
+      <vehicle_type>Cabrio</vehicle_type>
+      <vehicle_category>Passenger transport</vehicle_category>
+      <manufacturer>Peak Motor Vehicles</manufacturer>
+      <model>Model P</model>
+      <length>3.96</length>
+      <reference_point>Rear end</reference_point>
+      <mass_in_running_order>1463.0</mass_in_running_order>
+      <UnitUnderTest>1</UnitUnderTest>
+    </vehicle>
+    <silencer>
+      <Id>1</Id>
+      <Name>exhaust_silencer</Name>
+      <MimeType>application/x-asam.aounitundertestpart.silencer.exhaust_silencer</MimeType>
+      <location>exhaust</location>
+      <manufacturer>Peak Silencers Ltd.</manufacturer>
+      <model>Lion's Roar 2013</model>
+      <type>Quadruple pipe</type>
+      <fibre_type>Biosil wool</fibre_type>
+      <UnitUnderTest>1</UnitUnderTest>
+    </silencer>
+    <silencer>
+      <Id>2</Id>
+      <Name>intake_silencer</Name>
+      <MimeType>application/x-asam.aounitundertestpart.silencer.intake_silencer</MimeType>
+      <location>intake</location>
+      <manufacturer>Peak Silencers Ltd.</manufacturer>
+      <model>Snake's Hiss 2013</model>
+      <fibre_type>Etype wool</fibre_type>
+      <UnitUnderTest>1</UnitUnderTest>
+    </silencer>
+    <TestEquipment>
+      <Id>1</Id>
+      <Name>PBN_setup</Name>
+      <Version>56</Version>
+      <MimeType>application/x-asam.aotestequipment.testequipment</MimeType>
+      <vehicle_measurement>1</vehicle_measurement>
+      <meteorological_measurement>1</meteorological_measurement>
+      <sound_measurement>1</sound_measurement>
+      <MeaResults>1</MeaResults>
+    </TestEquipment>
+    <vehicle_measurement>
+      <Id>1</Id>
+      <Name>vehicle_measurement</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.vehicle_measurement.vehicle_measurement</MimeType>
+      <speed>1</speed>
+      <TestEquipment>1</TestEquipment>
+      <rotational_speed>1</rotational_speed>
+      <acceleration>1</acceleration>
+    </vehicle_measurement>
+    <speed>
+      <Id>1</Id>
+      <Name>vehicle_speed</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.speed</MimeType>
+      <vehicle_measurement>1</vehicle_measurement>
+    </speed>
+    <rotational_speed>
+      <Id>1</Id>
+      <Name>rotational_speed</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.rotational_speed</MimeType>
+      <vehicle_measurement>1</vehicle_measurement>
+    </rotational_speed>
+    <acceleration>
+      <Id>1</Id>
+      <Name>vehicle_acceleration</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.acceleration</MimeType>
+      <vehicle_measurement>1</vehicle_measurement>
+    </acceleration>
+    <meteorological_measurement>
+      <Id>1</Id>
+      <Name>meteorological_measurement</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.meteorological_measurement.meteorological_measurement</MimeType>
+      <temperature>1 2</temperature>
+      <barometric_pressure>1</barometric_pressure>
+      <TestEquipment>1</TestEquipment>
+      <relative_humidity>1</relative_humidity>
+      <wind_speed>1</wind_speed>
+    </meteorological_measurement>
+    <barometric_pressure>
+      <Id>1</Id>
+      <Name>atmospheric_pressure</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.barometric_pressure</MimeType>
+      <meteorological_measurement>1</meteorological_measurement>
+    </barometric_pressure>
+    <temperature>
+      <Id>1</Id>
+      <Name>ambient_air_temperature</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.temperature</MimeType>
+      <meteorological_measurement>1</meteorological_measurement>
+    </temperature>
+    <temperature>
+      <Id>2</Id>
+      <Name>track_surface_temperature</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.temperature</MimeType>
+      <meteorological_measurement>1</meteorological_measurement>
+    </temperature>
+    <relative_humidity>
+      <Id>1</Id>
+      <Name>humidity</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.relative_humidity</MimeType>
+      <meteorological_measurement>1</meteorological_measurement>
+    </relative_humidity>
+    <wind_speed>
+      <Id>1</Id>
+      <Name>wind_speed</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.wind_speed</MimeType>
+      <meteorological_measurement>1</meteorological_measurement>
+    </wind_speed>
+    <sound_measurement>
+      <Id>1</Id>
+      <Name>sound_measurement</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.sound_measurement.sound_measurement</MimeType>
+      <microphone>1 2</microphone>
+      <TestEquipment>1</TestEquipment>
+    </sound_measurement>
+    <microphone>
+      <Id>1</Id>
+      <Name>background_noise</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.microphone</MimeType>
+      <sound_measurement>1</sound_measurement>
+    </microphone>
+    <microphone>
+      <Id>2</Id>
+      <Name>vehicle_noise</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.microphone</MimeType>
+      <sound_measurement>1</sound_measurement>
+    </microphone>
+    <MeaQuantity>
+      <Id>1</Id>
+      <Name>CHANNEL05</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>1</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8136</LocalColumns>
+      <Quantity>1</Quantity>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>2</Id>
+      <Name>CHANNEL08</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>1</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8137</LocalColumns>
+      <Quantity>1</Quantity>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>3</Id>
+      <Name>CHANNEL03</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>1</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8138</LocalColumns>
+      <Quantity>1</Quantity>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>4</Id>
+      <Name>CHANNEL01</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>1</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8139</LocalColumns>
+      <Quantity>1</Quantity>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>5</Id>
+      <Name>CHANNEL06</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>1</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8140</LocalColumns>
+      <Quantity>1</Quantity>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>6</Id>
+      <Name>CHANNEL04</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>1</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8141</LocalColumns>
+      <Quantity>1</Quantity>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>7</Id>
+      <Name>CHANNEL07</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>1</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8142</LocalColumns>
+      <Quantity>1</Quantity>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>8</Id>
+      <Name>CHANNEL02</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>1</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8143</LocalColumns>
+      <Quantity>1</Quantity>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>9</Id>
+      <Name>CHANNEL09</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>1</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8144</LocalColumns>
+      <Quantity>1</Quantity>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>10</Id>
+      <Name>CHANNEL10</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>1</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8145</LocalColumns>
+      <Quantity>1</Quantity>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>11</Id>
+      <Name>X-Axis</Name>
+      <DataType>DT_LONG</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>2</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8146</LocalColumns>
+      <Quantity>2</Quantity>
+    </MeaQuantity>
+    <Unit>
+      <Id>1</Id>
+      <Name>Pa</Name>
+      <Factor>1.0</Factor>
+      <Offset>0.0</Offset>
+      <MimeType>application/x-asam.aounit</MimeType>
+      <dB>false</dB>
+      <Quantities>1</Quantities>
+      <PhysDimension>1</PhysDimension>
+      <MeaQuantities>1 2 3 4 5 6 7 8 9 10</MeaQuantities>
+    </Unit>
+    <Unit>
+      <Id>2</Id>
+      <Name>s</Name>
+      <Factor>1.0</Factor>
+      <Offset>0.0</Offset>
+      <MimeType>application/x-asam.aounit</MimeType>
+      <dB>false</dB>
+      <Quantities>2</Quantities>
+      <PhysDimension>2</PhysDimension>
+      <MeaQuantities>11</MeaQuantities>
+    </Unit>
+    <PhysDimension>
+      <Id>1</Id>
+      <Name>pressure</Name>
+      <Length>-1</Length>
+      <Mass>1</Mass>
+      <Time>-2</Time>
+      <Current>0</Current>
+      <Temperature>0</Temperature>
+      <MolarAmount>0</MolarAmount>
+      <LuminousIntensity>0</LuminousIntensity>
+      <MimeType>application/x-asam.aophysicaldimension</MimeType>
+      <Description>unit: pascal</Description>
+      <angle>0</angle>
+      <Units>1</Units>
+    </PhysDimension>
+    <PhysDimension>
+      <Id>2</Id>
+      <Name>time</Name>
+      <Length>0</Length>
+      <Mass>0</Mass>
+      <Time>1</Time>
+      <Current>0</Current>
+      <Temperature>0</Temperature>
+      <MolarAmount>0</MolarAmount>
+      <LuminousIntensity>0</LuminousIntensity>
+      <MimeType>application/x-asam.aophysicaldimension</MimeType>
+      <angle>0</angle>
+      <Units>2</Units>
+    </PhysDimension>
+    <Quantity>
+      <Id>1</Id>
+      <Name>Noise</Name>
+      <Version>1</Version>
+      <MimeType>application/x-asam.aoquantity</MimeType>
+      <DateCreated>20140211133954</DateCreated>
+      <DefaultRank>1</DefaultRank>
+      <DefDimension>0</DefDimension>
+      <DefTypeSize>1</DefTypeSize>
+      <DefMQName>Noise</DefMQName>
+      <DefDataType>DT_FLOAT</DefDataType>
+      <ValidFlag>valid</ValidFlag>
+      <Unit>1</Unit>
+      <MeaQuantities>1 2 3 4 5 6 7 8 9 10</MeaQuantities>
+    </Quantity>
+    <Quantity>
+      <Id>2</Id>
+      <Name>Time</Name>
+      <Version>1</Version>
+      <MimeType>application/x-asam.aoquantity</MimeType>
+      <DateCreated>20140303190409</DateCreated>
+      <DefaultRank>1</DefaultRank>
+      <DefDimension>0</DefDimension>
+      <DefTypeSize>1</DefTypeSize>
+      <DefMQName>Time</DefMQName>
+      <DefDataType>DT_FLOAT</DefDataType>
+      <ValidFlag>valid</ValidFlag>
+      <Unit>2</Unit>
+      <MeaQuantities>11</MeaQuantities>
+    </Quantity>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8136</Id>
+      <Name>CHANNEL05</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>1</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>1</ExternalComponent>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8137</Id>
+      <Name>CHANNEL08</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>2</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>2</ExternalComponent>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8138</Id>
+      <Name>CHANNEL03</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>3</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>3</ExternalComponent>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8139</Id>
+      <Name>CHANNEL01</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>4</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>4</ExternalComponent>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8140</Id>
+      <Name>CHANNEL06</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>5</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>5</ExternalComponent>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8141</Id>
+      <Name>CHANNEL04</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>6</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>6</ExternalComponent>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8142</Id>
+      <Name>CHANNEL07</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>7</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>7</ExternalComponent>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8143</Id>
+      <Name>CHANNEL02</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>8</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>8</ExternalComponent>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8144</Id>
+      <Name>CHANNEL09</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>9</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>9</ExternalComponent>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8145</Id>
+      <Name>CHANNEL10</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>10</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>10</ExternalComponent>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8146</Id>
+      <Name>X-Axis</Name>
+      <IndependentFlag>1</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Xaxis</axistype>
+      <MeaQuantity>11</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>11</ExternalComponent>
+    </LocalColumn>
+    <SubMatrix>
+      <Id>1</Id>
+      <Name>Channel</Name>
+      <SubMatrixNoRows>3001</SubMatrixNoRows>
+      <MimeType>application/x-asam.aosubmatrix</MimeType>
+      <LocalColumns>8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146</LocalColumns>
+      <MeaResult>1</MeaResult>
+    </SubMatrix>
+    <ExternalComponent>
+      <Id>1</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>data_1.bin</FilenameURL>
+      <TypeSpecification>ieeefloat8</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>0</StartOffset>
+      <Blocksize>8</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8136</LocalColumn>
+    </ExternalComponent>
+    <ExternalComponent>
+      <Id>2</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>data_1.bin</FilenameURL>
+      <TypeSpecification>ieeefloat8</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>24008</StartOffset>
+      <Blocksize>8</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8137</LocalColumn>
+    </ExternalComponent>
+    <ExternalComponent>
+      <Id>3</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>data_1.bin</FilenameURL>
+      <TypeSpecification>ieeefloat8</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>48016</StartOffset>
+      <Blocksize>8</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8138</LocalColumn>
+    </ExternalComponent>
+    <ExternalComponent>
+      <Id>4</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>data_1.bin</FilenameURL>
+      <TypeSpecification>ieeefloat8</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>72024</StartOffset>
+      <Blocksize>8</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8139</LocalColumn>
+    </ExternalComponent>
+    <ExternalComponent>
+      <Id>5</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>data_1.bin</FilenameURL>
+      <TypeSpecification>ieeefloat8</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>96032</StartOffset>
+      <Blocksize>8</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8140</LocalColumn>
+    </ExternalComponent>
+    <ExternalComponent>
+      <Id>6</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>data_1.bin</FilenameURL>
+      <TypeSpecification>ieeefloat8</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>120040</StartOffset>
+      <Blocksize>8</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8141</LocalColumn>
+    </ExternalComponent>
+    <ExternalComponent>
+      <Id>7</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>data_1.bin</FilenameURL>
+      <TypeSpecification>ieeefloat8</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>144048</StartOffset>
+      <Blocksize>8</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8142</LocalColumn>
+    </ExternalComponent>
+    <ExternalComponent>
+      <Id>8</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>data_1.bin</FilenameURL>
+      <TypeSpecification>ieeefloat8</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>168056</StartOffset>
+      <Blocksize>8</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8143</LocalColumn>
+    </ExternalComponent>
+    <ExternalComponent>
+      <Id>9</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>data_1.bin</FilenameURL>
+      <TypeSpecification>ieeefloat8</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>192064</StartOffset>
+      <Blocksize>8</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8144</LocalColumn>
+    </ExternalComponent>
+    <ExternalComponent>
+      <Id>10</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>data_1.bin</FilenameURL>
+      <TypeSpecification>ieeefloat8</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>216072</StartOffset>
+      <Blocksize>8</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8145</LocalColumn>
+    </ExternalComponent>
+    <ExternalComponent>
+      <Id>11</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>data_1.bin</FilenameURL>
+      <TypeSpecification>dt_long</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>240080</StartOffset>
+      <Blocksize>4</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8146</LocalColumn>
+    </ExternalComponent>
+    <TestSequence>
+      <Id>1</Id>
+      <Name>PBN_emission_testing</Name>
+      <Version>41</Version>
+      <MimeType>application/x-asam.aotestsequence.testsequence</MimeType>
+      <PBN_test_conduction>1</PBN_test_conduction>
+      <track>1</track>
+      <testsite>1</testsite>
+      <MeaResults>1</MeaResults>
+    </TestSequence>
+    <PBN_test_conduction>
+      <Id>1</Id>
+      <Name>test_conduction</Name>
+      <MimeType>application/x-asam.aotestsequencepart.pbn_test_conduction.test_conduction</MimeType>
+      <v_test>70.0</v_test>
+      <PMR>114</PMR>
+      <accelerated>true</accelerated>
+      <tested_vehicle_side>Right</tested_vehicle_side>
+      <TestSequence>1</TestSequence>
+    </PBN_test_conduction>
+    <track>
+      <Id>1</Id>
+      <Name>track</Name>
+      <MimeType>application/x-asam.aotestsequencepart.track.track</MimeType>
+      <residual_voids_content>7.8</residual_voids_content>
+      <sound_absorption_coefficient>0.093</sound_absorption_coefficient>
+      <texture_depth>0.3</texture_depth>
+      <surface_homogeneity>homogenous</surface_homogeneity>
+      <last_check_texture_depth>20140220000000</last_check_texture_depth>
+      <TestSequence>1</TestSequence>
+    </track>
+    <testsite>
+      <Id>1</Id>
+      <Name>testsite</Name>
+      <MimeType>application/x-asam.aotestsequencepart.testsite.testsite</MimeType>
+      <track_id>PBN Area 51</track_id>
+      <TestSequence>1</TestSequence>
+    </testsite>
+    <User>
+      <Id>1</Id>
+      <Name>dummy</Name>
+      <MimeType>application/x-asam.aouser</MimeType>
+      <GivenName>dummy</GivenName>
+      <Surname>dummy</Surname>
+      <users2groups>1</users2groups>
+      <Tests>1</Tests>
+    </User>
+    <Role>
+      <Id>1</Id>
+      <Name>DummyRole</Name>
+      <SuperuserFlag>0</SuperuserFlag>
+      <MimeType>application/x-asam.aorole</MimeType>
+      <groups2users>1</groups2users>
+    </Role>
+  </instance_data>
+</atfx_file>
\ No newline at end of file
diff --git a/org.eclipse.mdm.api.atfxadapter/src/test/resources/data_1.bin b/org.eclipse.mdm.api.atfxadapter/src/test/resources/data_1.bin
new file mode 100644
index 0000000..1cece2d
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/test/resources/data_1.bin
Binary files differ
diff --git a/org.eclipse.mdm.api.atfxadapter/src/test/resources/extref.txt b/org.eclipse.mdm.api.atfxadapter/src/test/resources/extref.txt
new file mode 100644
index 0000000..9097b52
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/test/resources/extref.txt
@@ -0,0 +1 @@
+This is a external reference file.
\ No newline at end of file
diff --git a/org.eclipse.mdm.api.atfxadapter/src/test/resources/mdm_complete_application_model_500.xml b/org.eclipse.mdm.api.atfxadapter/src/test/resources/mdm_complete_application_model_500.xml
new file mode 100644
index 0000000..341fef8
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/test/resources/mdm_complete_application_model_500.xml
@@ -0,0 +1,2495 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<atfx_file version="atfx_file: V1.1.0"  xmlns="http://www.asam.net/ODS/5.2/Schema"
+                                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                                         xsi:schemaLocation="http://www.asam.net/ODS/5.2/Schema http://www.asam.net/ODS/5.2/Schema.xsd">
+<!--
+***************************************************************************************************************
+* Based on ODS Base Model version *
+***************************************************************************************************************
+ -->
+   <base_model_version>asam30</base_model_version>
+<!-- 
+***************************************************************************************************************
+* declare application model meta data *
+***************************************************************************************************************
+ -->
+
+   <application_model>
+<!--
+***************************************************************************************************************
+* declare enumeration definitions *
+***************************************************************************************************************
+ -->
+      <application_enumeration>
+         <name>valid_enum</name>
+         <item><name>editing</name><value>0</value></item>
+         <item><name>valid</name><value>1</value></item>
+         <item><name>archive</name><value>2</value></item>
+      </application_enumeration>
+      <application_enumeration>
+         <name>axistype</name>
+         <item><name>Xaxis</name><value>0</value></item>
+         <item><name>Yaxis</name><value>1</value></item>
+         <item><name>Both</name><value>2</value></item>
+      </application_enumeration>
+
+      <application_element><name>Environment</name><basetype>AoEnvironment</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>Max_test_level</name><base_attribute>max_test_level</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Base_model_version</name><base_attribute>base_model_version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>AppModelType</name><base_attribute>application_model_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>AppModelVersion</name><base_attribute>application_model_version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>Timezone</name><base_attribute>timezone</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MeaningOfAliases</name><base_attribute>meaning_of_aliases</base_attribute><datatype>DS_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+      </application_element>
+      <application_element><name>CatSensor</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <relation_attribute><name>CatTestEquipmentComp</name><ref_to>CatTestEquipmentComp</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>CatSensor</inverse_name></relation_attribute>
+         <relation_attribute><name>CatSensorAttr</name><ref_to>CatSensorAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatSensor</inverse_name></relation_attribute>
+         <relation_attribute><name>TplSensor</name><ref_to>TplSensor</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatSensor</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>CatSensorAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>ValueListRef</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ValueCopyable</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ActionRequestClassname</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>ActionRequestParameter</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatSensor</name><ref_to>CatSensor</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>CatSensorAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>ValueList</name><ref_to>ValueList</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>CatSensorAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>TplSensorAttr</name><ref_to>TplSensorAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatSensorAttr</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>CatTestEquipmentComp</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatTestEquipmentAttr</name><ref_to>CatTestEquipmentAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestEquipmentComp</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestEquipmentComp</name><ref_to>TplTestEquipmentComp</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestEquipmentComp</inverse_name></relation_attribute>
+         <relation_attribute><name>CatSensor</name><ref_to>CatSensor</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestEquipmentComp</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>CatTestEquipmentAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>ValueListRef</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ValueCopyable</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ActionRequestClassname</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>ActionRequestParameter</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatTestEquipmentComp</name><ref_to>CatTestEquipmentComp</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>CatTestEquipmentAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>ValueList</name><ref_to>ValueList</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>CatTestEquipmentAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestEquipmentAttr</name><ref_to>TplTestEquipmentAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestEquipmentAttr</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>CatTestSequenceComp</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatTestSequenceAttr</name><ref_to>CatTestSequenceAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestSequenceComp</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestSequenceComp</name><ref_to>TplTestSequenceComp</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestSequenceComp</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>CatTestSequenceAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>ValueListRef</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ValueCopyable</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ActionRequestClassname</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>ActionRequestParameter</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatTestSequenceComp</name><ref_to>CatTestSequenceComp</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>CatTestSequenceAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>ValueList</name><ref_to>ValueList</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>CatTestSequenceAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestSequenceAttr</name><ref_to>TplTestSequenceAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestSequenceAttr</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>CatUnitUnderTestComp</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatUnitUnderTestAttr</name><ref_to>CatUnitUnderTestAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatUnitUnderTestComp</inverse_name></relation_attribute>
+         <relation_attribute><name>TplUnitUnderTestComp</name><ref_to>TplUnitUnderTestComp</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatUnitUnderTestComp</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>CatUnitUnderTestAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1500</length></application_attribute>
+         <application_attribute><name>ValueListRef</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ValueCopyable</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ActionRequestClassname</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>ActionRequestParameter</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatUnitUnderTestComp</name><ref_to>CatUnitUnderTestComp</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>CatUnitUnderTestAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>ValueList</name><ref_to>ValueList</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>CatUnitUnderTestAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>TplUnitUnderTestAttr</name><ref_to>TplUnitUnderTestAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatUnitUnderTestAttr</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>Domain</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>256</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <relation_attribute><name>Classification</name><ref_to>Classification</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Domain</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>ExtSystem</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>100</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <relation_attribute><name>ExtSystemAttr</name><ref_to>ExtSystemAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ExtSystem</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>ExtSystemAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>ConverterClassname</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>ConverterParameter</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <relation_attribute><name>ExtSystem</name><ref_to>ExtSystem</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>ExtSystemAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>MDMAttr</name><ref_to>MDMAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ExtSystemAttr</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>FavouriteLists</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ASAMPaths</name><datatype>DS_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <relation_attribute><name>User</name><ref_to>User</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>FavouriteLists</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>MDMAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>CompType</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>CompName</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>254</length></application_attribute>
+         <application_attribute><name>AttrName</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <relation_attribute><name>ExtSystemAttr</name><ref_to>ExtSystemAttr</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>MDMAttr</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>MDMFunction</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>256</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <relation_attribute><name>Role</name><ref_to>Role</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MDMFunction</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>MDMGroup</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>256</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <relation_attribute><name>Role</name><ref_to>Role</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MDMGroup</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>MDMLocalization</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>300</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>AliasNames</name><datatype>DS_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+      </application_element>
+      <application_element><name>MDMRole</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>256</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <relation_attribute><name>Role</name><ref_to>Role</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MDMRole</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>MDMTag</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>256</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <relation_attribute><name>MDMTagParameterSet</name><ref_to>MDMTagParameterSet</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MDMTag</inverse_name></relation_attribute>
+         <relation_attribute><name>Test</name><ref_to>Test</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MDMTag</inverse_name></relation_attribute>
+         <relation_attribute><name>TestStep</name><ref_to>TestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MDMTag</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaResult</name><ref_to>MeaResult</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MDMTag</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>ProjectDomain</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>256</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <relation_attribute><name>Classification</name><ref_to>Classification</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ProjectDomain</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>Status</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>256</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <relation_attribute><name>Classification</name><ref_to>Classification</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Status</inverse_name></relation_attribute>
+         <relation_attribute><name>StatusValidity</name><ref_to>StatusValidity</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Status</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>Classification</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>256</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>ProjectDomain</name><ref_to>ProjectDomain</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>Classification</inverse_name></relation_attribute>
+         <relation_attribute><name>Status</name><ref_to>Status</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>Classification</inverse_name></relation_attribute>
+         <relation_attribute><name>Domain</name><ref_to>Domain</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>Classification</inverse_name></relation_attribute>
+         <relation_attribute><name>Project</name><ref_to>Project</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Classification</inverse_name></relation_attribute>
+         <relation_attribute><name>StructureLevel</name><ref_to>StructureLevel</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Classification</inverse_name></relation_attribute>
+         <relation_attribute><name>Test</name><ref_to>Test</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Classification</inverse_name></relation_attribute>
+         <relation_attribute><name>TestStep</name><ref_to>TestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Classification</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaResult</name><ref_to>MeaResult</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Classification</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaQuantity</name><ref_to>MeaQuantity</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Classification</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>StatusValidity</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>256</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>IsFinal</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>Status</name><ref_to>Status</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>StatusValidity</inverse_name></relation_attribute>
+         <application_attribute><name>ValidForMimeType</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+      </application_element>
+      <application_element><name>SystemParameter</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>100</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Value</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>References</name><datatype>DS_EXTERNALREFERENCE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>254</length></application_attribute>
+         <relation_attribute><name>UserParameter</name><ref_to>UserParameter</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>SystemParameter</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplGroup</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>TplGroupParent</name><ref_to>TplGroup</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplGroupChild</inverse_name></relation_attribute>
+         <relation_attribute><name>TplGroupChild</name><ref_to>TplGroup</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplGroupParent</inverse_name></relation_attribute>
+         <relation_attribute><name>TplUnitUnderTestRoot</name><ref_to>TplUnitUnderTestRoot</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplGroup</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestSequenceRoot</name><ref_to>TplTestSequenceRoot</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplGroup</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestEquipmentRoot</name><ref_to>TplTestEquipmentRoot</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplGroup</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestStep</name><ref_to>TplTestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplGroup</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTest</name><ref_to>TplTest</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplGroup</inverse_name></relation_attribute>
+         <relation_attribute><name>TplMeaResult</name><ref_to>TplMeaResult</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplGroup</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplMeaResult</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+	  <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>DefaultMimeType</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>DefaultName</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>TplSubMatrix</name><ref_to>TplSubMatrix</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplMeaResult</inverse_name></relation_attribute>
+         <relation_attribute><name>TplGroup</name><ref_to>TplGroup</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplMeaResult</inverse_name></relation_attribute>
+         <relation_attribute><name>TplParameterSet</name><ref_to>TplParameterSet</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplMeaResult</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaResult</name><ref_to>MeaResult</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplMeaResult</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestStep</name><ref_to>TplTestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplMeaResult</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplSensor</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Optional</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>DefaultActive</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplTestEquipmentComp</name><ref_to>TplTestEquipmentComp</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>TplSensor</inverse_name></relation_attribute>
+         <relation_attribute><name>CatSensor</name><ref_to>CatSensor</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplSensor</inverse_name></relation_attribute>
+         <relation_attribute><name>Quantity</name><ref_to>Quantity</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplSensor</inverse_name></relation_attribute>
+         <relation_attribute><name>TplSensorAttr</name><ref_to>TplSensorAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplSensor</inverse_name></relation_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>MeaQuantityValuesEditable</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>MeaQuantityIndependent</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>MeaQuantityAxisType</name><datatype>DT_ENUM</datatype><enumeration_type>axistype</enumeration_type><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>MeaQuantityEditorPlugin</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>TplParameterSet</name><ref_to>TplParameterSet</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplSensor</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplSensorAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>DefaultValue</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>ValueReadonly</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Obligatory</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplSensor</name><ref_to>TplSensor</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>TplSensorAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>CatSensorAttr</name><ref_to>CatSensorAttr</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplSensorAttr</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplSubMatrix</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+	  <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>MinNoRows</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>MaxNoRows</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplMeaResult</name><ref_to>TplMeaResult</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>TplSubMatrix</inverse_name></relation_attribute>
+         <relation_attribute><name>SubMatrix</name><ref_to>SubMatrix</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplSubMatrix</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplTest</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>NameHelperClassname</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>DataSourcePluginClassnames</name><datatype>DS_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>TestOrderActionClassnames</name><datatype>DS_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>Tests</name><ref_to>Test</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTest</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestStepUsage</name><ref_to>TplTestStepUsage</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTest</inverse_name></relation_attribute>
+         <relation_attribute><name>TplGroup</name><ref_to>TplGroup</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTest</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplTestEquipmentAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>DefaultValue</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>ValueReadonly</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Obligatory</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplTestEquipmentComp</name><ref_to>TplTestEquipmentComp</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestEquipmentAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>CatTestEquipmentAttr</name><ref_to>CatTestEquipmentAttr</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestEquipmentAttr</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplTestEquipmentRoot</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplTestEquipmentComp</name><ref_to>TplTestEquipmentComp</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestEquipmentRoot</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestStep</name><ref_to>TplTestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestEquipmentRoot</inverse_name></relation_attribute>
+         <relation_attribute><name>TestEquipment</name><ref_to>TestEquipment</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestEquipmentRoot</inverse_name></relation_attribute>
+         <relation_attribute><name>TplGroup</name><ref_to>TplGroup</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestEquipmentRoot</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplTestEquipmentComp</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Optional</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>DefaultActive</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>TestStepSeriesVariable</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplTestEquipmentRoot</name><ref_to>TplTestEquipmentRoot</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestEquipmentComp</inverse_name></relation_attribute>
+         <relation_attribute><name>TplCompParent</name><ref_to>TplTestEquipmentComp</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplCompChildren</inverse_name></relation_attribute>
+         <relation_attribute><name>CatTestEquipmentComp</name><ref_to>CatTestEquipmentComp</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestEquipmentComp</inverse_name></relation_attribute>
+         <relation_attribute><name>TplCompChildren</name><ref_to>TplTestEquipmentComp</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplCompParent</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestEquipmentAttr</name><ref_to>TplTestEquipmentAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestEquipmentComp</inverse_name></relation_attribute>
+         <relation_attribute><name>TplSensor</name><ref_to>TplSensor</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestEquipmentComp</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplTestSequenceAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>DefaultValue</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>ValueReadonly</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Obligatory</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplTestSequenceComp</name><ref_to>TplTestSequenceComp</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestSequenceAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>CatTestSequenceAttr</name><ref_to>CatTestSequenceAttr</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestSequenceAttr</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplTestSequenceRoot</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplTestSequenceComp</name><ref_to>TplTestSequenceComp</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestSequenceRoot</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestStep</name><ref_to>TplTestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestSequenceRoot</inverse_name></relation_attribute>
+         <relation_attribute><name>TestSequence</name><ref_to>TestSequence</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestSequenceRoot</inverse_name></relation_attribute>
+         <relation_attribute><name>TplGroup</name><ref_to>TplGroup</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestSequenceRoot</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplTestSequenceComp</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Optional</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>DefaultActive</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>TestStepSeriesVariable</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplTestSequenceRoot</name><ref_to>TplTestSequenceRoot</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestSequenceComp</inverse_name></relation_attribute>
+         <relation_attribute><name>TplCompParent</name><ref_to>TplTestSequenceComp</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplCompChildren</inverse_name></relation_attribute>
+         <relation_attribute><name>CatTestSequenceComp</name><ref_to>CatTestSequenceComp</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestSequenceComp</inverse_name></relation_attribute>
+         <relation_attribute><name>TplCompChildren</name><ref_to>TplTestSequenceComp</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplCompParent</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestSequenceAttr</name><ref_to>TplTestSequenceAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestSequenceComp</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplTestStepUsage</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+	  <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>DefaultActive</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Optional</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplTest</name><ref_to>TplTest</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestStepUsage</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestStep</name><ref_to>TplTestStep</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestStepUsage</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplUnitUnderTestAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>DefaultValue</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>ValueReadonly</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Obligatory</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplUnitUnderTestComp</name><ref_to>TplUnitUnderTestComp</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>TplUnitUnderTestAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>CatUnitUnderTestAttr</name><ref_to>CatUnitUnderTestAttr</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplUnitUnderTestAttr</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplUnitUnderTestRoot</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplUnitUnderTestComp</name><ref_to>TplUnitUnderTestComp</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplUnitUnderTestRoot</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestStep</name><ref_to>TplTestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplUnitUnderTestRoot</inverse_name></relation_attribute>
+         <relation_attribute><name>UnitUnderTest</name><ref_to>UnitUnderTest</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplUnitUnderTestRoot</inverse_name></relation_attribute>
+         <relation_attribute><name>TplGroup</name><ref_to>TplGroup</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplUnitUnderTestRoot</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplTestStep</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplUnitUnderTestRoot</name><ref_to>TplUnitUnderTestRoot</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestStep</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestEquipmentRoot</name><ref_to>TplTestEquipmentRoot</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestStep</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestSequenceRoot</name><ref_to>TplTestSequenceRoot</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestStep</inverse_name></relation_attribute>
+         <relation_attribute><name>TestSteps</name><ref_to>TestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestStep</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestStepUsage</name><ref_to>TplTestStepUsage</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestStep</inverse_name></relation_attribute>
+         <relation_attribute><name>TplGroup</name><ref_to>TplGroup</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestStep</inverse_name></relation_attribute>
+         <relation_attribute><name>TplMeaResult</name><ref_to>TplMeaResult</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestStep</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplUnitUnderTestComp</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Optional</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>DefaultActive</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>TestStepSeriesVariable</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplUnitUnderTestRoot</name><ref_to>TplUnitUnderTestRoot</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplUnitUnderTestComp</inverse_name></relation_attribute>
+         <relation_attribute><name>TplCompParent</name><ref_to>TplUnitUnderTestComp</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplCompChildren</inverse_name></relation_attribute>
+         <relation_attribute><name>CatUnitUnderTestComp</name><ref_to>CatUnitUnderTestComp</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplUnitUnderTestComp</inverse_name></relation_attribute>
+         <relation_attribute><name>TplCompChildren</name><ref_to>TplUnitUnderTestComp</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplCompParent</inverse_name></relation_attribute>
+         <relation_attribute><name>TplUnitUnderTestAttr</name><ref_to>TplUnitUnderTestAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplUnitUnderTestComp</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>UserParameter</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Value</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>References</name><datatype>DS_EXTERNALREFERENCE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>254</length></application_attribute>
+         <relation_attribute><name>SystemParameter</name><ref_to>SystemParameter</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>UserParameter</inverse_name></relation_attribute>
+         <relation_attribute><name>User</name><ref_to>User</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>UserParameter</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>MDMLog</name><basetype>AoLog</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>100</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>User</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>Application</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>Priority</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>Message</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>4000</length></application_attribute>
+      </application_element>
+      <application_element><name>MDMTagParameterSet</name><basetype>AoParameterSet</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>MDMTag</name><ref_to>MDMTag</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>MDMTagParameterSet</inverse_name></relation_attribute>
+         <relation_attribute><name>MDMTagParameter</name><ref_to>MDMTagParameter</ref_to><base_relation>parameters</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MDMTagParameterSet</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>NameMap</name><basetype>AoNameMap</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>EntityName</name><base_attribute>entity_name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>AliasNames</name><base_attribute>alias_names</base_attribute><datatype>DS_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <relation_attribute><name>AttributeMap</name><ref_to>AttributeMap</ref_to><base_relation>attribute_mapping</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>NameMap</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>PhysDimension</name><basetype>AoPhysicalDimension</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>Length</name><base_attribute>length_exp</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Mass</name><base_attribute>mass_exp</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Time</name><base_attribute>time_exp</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Current</name><base_attribute>current_exp</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Temperature</name><base_attribute>temperature_exp</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>MolarAmount</name><base_attribute>molar_amount_exp</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>LuminousIntensity</name><base_attribute>luminous_intensity_exp</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>angle</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>Units</name><ref_to>Unit</ref_to><base_relation>units</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>PhysDimension</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>Project</name><basetype>AoTest</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>StructureLevel</name><ref_to>StructureLevel</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Project</inverse_name></relation_attribute>
+         <relation_attribute><name>Classification</name><ref_to>Classification</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>Project</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>ResultParameterSet</name><basetype>AoParameterSet</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>MeaResult</name><ref_to>MeaResult</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>ResultParameterSet</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaQuantity</name><ref_to>MeaQuantity</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>ResultParameterSet</inverse_name></relation_attribute>
+         <relation_attribute><name>ResultParameter</name><ref_to>ResultParameter</ref_to><base_relation>parameters</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ResultParameterSet</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>Role</name><basetype>AoUserGroup</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>SuperuserFlag</name><base_attribute>superuser_flag</base_attribute><datatype>DT_SHORT</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>MDMRole</name><ref_to>MDMRole</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>Role</inverse_name></relation_attribute>
+         <relation_attribute><name>MDMGroup</name><ref_to>MDMGroup</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>Role</inverse_name></relation_attribute>
+         <relation_attribute><name>MDMFunction</name><ref_to>MDMFunction</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Role</inverse_name></relation_attribute>
+         <relation_attribute><name>groups2users</name><ref_to>User</ref_to><base_relation>users</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>users2groups</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TestEquipment</name><basetype>AoTestEquipment</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>TplTestEquipmentRoot</name><ref_to>TplTestEquipmentRoot</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TestEquipment</inverse_name></relation_attribute>
+         <relation_attribute><name>TestSteps</name><ref_to>TestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TestEquipment</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaResults</name><ref_to>MeaResult</ref_to><base_relation>measurement</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TestEquipment</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TestSequence</name><basetype>AoTestSequence</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>TplTestSequenceRoot</name><ref_to>TplTestSequenceRoot</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TestSequence</inverse_name></relation_attribute>
+         <relation_attribute><name>TestSteps</name><ref_to>TestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TestSequence</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaResults</name><ref_to>MeaResult</ref_to><base_relation>measurement</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TestSequence</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplParameterSet</name><basetype>AoParameterSet</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+	  <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>TplMeaResult</name><ref_to>TplMeaResult</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplParameterSet</inverse_name></relation_attribute>
+         <relation_attribute><name>TplParameter</name><ref_to>TplParameter</ref_to><base_relation>parameters</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplParameterSet</inverse_name></relation_attribute>
+         <relation_attribute><name>TplSensor</name><ref_to>TplSensor</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplParameterSet</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>Unit</name><basetype>AoUnit</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>Factor</name><base_attribute>factor</base_attribute><datatype>DT_DOUBLE</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Offset</name><base_attribute>offset</base_attribute><datatype>DT_DOUBLE</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>dB</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>dB_reference_factor</name><datatype>DT_FLOAT</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>PhysDimension</name><ref_to>PhysDimension</ref_to><base_relation>phys_dimension</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>Units</inverse_name></relation_attribute>
+         <relation_attribute><name>Quantities</name><ref_to>Quantity</ref_to><base_relation>quantities</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Unit</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaQuantities</name><ref_to>MeaQuantity</ref_to><base_relation>measurement_quantities</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Unit</inverse_name></relation_attribute>
+         <relation_attribute><name>ResultParameter</name><ref_to>ResultParameter</ref_to><base_relation>parameters</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Unit</inverse_name></relation_attribute>
+         <relation_attribute><name>MDMTagParameter</name><ref_to>MDMTagParameter</ref_to><base_relation>parameters</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Unit</inverse_name></relation_attribute>
+         <relation_attribute><name>TplParameter</name><ref_to>TplParameter</ref_to><base_relation>parameters</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Unit</inverse_name></relation_attribute>
+         <relation_attribute><name>WorkflowParameter</name><ref_to>WorkflowParameter</ref_to><base_relation>parameters</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Unit</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>Quantity</name><basetype>AoQuantity</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>DefaultRank</name><base_attribute>default_rank</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>DefDimension</name><base_attribute>default_dimension</base_attribute><datatype>DS_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>DefTypeSize</name><base_attribute>default_type_size</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>DefMQName</name><base_attribute>default_mq_name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>DefDataType</name><base_attribute>default_datatype</base_attribute><datatype>DT_ENUM</datatype><enumeration_type>datatype_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>Unit</name><ref_to>Unit</ref_to><base_relation>default_unit</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>Quantities</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaQuantities</name><ref_to>MeaQuantity</ref_to><base_relation>measurement_quantities</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Quantity</inverse_name></relation_attribute>
+         <relation_attribute><name>TplSensor</name><ref_to>TplSensor</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Quantity</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>UnitUnderTest</name><basetype>AoUnitUnderTest</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>TplUnitUnderTestRoot</name><ref_to>TplUnitUnderTestRoot</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>UnitUnderTest</inverse_name></relation_attribute>
+         <relation_attribute><name>TestSteps</name><ref_to>TestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>UnitUnderTest</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaResults</name><ref_to>MeaResult</ref_to><base_relation>measurement</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>UnitUnderTest</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>User</name><basetype>AoUser</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>50</length></application_attribute>
+         <application_attribute><name>Password</name><base_attribute>password</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>GivenName</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>Surname</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>Department</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>Telephone</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>E-Mail</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <relation_attribute><name>Tests</name><ref_to>Test</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ResponsiblePerson</inverse_name></relation_attribute>
+         <relation_attribute><name>UserParameter</name><ref_to>UserParameter</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>User</inverse_name></relation_attribute>
+         <relation_attribute><name>FavouriteLists</name><ref_to>FavouriteLists</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>User</inverse_name></relation_attribute>
+         <relation_attribute><name>users2groups</name><ref_to>Role</ref_to><base_relation>groups</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>groups2users</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>ValueList</name><basetype>AoParameterSet</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <relation_attribute><name>ValueListValue</name><ref_to>ValueListValue</ref_to><base_relation>parameters</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ValueList</inverse_name></relation_attribute>
+         <relation_attribute><name>CatUnitUnderTestAttr</name><ref_to>CatUnitUnderTestAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ValueList</inverse_name></relation_attribute>
+         <relation_attribute><name>CatTestEquipmentAttr</name><ref_to>CatTestEquipmentAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ValueList</inverse_name></relation_attribute>
+         <relation_attribute><name>CatTestSequenceAttr</name><ref_to>CatTestSequenceAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ValueList</inverse_name></relation_attribute>
+         <relation_attribute><name>CatSensorAttr</name><ref_to>CatSensorAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ValueList</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>Workflow</name><basetype>AoTestSequence</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique></application_attribute>
+		 <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <relation_attribute><name>actions</name><ref_to>Action</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>workflow</inverse_name></relation_attribute>
+         <relation_attribute><name>conditions</name><ref_to>Condition</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>workflow</inverse_name></relation_attribute>
+         <relation_attribute><name>toActions</name><ref_to>ToAction</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>workflow</inverse_name></relation_attribute>
+         <relation_attribute><name>toConditions</name><ref_to>ToCondition</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>workflow</inverse_name></relation_attribute>
+         <relation_attribute><name>initTokens</name><ref_to>InitToken</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>workflow</inverse_name></relation_attribute>
+         <relation_attribute><name>tokenTypes</name><ref_to>TokenType</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>workflow</inverse_name></relation_attribute>
+         <relation_attribute><name>workflowRuns</name><ref_to>WorkflowRun</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>workflow</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>WorkflowParameterSet</name><basetype>AoParameterSet</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+	     <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>WorkflowParameter</name><ref_to>WorkflowParameter</ref_to><base_relation>parameters</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>WorkflowParameterSet</inverse_name></relation_attribute>
+        <relation_attribute><name>Action</name><ref_to>Action</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>WorkflowParameterSet</inverse_name></relation_attribute>
+         <relation_attribute><name>UsedVia</name><ref_to>ActionRun</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>UsedParameters</inverse_name></relation_attribute>
+		 </application_element>
+      <application_element><name>Action</name><basetype>AoTestSequencePart</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>action_performer</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>action_parameter</name><datatype>DT_BLOB</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <relation_attribute><name>actionRuns</name><ref_to>ActionRun</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ExecutedAction</inverse_name></relation_attribute>
+         <relation_attribute><name>workflow</name><ref_to>Workflow</ref_to><base_relation>parent_sequence</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>actions</inverse_name></relation_attribute>
+         <relation_attribute><name>toConditions</name><ref_to>ToCondition</ref_to><min_occurs>1</min_occurs><max_occurs>Many</max_occurs><inverse_name>action</inverse_name></relation_attribute>
+         <relation_attribute><name>fromConditions</name><ref_to>ToAction</ref_to><min_occurs>1</min_occurs><max_occurs>Many</max_occurs><inverse_name>action</inverse_name></relation_attribute>
+         <relation_attribute><name>WorkflowParameterSet</name><ref_to>WorkflowParameterSet</ref_to><min_occurs>1</min_occurs><max_occurs>Many</max_occurs><inverse_name>Action</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>AttributeMap</name><basetype>AoAttributeMap</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>AttributeName</name><base_attribute>attribute_name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>AliasNames</name><base_attribute>alias_names</base_attribute><datatype>DS_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <relation_attribute><name>NameMap</name><ref_to>NameMap</ref_to><base_relation>name_mapping</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>AttributeMap</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>Condition</name><basetype>AoTestSequencePart</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>capacity</name><datatype>DS_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>tokentype_name</name><datatype>DS_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <relation_attribute><name>workflow</name><ref_to>Workflow</ref_to><base_relation>parent_sequence</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>conditions</inverse_name></relation_attribute>
+         <relation_attribute><name>toActions</name><ref_to>ToAction</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>condition</inverse_name></relation_attribute>
+         <relation_attribute><name>fromActions</name><ref_to>ToCondition</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>condition</inverse_name></relation_attribute>
+         <relation_attribute><name>initTokens</name><ref_to>InitToken</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>condition</inverse_name></relation_attribute>
+         <relation_attribute><name>dynTokens</name><ref_to>DynToken</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>condition</inverse_name></relation_attribute>
+         <relation_attribute><name>tokenTypes</name><ref_to>TokenType</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>conditions</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>InitToken</name><basetype>AoTestSequencePart</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>workflow</name><ref_to>Workflow</ref_to><base_relation>parent_sequence</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>initTokens</inverse_name></relation_attribute>
+         <relation_attribute><name>tokenType</name><ref_to>TokenType</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>initTokens</inverse_name></relation_attribute>
+         <relation_attribute><name>condition</name><ref_to>Condition</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>initTokens</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>MDMTagParameter</name><basetype>AoParameter</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>DataType</name><base_attribute>parameter_datatype</base_attribute><datatype>DT_ENUM</datatype><enumeration_type>datatype_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Value</name><base_attribute>pvalue</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <relation_attribute><name>MDMTagParameterSet</name><ref_to>MDMTagParameterSet</ref_to><base_relation>parameter_set</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>MDMTagParameter</inverse_name></relation_attribute>
+         <relation_attribute><name>Unit</name><ref_to>Unit</ref_to><base_relation>unit</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>MDMTagParameter</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>ResultParameter</name><basetype>AoParameter</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>DataType</name><base_attribute>parameter_datatype</base_attribute><datatype>DT_ENUM</datatype><enumeration_type>datatype_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Value</name><base_attribute>pvalue</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>ResultParameterSet</name><ref_to>ResultParameterSet</ref_to><base_relation>parameter_set</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>ResultParameter</inverse_name></relation_attribute>
+         <relation_attribute><name>SubMatrix</name><ref_to>SubMatrix</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>ResultParameter</inverse_name></relation_attribute>
+         <relation_attribute><name>Unit</name><ref_to>Unit</ref_to><base_relation>unit</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>ResultParameter</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>StructureLevel</name><basetype>AoSubTest</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>Project</name><ref_to>Project</ref_to><base_relation>parent_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>StructureLevel</inverse_name></relation_attribute>
+         <relation_attribute><name>Tests</name><ref_to>Test</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>StructureLevel</inverse_name></relation_attribute>
+         <relation_attribute><name>Classification</name><ref_to>Classification</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>StructureLevel</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>ToAction</name><basetype>AoTestSequencePart</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>regular</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>inhibiting</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>consumption</name><datatype>DS_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>tokentype_name</name><datatype>DS_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <relation_attribute><name>workflow</name><ref_to>Workflow</ref_to><base_relation>parent_sequence</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>toActions</inverse_name></relation_attribute>
+         <relation_attribute><name>condition</name><ref_to>Condition</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>toActions</inverse_name></relation_attribute>
+         <relation_attribute><name>action</name><ref_to>Action</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>fromConditions</inverse_name></relation_attribute>
+         <relation_attribute><name>tokenTypes</name><ref_to>TokenType</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>toActions</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>ToCondition</name><basetype>AoTestSequencePart</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>production</name><datatype>DS_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>tokentype_name</name><datatype>DS_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <relation_attribute><name>workflow</name><ref_to>Workflow</ref_to><base_relation>parent_sequence</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>toConditions</inverse_name></relation_attribute>
+         <relation_attribute><name>action</name><ref_to>Action</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>toConditions</inverse_name></relation_attribute>
+         <relation_attribute><name>condition</name><ref_to>Condition</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>fromActions</inverse_name></relation_attribute>
+         <relation_attribute><name>tokenTypes</name><ref_to>TokenType</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>toConditions</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TokenType</name><basetype>AoTestSequencePart</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>workflow</name><ref_to>Workflow</ref_to><base_relation>parent_sequence</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>tokenTypes</inverse_name></relation_attribute>
+         <relation_attribute><name>initTokens</name><ref_to>InitToken</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>tokenType</inverse_name></relation_attribute>
+         <relation_attribute><name>dynTokens</name><ref_to>DynToken</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>tokenType</inverse_name></relation_attribute>
+         <relation_attribute><name>conditions</name><ref_to>Condition</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>tokenTypes</inverse_name></relation_attribute>
+         <relation_attribute><name>toActions</name><ref_to>ToAction</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>tokenTypes</inverse_name></relation_attribute>
+         <relation_attribute><name>toConditions</name><ref_to>ToCondition</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>tokenTypes</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplParameter</name><basetype>AoParameter</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+	  <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>DefaultDataType</name><base_attribute>parameter_datatype</base_attribute><datatype>DT_ENUM</datatype><enumeration_type>datatype_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>DefaultValue</name><base_attribute>pvalue</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>254</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>TplParameterSet</name><ref_to>TplParameterSet</ref_to><base_relation>parameter_set</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>TplParameter</inverse_name></relation_attribute>
+         <relation_attribute><name>Unit</name><ref_to>Unit</ref_to><base_relation>unit</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplParameter</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>ValueListValue</name><basetype>AoParameter</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DataType</name><base_attribute>parameter_datatype</base_attribute><datatype>DT_ENUM</datatype><enumeration_type>datatype_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Value</name><base_attribute>pvalue</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>ValueList</name><ref_to>ValueList</ref_to><base_relation>parameter_set</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>ValueListValue</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>WorkflowParameter</name><basetype>AoParameter</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+	  <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>DataType</name><base_attribute>parameter_datatype</base_attribute><datatype>DT_ENUM</datatype><enumeration_type>datatype_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Value</name><base_attribute>pvalue</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>254</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>WorkflowParameterSet</name><ref_to>WorkflowParameterSet</ref_to><base_relation>parameter_set</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>WorkflowParameter</inverse_name></relation_attribute>
+         <relation_attribute><name>Unit</name><ref_to>Unit</ref_to><base_relation>unit</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>WorkflowParameter</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>WorkflowRun</name><basetype>AoTestSequencePart</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>time_started</name><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <relation_attribute><name>Workflow</name><ref_to>Workflow</ref_to><base_relation>parent_sequence</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>workflowRuns</inverse_name></relation_attribute>
+         <relation_attribute><name>dynTokens</name><ref_to>DynToken</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>workflowRun</inverse_name></relation_attribute>
+         <relation_attribute><name>actionRuns</name><ref_to>ActionRun</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>WorkflowRun</inverse_name></relation_attribute>
+	  </application_element>
+      <application_element><name>DynToken</name><basetype>AoTestSequencePart</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>time_produced</name><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>time_consumed</name><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+		 <application_attribute><name>NonMDMData</name><datatype>DS_EXTERNALREFERENCE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique></application_attribute>
+         <relation_attribute><name>workflowRun</name><ref_to>WorkflowRun</ref_to><base_relation>parent_sequence_part</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>dynTokens</inverse_name></relation_attribute>
+         <relation_attribute><name>ConsumedVia</name><ref_to>ActionRun</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>InputTokens</inverse_name></relation_attribute>
+         <relation_attribute><name>ProducedVia</name><ref_to>ActionRun</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>OutputTokens</inverse_name></relation_attribute>
+         <relation_attribute><name>tokenType</name><ref_to>TokenType</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>dynTokens</inverse_name></relation_attribute>
+         <relation_attribute><name>condition</name><ref_to>Condition</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>dynTokens</inverse_name></relation_attribute>
+         <relation_attribute><name>Test</name><ref_to>Test</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>DynToken</inverse_name></relation_attribute>
+         <relation_attribute><name>TestStep</name><ref_to>TestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>DynToken</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaResult</name><ref_to>MeaResult</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>DynToken</inverse_name></relation_attribute>
+      </application_element> 
+	  <application_element><name>ActionRun</name><basetype>AoTestSequencePart</basetype>
+		 <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique></application_attribute>
+		 <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+		 <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+		 <relation_attribute><name>ExecutedAction</name><ref_to>Action</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>actionRuns</inverse_name></relation_attribute>			
+		 <relation_attribute><name>InputTokens</name><ref_to>DynToken</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ConsumedVia</inverse_name></relation_attribute>
+		 <relation_attribute><name>OutputTokens</name><ref_to>DynToken</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ProducedVia</inverse_name></relation_attribute>
+		 <relation_attribute><name>UsedParameters</name><ref_to>WorkflowParameterSet</ref_to><min_occurs>1</min_occurs><max_occurs>Many</max_occurs><inverse_name>UsedVia</inverse_name></relation_attribute>								
+		 <relation_attribute><name>WorkflowRun</name><ref_to>WorkflowRun</ref_to><base_relation>parent_sequence_part</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>actionRuns</inverse_name></relation_attribute>
+ 	  </application_element>
+      <application_element><name>Test</name><basetype>AoSubTest</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>DateClosed</name><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MDMLinks</name><base_attribute>external_references</base_attribute><datatype>DS_EXTERNALREFERENCE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>254</length></application_attribute>
+         <relation_attribute><name>StructureLevel</name><ref_to>StructureLevel</ref_to><base_relation>parent_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>Tests</inverse_name></relation_attribute>        
+         <relation_attribute><name>ResponsiblePerson</name><ref_to>User</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>Tests</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTest</name><ref_to>TplTest</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>Tests</inverse_name></relation_attribute>
+         <relation_attribute><name>TestSteps</name><ref_to>TestStep</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Test</inverse_name></relation_attribute>
+         <relation_attribute><name>Classification</name><ref_to>Classification</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>Test</inverse_name></relation_attribute>
+         <relation_attribute><name>MDMTag</name><ref_to>MDMTag</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Test</inverse_name></relation_attribute>
+         <relation_attribute><name>DynToken</name><ref_to>DynToken</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Test</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TestStep</name><basetype>AoSubTest</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>Optional</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>MDMLinks</name><base_attribute>external_references</base_attribute><datatype>DS_EXTERNALREFERENCE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>254</length></application_attribute>
+         <relation_attribute><name>Test</name><ref_to>Test</ref_to><base_relation>parent_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>TestSteps</inverse_name></relation_attribute>         
+         <relation_attribute><name>TplTestStep</name><ref_to>TplTestStep</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TestSteps</inverse_name></relation_attribute>
+         <relation_attribute><name>TestEquipment</name><ref_to>TestEquipment</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TestSteps</inverse_name></relation_attribute>
+         <relation_attribute><name>UnitUnderTest</name><ref_to>UnitUnderTest</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TestSteps</inverse_name></relation_attribute>
+         <relation_attribute><name>TestSequence</name><ref_to>TestSequence</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TestSteps</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaResults</name><ref_to>MeaResult</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TestStep</inverse_name></relation_attribute>
+         <relation_attribute><name>Classification</name><ref_to>Classification</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TestStep</inverse_name></relation_attribute>
+         <relation_attribute><name>MDMTag</name><ref_to>MDMTag</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TestStep</inverse_name></relation_attribute>
+         <relation_attribute><name>DynToken</name><ref_to>DynToken</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TestStep</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>MeaResult</name><basetype>AoMeasurement</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MeasurementBegin</name><base_attribute>measurement_begin</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MeasurementEnd</name><base_attribute>measurement_end</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MDMLinks</name><base_attribute>external_references</base_attribute><datatype>DS_EXTERNALREFERENCE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>254</length></application_attribute>
+         <relation_attribute><name>TestStep</name><ref_to>TestStep</ref_to><base_relation>test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>MeaResults</inverse_name></relation_attribute>
+         <relation_attribute><name>TestEquipment</name><ref_to>TestEquipment</ref_to><base_relation>equipments</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>MeaResults</inverse_name></relation_attribute>
+         <relation_attribute><name>UnitUnderTest</name><ref_to>UnitUnderTest</ref_to><base_relation>units_under_test</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>MeaResults</inverse_name></relation_attribute>
+         <relation_attribute><name>TestSequence</name><ref_to>TestSequence</ref_to><base_relation>sequences</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>MeaResults</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaQuantities</name><ref_to>MeaQuantity</ref_to><base_relation>measurement_quantities</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MeaResult</inverse_name></relation_attribute>
+         <relation_attribute><name>SubMatrices</name><ref_to>SubMatrix</ref_to><base_relation>submatrices</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MeaResult</inverse_name></relation_attribute>
+         <relation_attribute><name>ResultParameterSet</name><ref_to>ResultParameterSet</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MeaResult</inverse_name></relation_attribute>
+         <relation_attribute><name>Classification</name><ref_to>Classification</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>MeaResult</inverse_name></relation_attribute>
+         <relation_attribute><name>TplMeaResult</name><ref_to>TplMeaResult</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>MeaResult</inverse_name></relation_attribute>
+         <relation_attribute><name>MDMTag</name><ref_to>MDMTag</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MeaResult</inverse_name></relation_attribute>
+         <relation_attribute><name>DynToken</name><ref_to>DynToken</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MeaResult</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>MeaQuantity</name><basetype>AoMeasurementQuantity</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>Interpolation</name><base_attribute>interpolation</base_attribute><datatype>DT_ENUM</datatype><enumeration_type>interpolation_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>DataType</name><base_attribute>datatype</base_attribute><datatype>DT_ENUM</datatype><enumeration_type>datatype_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Rank</name><base_attribute>rank</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Dimension</name><base_attribute>dimension</base_attribute><datatype>DS_LONG</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>TypeSize</name><base_attribute>type_size</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Minimum</name><base_attribute>minimum</base_attribute><datatype>DT_DOUBLE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Maximum</name><base_attribute>maximum</base_attribute><datatype>DT_DOUBLE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Average</name><base_attribute>average</base_attribute><datatype>DT_DOUBLE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Deviation</name><base_attribute>standard_deviation</base_attribute><datatype>DT_DOUBLE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>non_reference_channel_name</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>128</length></application_attribute>
+         <application_attribute><name>reference_channel_name</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>128</length></application_attribute>
+         <relation_attribute><name>MeaResult</name><ref_to>MeaResult</ref_to><base_relation>measurement</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>MeaQuantities</inverse_name></relation_attribute>
+         <relation_attribute><name>Quantity</name><ref_to>Quantity</ref_to><base_relation>quantity</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>MeaQuantities</inverse_name></relation_attribute>
+         <relation_attribute><name>Unit</name><ref_to>Unit</ref_to><base_relation>unit</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>MeaQuantities</inverse_name></relation_attribute>
+         <relation_attribute><name>LocalColumns</name><ref_to>LocalColumn</ref_to><base_relation>local_columns</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MeaQuantity</inverse_name></relation_attribute>
+         <relation_attribute><name>ResultParameterSet</name><ref_to>ResultParameterSet</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MeaQuantity</inverse_name></relation_attribute>
+         <relation_attribute><name>Classification</name><ref_to>Classification</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>MeaQuantity</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>SubMatrix</name><basetype>AoSubmatrix</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>SubMatrixNoRows</name><base_attribute>number_of_rows</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>MeaResult</name><ref_to>MeaResult</ref_to><base_relation>measurement</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>SubMatrices</inverse_name></relation_attribute>
+         <relation_attribute><name>x-axis-for-y-axis</name><ref_to>SubMatrix</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>y-axis-for-x-axis</inverse_name></relation_attribute>
+         <relation_attribute><name>z-axis-for-y-axis</name><ref_to>SubMatrix</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>y-axis-for-z-axis</inverse_name></relation_attribute>
+         <relation_attribute><name>y-axis-for-x-axis</name><ref_to>SubMatrix</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>x-axis-for-y-axis</inverse_name></relation_attribute>
+         <relation_attribute><name>y-axis-for-z-axis</name><ref_to>SubMatrix</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>z-axis-for-y-axis</inverse_name></relation_attribute>
+         <relation_attribute><name>ResultParameter</name><ref_to>ResultParameter</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>SubMatrix</inverse_name></relation_attribute>
+         <relation_attribute><name>LocalColumns</name><ref_to>LocalColumn</ref_to><base_relation>local_columns</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>SubMatrix</inverse_name></relation_attribute>
+         <relation_attribute><name>TplSubMatrix</name><ref_to>TplSubMatrix</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>SubMatrix</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>LocalColumn</name><basetype>AoLocalColumn</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>IndependentFlag</name><base_attribute>independent</base_attribute><datatype>DT_SHORT</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>SequenceRepresentation</name><base_attribute>sequence_representation</base_attribute><datatype>DT_ENUM</datatype><enumeration_type>seq_rep_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>GlobalFlag</name><base_attribute>global_flag</base_attribute><datatype>DT_SHORT</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Values</name><base_attribute>values</base_attribute></application_attribute>
+         <application_attribute><name>Flags</name><base_attribute>flags</base_attribute></application_attribute>
+         <application_attribute><name>GenerationParameters</name><base_attribute>generation_parameters</base_attribute><datatype>DS_DOUBLE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>RawDatatype</name><base_attribute>raw_datatype</base_attribute><datatype>DT_ENUM</datatype><enumeration_type>datatype_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>axistype</name><datatype>DT_ENUM</datatype><enumeration_type>axistype</enumeration_type><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>SubMatrix</name><ref_to>SubMatrix</ref_to><base_relation>submatrix</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>LocalColumns</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaQuantity</name><ref_to>MeaQuantity</ref_to><base_relation>measurement_quantity</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>LocalColumns</inverse_name></relation_attribute>
+         <relation_attribute><name>ExternalComponent</name><ref_to>ExternalComponent</ref_to><base_relation>external_component</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>LocalColumn</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>ExternalComponent</name><basetype>AoExternalComponent</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>OrdinalNumber</name><base_attribute>ordinal_number</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>TypeSpecification</name><base_attribute>value_type</base_attribute><datatype>DT_ENUM</datatype><enumeration_type>typespec_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Length</name><base_attribute>component_length</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>StartOffset</name><base_attribute>start_offset</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Blocksize</name><base_attribute>block_size</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ValuesPerBlock</name><base_attribute>valuesperblock</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ValueOffset</name><base_attribute>value_offset</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>FilenameURL</name><base_attribute>filename_url</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>FlagsFilenameURL</name><base_attribute>flags_filename_url</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>FlagsStartOffset</name><base_attribute>flags_start_offset</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>LocalColumn</name><ref_to>LocalColumn</ref_to><base_relation>local_column</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>ExternalComponent</inverse_name></relation_attribute>
+      </application_element>
+   </application_model>
+<!-- 
+***************************************************************************************************************
+* end application model meta data *
+***************************************************************************************************************
+ -->
+<!--
+***************************************************************************************************************
+* Instance Data is NOT validated with Base Schema *
+***************************************************************************************************************
+ -->
+
+   <instance_data>
+      <Environment><Id>1</Id><Name>MDM</Name><MimeType>application/x-asam.aoenvironment</MimeType><Description>MDM Environment</Description><DateCreated>20120214120000</DateCreated><Max_test_level>4</Max_test_level><Base_model_version>asam30</Base_model_version><AppModelType>ASAM_SECURITY,ASAM_NVH,ASAM_WORKFLOW,MDM</AppModelType><AppModelVersion>4.4.1</AppModelVersion><Timezone>GMT</Timezone>
+         <MeaningOfAliases><s>,language=en</s><s>,language=de</s>
+         </MeaningOfAliases>
+      </Environment>
+      <Domain><Id>1</Id><Name>Default</Name><MimeType>application/x-asam.aoany.domain</MimeType><Description>Default domain</Description>
+      </Domain>
+     <MDMLocalization>
+<Id>1</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.cattestsequencecomp</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Sequence component</s>
+<s>Betriebsgrößen-Komponente</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>2</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.tplunitundertestroot</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Unit under test template</s>
+<s>Prüflings-Vorlage</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>3</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.tpltestsequenceroot</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Sequence template</s>
+<s>Betriebsgrößen-Vorlage</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>4</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.tpltestequipmentroot</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Setup template</s>
+<s>Setup-Vorlage</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>5</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aophysicaldimension</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Physical dimension</s>
+<s>Physikalische Dimension</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>6</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.cattestequipmentattr</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Setup attribute</s>
+<s>Setup-Attribut</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>7</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.cattestsequencetattr</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Sequence attribute</s>
+<s>Betriebsgrößen-Attribut</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>8</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.catsensor</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Sensor component</s>
+<s>Sensor-Komponente</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>9</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.catunitundertestattr</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Unit under test attribute</s>
+<s>Prüflings-Attribut</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>10</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.catsensorattr</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Sensor attribute</s>
+<s>Sensor-Attribut</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>11</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aounit</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Unit</s>
+<s>Einheit</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>12</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoquantity</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Quantity</s>
+<s>Messgrösse</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>13</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.mdmtag</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Tag</s>
+<s>Tag</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>14</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.catunitundertestcomp</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Unit under test component</s>
+<s>Prüflings-Komponente</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>15</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.tplgroup</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Template group</s>
+<s>Vorlagen-Gruppe</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>16</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.tpltestequipmentcomp</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Setup component</s>
+<s>Setup-Komponente</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>17</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.tpltestequipmentattr</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Setup attribute</s>
+<s>Setup-Attribut</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>18</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.tpltestsequencecomp</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Sequence component</s>
+<s>Betriebsgrößen-Komponente</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>19</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.tplunitundertestattr</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Unit under test attribute</s>
+<s>Prüflings-Attribut</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>20</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.tplunitundertestcomp</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Unit under test component</s>
+<s>Prüflings-Komponente</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>21</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.tpltestsequenceattr</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Sequence attribute</s>
+<s>Betriebsgrößen-Attribut</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>22</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.cattestequipmentcomp</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Setup component</s>
+<s>Setup-Komponente</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>23</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoenvironment</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Environment</s>
+<s>Umgebung</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>24</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aouser</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>User</s>
+<s>Benutzer</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>25</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aomeasurement</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Measurement result</s>
+<s>Messergebnis</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>26</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aomeasurementquantity</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Measurement quantity</s>
+<s>Kanal</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>27</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoparameter.resultparameter</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Parameter</s>
+<s>Parameter</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>28</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoparameterset.resultparameterset</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Parameterset</s>
+<s>Parameterset</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>29</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aosubtest.structurelevel</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Subproject</s>
+<s>Unterprojekt</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>30</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aosubtest.test</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Test</s>
+<s>Versuch</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>31</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aosubtest.teststep</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Test step</s>
+<s>Messschritt</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>32</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aotest</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Project</s>
+<s>Projekt</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>33</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aotestsequence.testsequence</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Sequence</s>
+<s>Betriebsgrößen</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>34</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aotestequipment.testequipment</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Setup</s>
+<s>Setup</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>35</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aounitundertest.unitundertest</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Unit under test</s>
+<s>Prüfling</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>36</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.tplsensor</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Sensor template</s>
+<s>Sensor-Vorlage</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>37</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.tplsensorattr</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Sensor template attribut</s>
+<s>Sensor-Attribut</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>90</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.tplmearesult</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Measurement result template</s>
+<s>Messergebnis-Vorlage</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>91</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.tplsubmatrix</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Submatrix template</s>
+<s>Submatrix-Vorlage</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>38</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/name</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Name</s>
+<s>Name</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>39</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/description</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Description</s>
+<s>Beschreibung</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>40</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aoenvironment/appmodeltype</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Data model type</s>
+<s>Datenmodell-Typ</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>41</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aoenvironment/appmodelversion</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Data model version</s>
+<s>Datenmodell-Version</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>42</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/status</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Status</s>
+<s>Status</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>43</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/version</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Version</s>
+<s>Version</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>44</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/datecreated</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Created</s>
+<s>Angelegt</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>45</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/dateclosed</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Closed</s>
+<s>Abgeschlossen</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>46</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aosubtest.test/responsibleperson</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Responsible person</s>
+<s>Verantwortlicher</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>47</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aosubtest.test/tpltest</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Template</s>
+<s>Vorlage</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>48</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aosubtest.teststep/tplteststep</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Template</s>
+<s>Vorlage</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>49</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aomeasurement/measurementbegin</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Measurement begin</s>
+<s>Messbeginn</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>50</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aomeasurement/measurementend</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Measurement end</s>
+<s>Messende</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>51</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/sortindex</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Sortindex</s>
+<s>Sortindex</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>52</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.tpltest</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Test template</s>
+<s>Versuchs-Vorlage</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>53</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.tplteststep</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Test step template</s>
+<s>Messschritt-Vorlage</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>54</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/optional</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Optional</s>
+<s>Optional</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>55</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aouser/givenname</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Given name</s>
+<s>Vorname</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>56</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aouser/surname</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Surname</s>
+<s>Nachname</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>57</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aouser/department</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Department</s>
+<s>Abteilung</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>58</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aouser/telephone</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Telephone</s>
+<s>Telefon</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>59</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aouser/e-mail</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>E-Mail</s>
+<s>E-Mail</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>60</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aomeasurementquantity/average</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Average</s>
+<s>Durchschnitt</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>61</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/datatype</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Data type</s>
+<s>Datentyp</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>62</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/deviation</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Deviation</s>
+<s>Std.-Abweichung</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>63</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/maximum</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Maximum</s>
+<s>Maximum</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>64</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/minimum</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Minimum</s>
+<s>Minimum</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>65</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/quantity</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Quantity</s>
+<s>Messgröße</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>66</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/unit</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Unit</s>
+<s>Einheit</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>67</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/value</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Value</s>
+<s>Wert</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>68</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aorole</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Role</s>
+<s>Rolle</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>69</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.valuelist</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Value list</s>
+<s>Werteliste</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>70</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.valuelistvalue</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Value list value</s>
+<s>Wertelisten-Wert</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>71</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aounit/factor</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Factor</s>
+<s>Faktor</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>72</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aounit/offset</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Offset</s>
+<s>Offset</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>73</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aounit/db</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>dB</s>
+<s>dB</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>74</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aounit/db_reference_factor</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>dB reference factor</s>
+<s>dB Referenz Faktor</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>75</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/validflag</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Valid flag</s>
+<s>Gültigkeit</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>76</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/defaultactive</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Default active</s>
+<s>Default-Aktiv</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>77</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/defaultvalue</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Default value</s>
+<s>Standard-Wert</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>78</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/valuereadonly</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Read only</s>
+<s>Schreibgeschützt</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>79</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/obligatory</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Obligatory</s>
+<s>Pflichtfeld</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>80</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/mdmlinks</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>File attachments</s>
+<s>Dateianhänge</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>81</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam/mimetype</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Mimetype</s>
+<s>Mimetype</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>82</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aophysicaldimension/length</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Length</s>
+<s>Länge</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>83</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aophysicaldimension/mass</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Mass</s>
+<s>Masse</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>84</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aophysicaldimension/time</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Time</s>
+<s>Zeit</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>85</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aophysicaldimension/current</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Current</s>
+<s>Stromstärke</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>86</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aophysicaldimension/temperature</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Temperature</s>
+<s>Temperatur</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>87</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aophysicaldimension/molaramount</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Molar amount</s>
+<s>Stoffmenge</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>88</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aophysicaldimension/luminousintensity</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Luminous intensity</s>
+<s>Lichtstärke</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>89</Id>
+<Name>mdm://i18n/attr/application%2Fx-asam.aophysicaldimension/angle</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Angle</s>
+<s>Winkel</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>92</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aosubmatrix</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Submatrix</s>
+<s>Submatrix</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>93</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aolocalcolumn</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Localcolumn</s>
+<s>Localcolumn</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>94</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoexternalcomponent</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>External component</s>
+<s>External component</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>95</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.tplparameterset</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Parameterset template</s>
+<s>Parameterset-Vorlage</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>96</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.tplparameter</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Parameter template</s>
+<s>Parameter-Vorlage</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>97</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.domain</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Domain</s>
+<s>Domäne</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>98</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.classification</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Classification</s>
+<s>Klassifizierung</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>99</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.status</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Status</s>
+<s>Status</s>
+</AliasNames>
+</MDMLocalization>
+<MDMLocalization>
+<Id>100</Id>
+<Name>mdm://i18n/mt/application%2Fx-asam.aoany.statusvalidity</Name>
+<MimeType>application/x-asam.aoany.mdmlocalization</MimeType>
+<AliasNames>
+<s>Status validity</s>
+<s>Status-Gültigkeit</s>
+</AliasNames>
+</MDMLocalization>
+      <Status><Id>1</Id><Name>Checked</Name><MimeType>application/x-asam.aoany.status</MimeType><Description>imported to MDM and reviewed - has substates - frozen:
+				no further result data can be added - published: has to be available
+				because is prerequisite to an publication</Description>
+         <StatusValidity>1 2 </StatusValidity>
+      </Status>
+      <Status><Id>2</Id><Name>Defining</Name><MimeType>application/x-asam.aoany.status</MimeType><Description>the context is being defined</Description>
+         <StatusValidity>3 4 </StatusValidity>
+      </Status>
+      <Status><Id>3</Id><Name>Rejected</Name><MimeType>application/x-asam.aoany.status</MimeType><Description>has been rejected by the executing units due to any conflict</Description>
+         <StatusValidity>5 6 </StatusValidity>
+      </Status>
+      <Status><Id>4</Id><Name>Cancelled</Name><MimeType>application/x-asam.aoany.status</MimeType><Description>request has been cancelled</Description>
+         <StatusValidity>7 8 </StatusValidity>
+      </Status>
+      <Status><Id>5</Id><Name>Active</Name><MimeType>application/x-asam.aoany.status</MimeType><Description>is being executed</Description>
+         <StatusValidity>9 10 </StatusValidity>
+      </Status>
+      <Status><Id>6</Id><Name>Importing</Name><MimeType>application/x-asam.aoany.status</MimeType><Description>is being imported to the MDM system</Description>
+         <StatusValidity>11 12 </StatusValidity>
+      </Status>
+      <Status><Id>7</Id><Name>Done</Name><MimeType>application/x-asam.aoany.status</MimeType><Description>has been executed and is ready for import to the MDM system</Description>
+         <StatusValidity>13 14 </StatusValidity>
+      </Status>
+      <Status><Id>8</Id><Name>Closed</Name><MimeType>application/x-asam.aoany.status</MimeType><Description>closed, no further data item can be attached.</Description>
+         <StatusValidity>15 </StatusValidity>
+      </Status>
+      <Status><Id>9</Id><Name>Imported</Name><MimeType>application/x-asam.aoany.status</MimeType><Description>imported to the MDM system</Description>
+         <StatusValidity>16 17 </StatusValidity>
+      </Status>
+      <Status><Id>10</Id><Name>Released</Name><MimeType>application/x-asam.aoany.status</MimeType><Description>released for execution</Description>
+         <StatusValidity>18 19 </StatusValidity>
+      </Status>    
+      <StatusValidity><Id>1</Id><Name>Test_Checked</Name><MimeType>application/x-asam.aoany.statusvalidity</MimeType><IsFinal>FALSE</IsFinal><Status>1</Status><ValidForMimeType>application/x-asam.aosubtest.test</ValidForMimeType>
+      </StatusValidity>
+      <StatusValidity><Id>2</Id><Name>TestStep_Checked</Name><MimeType>application/x-asam.aoany.statusvalidity</MimeType><IsFinal>FALSE</IsFinal><Status>1</Status><ValidForMimeType>application/x-asam.aosubtest.teststep</ValidForMimeType>
+      </StatusValidity>
+      <StatusValidity><Id>3</Id><Name>Test_Defining</Name><MimeType>application/x-asam.aoany.statusvalidity</MimeType><IsFinal>FALSE</IsFinal><Status>2</Status><ValidForMimeType>application/x-asam.aosubtest.test</ValidForMimeType>
+      </StatusValidity>
+      <StatusValidity><Id>4</Id><Name>TestStep_Defining</Name><MimeType>application/x-asam.aoany.statusvalidity</MimeType><IsFinal>FALSE</IsFinal><Status>2</Status><ValidForMimeType>application/x-asam.aosubtest.teststep</ValidForMimeType>
+      </StatusValidity>
+      <StatusValidity><Id>5</Id><Name>Test_Rejected</Name><MimeType>application/x-asam.aoany.statusvalidity</MimeType><IsFinal>FALSE</IsFinal><Status>3</Status><ValidForMimeType>application/x-asam.aosubtest.test</ValidForMimeType>
+      </StatusValidity>
+      <StatusValidity><Id>6</Id><Name>TestStep_Rejected</Name><MimeType>application/x-asam.aoany.statusvalidity</MimeType><IsFinal>FALSE</IsFinal><Status>3</Status><ValidForMimeType>application/x-asam.aosubtest.teststep</ValidForMimeType>
+      </StatusValidity>
+      <StatusValidity><Id>7</Id><Name>Test_Cancelled</Name><MimeType>application/x-asam.aoany.statusvalidity</MimeType><IsFinal>FALSE</IsFinal><Status>4</Status><ValidForMimeType>application/x-asam.aosubtest.test</ValidForMimeType>
+      </StatusValidity>
+      <StatusValidity><Id>8</Id><Name>TestStep_Cancelled</Name><MimeType>application/x-asam.aoany.statusvalidity</MimeType><IsFinal>FALSE</IsFinal><Status>4</Status><ValidForMimeType>application/x-asam.aosubtest.teststep</ValidForMimeType>
+      </StatusValidity>
+      <StatusValidity><Id>9</Id><Name>Test_Active</Name><MimeType>application/x-asam.aoany.statusvalidity</MimeType><IsFinal>FALSE</IsFinal><Status>5</Status><ValidForMimeType>application/x-asam.aosubtest.test</ValidForMimeType>
+      </StatusValidity>
+      <StatusValidity><Id>10</Id><Name>TestStep_Active</Name><MimeType>application/x-asam.aoany.statusvalidity</MimeType><IsFinal>FALSE</IsFinal><Status>5</Status><ValidForMimeType>application/x-asam.aosubtest.teststep</ValidForMimeType>
+      </StatusValidity>
+      <StatusValidity><Id>11</Id><Name>Test_Importing</Name><MimeType>application/x-asam.aoany.statusvalidity</MimeType><IsFinal>FALSE</IsFinal><Status>6</Status><ValidForMimeType>application/x-asam.aosubtest.test</ValidForMimeType>
+      </StatusValidity>
+      <StatusValidity><Id>12</Id><Name>TestStep_Importing</Name><MimeType>application/x-asam.aoany.statusvalidity</MimeType><IsFinal>FALSE</IsFinal><Status>6</Status><ValidForMimeType>application/x-asam.aosubtest.teststep</ValidForMimeType>
+      </StatusValidity>
+      <StatusValidity><Id>13</Id><Name>Test_Done</Name><MimeType>application/x-asam.aoany.statusvalidity</MimeType><IsFinal>FALSE</IsFinal><Status>7</Status><ValidForMimeType>application/x-asam.aosubtest.test</ValidForMimeType>
+      </StatusValidity>
+      <StatusValidity><Id>14</Id><Name>TestStep_Done</Name><MimeType>application/x-asam.aoany.statusvalidity</MimeType><IsFinal>FALSE</IsFinal><Status>7</Status><ValidForMimeType>application/x-asam.aosubtest.teststep</ValidForMimeType>
+      </StatusValidity>
+      <StatusValidity><Id>15</Id><Name>Test_Closed</Name><MimeType>application/x-asam.aoany.statusvalidity</MimeType><IsFinal>FALSE</IsFinal><Status>8</Status><ValidForMimeType>application/x-asam.aosubtest.test</ValidForMimeType>
+      </StatusValidity>
+      <StatusValidity><Id>16</Id><Name>Test_Imported</Name><MimeType>application/x-asam.aoany.statusvalidity</MimeType><IsFinal>FALSE</IsFinal><Status>9</Status><ValidForMimeType>application/x-asam.aosubtest.test</ValidForMimeType>
+      </StatusValidity>
+      <StatusValidity><Id>17</Id><Name>TestStep_Imported</Name><MimeType>application/x-asam.aoany.statusvalidity</MimeType><IsFinal>FALSE</IsFinal><Status>9</Status><ValidForMimeType>application/x-asam.aosubtest.teststep</ValidForMimeType>
+      </StatusValidity>
+      <StatusValidity><Id>18</Id><Name>Test_Released</Name><MimeType>application/x-asam.aoany.statusvalidity</MimeType><IsFinal>FALSE</IsFinal><Status>10</Status><ValidForMimeType>application/x-asam.aosubtest.test</ValidForMimeType>
+      </StatusValidity>
+      <StatusValidity><Id>19</Id><Name>TestStep_Released</Name><MimeType>application/x-asam.aoany.statusvalidity</MimeType><IsFinal>FALSE</IsFinal><Status>10</Status><ValidForMimeType>application/x-asam.aosubtest.teststep</ValidForMimeType>
+      </StatusValidity>
+      <NameMap><Id>1</Id><Name>Project</Name><MimeType>application/x-asam.aonamemap.namemap</MimeType><EntityName>Project</EntityName>
+         <AliasNames><s>Project</s><s>Projekt</s>
+         </AliasNames>
+         <AttributeMap>1 </AttributeMap>
+      </NameMap>
+      <NameMap><Id>2</Id><Name>StructureLevel</Name><MimeType>application/x-asam.aonamemap.namemap</MimeType><EntityName>Project</EntityName>
+         <AliasNames><s>Level</s><s>Ebene</s>
+         </AliasNames>
+         <AttributeMap>2 </AttributeMap>
+      </NameMap>
+      <NameMap><Id>3</Id><Name>Test</Name><MimeType>application/x-asam.aonamemap.namemap</MimeType><EntityName>Test</EntityName>
+         <AliasNames><s>Test</s><s>Versuch</s>
+         </AliasNames>
+         <AttributeMap>3 4 </AttributeMap>
+      </NameMap>
+      <NameMap><Id>4</Id><Name>TestStep</Name><MimeType>application/x-asam.aonamemap.namemap</MimeType><EntityName>TestStep</EntityName>
+         <AliasNames><s>Test step</s><s>Messschritt</s>
+         </AliasNames>
+      </NameMap>
+      <NameMap><Id>5</Id><Name>MeaResult</Name><MimeType>application/x-asam.aonamemap.namemap</MimeType><EntityName>MeaResult</EntityName>
+         <AliasNames><s>Measurement result</s><s>Messergebnis</s>
+         </AliasNames>
+      </NameMap>
+      <NameMap><Id>6</Id><Name>MeaQuantity</Name><MimeType>application/x-asam.aonamemap.namemap</MimeType><EntityName>MeaQuantity</EntityName>
+         <AliasNames><s>Measurement quantity</s><s>Kanal</s>
+         </AliasNames>
+      </NameMap>
+      <PhysDimension><Id>1</Id><Name>time</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>3 30 31 32 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>2</Id><Name>mass</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>1</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>2 22 23 24 25 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>3</Id><Name>length</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>1</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>1 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>4</Id><Name>current</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>0</Time><Current>1</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>4 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>5</Id><Name>temperature</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>1</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>5 83 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>6</Id><Name>amount_of_substance</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>1</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>6 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>7</Id><Name>luminous_intensity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>1</LuminousIntensity><angle>0</angle>
+         <Units>7 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>8</Id><Name>plane_angle</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>8 9 10 11 12 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>9</Id><Name>solid_angle</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>66 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>10</Id><Name>refraction_power</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>&quot;diopter&quot;, &quot;dioptre&quot;</Description><Length>-1</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>13 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>11</Id><Name>area</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>14 15 16 17 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>12</Id><Name>volume</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>3</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>18 19 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>13</Id><Name>volume_flow_rate</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>3</Length><Mass>0</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>20 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>14</Id><Name>specific_volume</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>3</Length><Mass>-1</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>21 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>15</Id><Name>fiber_coarseness</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-1</Length><Mass>1</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>26 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>16</Id><Name>area_related_mass</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>area-related mass = grammage</Description><Length>-2</Length><Mass>1</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>27 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>17</Id><Name>mass_flow</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>1</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>28 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>18</Id><Name>density</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-3</Length><Mass>1</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>29 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>19</Id><Name>frequency</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>33 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>20</Id><Name>rotational_frequency</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>1/s</Description><Length>0</Length><Mass>0</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>34 35 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>21</Id><Name>velocity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>1</Length><Mass>0</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>36 37 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>22</Id><Name>acceleration</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>1</Length><Mass>0</Mass><Time>-2</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>38 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>23</Id><Name>angular_velocity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>39 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>24</Id><Name>force</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>1</Length><Mass>1</Mass><Time>-2</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>40 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>25</Id><Name>momentum</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>&quot;impulse&quot;, &quot;impetus&quot;</Description><Length>1</Length><Mass>1</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>41 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>26</Id><Name>acoustic_pressure</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-1</Length><Mass>1</Mass><Time>-2</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>42 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>27</Id><Name>acoustic_power</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>1</Mass><Time>-3</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>43 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>28</Id><Name>sound_intensity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>W/(m^2)</Description><Length>0</Length><Mass>1</Mass><Time>-3</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>44 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>29</Id><Name>noise_dose</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>&quot;laermdosis&quot;</Description><Length>0</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>96 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>30</Id><Name>pressure</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>unit: pascal</Description><Length>-1</Length><Mass>1</Mass><Time>-2</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>45 46 47 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>31</Id><Name>dynamic_viscosity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-1</Length><Mass>1</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>48 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>32</Id><Name>kinematic_viscosity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>0</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>49 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>33</Id><Name>energy</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>unit: joule</Description><Length>2</Length><Mass>1</Mass><Time>-2</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>50 51 52 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>34</Id><Name>heat_capacity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>= entropy</Description><Length>2</Length><Mass>1</Mass><Time>-2</Time><Current>0</Current><Temperature>-1</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>53 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>35</Id><Name>energy_density</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-1</Length><Mass>1</Mass><Time>-2</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>54 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>36</Id><Name>specific_energy</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>0</Mass><Time>-2</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>55 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>37</Id><Name>output</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>unit: watt</Description><Length>2</Length><Mass>1</Mass><Time>-3</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>58 59 60 61 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>38</Id><Name>thermal_conductivity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>1</Length><Mass>1</Mass><Time>-3</Time><Current>0</Current><Temperature>-1</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>62 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>39</Id><Name>thermal_transmission_coefficient</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>1</Mass><Time>-3</Time><Current>0</Current><Temperature>-1</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>63 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>40</Id><Name>heat_flow_density</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>1</Mass><Time>-3</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+      </PhysDimension>
+      <PhysDimension><Id>41</Id><Name>radiant_intensity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>1</Mass><Time>-3</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>65 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>42</Id><Name>radiance</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>1</Mass><Time>-3</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>67 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>43</Id><Name>voltage</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>1</Mass><Time>-3</Time><Current>-1</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>77 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>44</Id><Name>electrical_resistance</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>1</Mass><Time>-3</Time><Current>-2</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>68 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>45</Id><Name>electrical_conductance</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-2</Length><Mass>-1</Mass><Time>3</Time><Current>2</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>69 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>46</Id><Name>electric_charge</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>1</Time><Current>1</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>70 71 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>47</Id><Name>charge_density</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-3</Length><Mass>0</Mass><Time>1</Time><Current>1</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>72 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>48</Id><Name>electrical_displacement_field</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-2</Length><Mass>0</Mass><Time>1</Time><Current>1</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>73 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>49</Id><Name>capacitance</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-2</Length><Mass>-1</Mass><Time>4</Time><Current>2</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>74 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>50</Id><Name>permittivity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-3</Length><Mass>-1</Mass><Time>4</Time><Current>2</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>75 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>51</Id><Name>electric_field_strength</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>1</Length><Mass>1</Mass><Time>-3</Time><Current>-1</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>76 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>52</Id><Name>magnetic_flux</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>1</Mass><Time>-2</Time><Current>-1</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>78 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>53</Id><Name>magnetic_field_density</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>1</Mass><Time>-2</Time><Current>-1</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>79 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>54</Id><Name>inductance</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>1</Mass><Time>-2</Time><Current>-2</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>80 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>55</Id><Name>permeability</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>electromagnetic</Description><Length>1</Length><Mass>1</Mass><Time>-2</Time><Current>-2</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>81 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>56</Id><Name>magnetic_field_intensity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-1</Length><Mass>0</Mass><Time>0</Time><Current>1</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>82 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>57</Id><Name>luminance</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-2</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>1</LuminousIntensity><angle>0</angle>
+         <Units>84 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>58</Id><Name>luminous_flux</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>1</LuminousIntensity><angle>0</angle>
+         <Units>85 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>59</Id><Name>activity_of_a_radioactive_substance</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>87 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>60</Id><Name>absorbed_dose</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>0</Mass><Time>-2</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>88 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>61</Id><Name>equivalent_dose</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>0</Mass><Time>-2</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>89 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>62</Id><Name>absorbed_dose_power</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>&quot;energiedosisleistung&quot;</Description><Length>2</Length><Mass>0</Mass><Time>-3</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>90 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>63</Id><Name>equivalent_dose_rate</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>0</Mass><Time>-3</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>98 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>64</Id><Name>exposure_as_a_quantity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>&quot;ionendosis&quot;</Description><Length>0</Length><Mass>-1</Mass><Time>1</Time><Current>1</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>99 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>65</Id><Name>molar_concentration</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-3</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>1</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>91 92 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>66</Id><Name>molar_volume</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>3</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>-1</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>93 94 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>67</Id><Name>molar_entropy</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>1</Mass><Time>-2</Time><Current>0</Current><Temperature>-1</Temperature><MolarAmount>-1</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>57 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>68</Id><Name>molar_internal_energy</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>&quot;molare innere energie&quot;</Description><Length>2</Length><Mass>1</Mass><Time>-2</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>-1</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>56 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>69</Id><Name>mass_fraction</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+      </PhysDimension>
+      <PhysDimension><Id>70</Id><Name>catalytic_activity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>1</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>95 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>71</Id><Name>catalytic_concentration</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>&quot;katalytische konzentration&quot;</Description><Length>-3</Length><Mass>0</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>1</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>97 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>72</Id><Name>illumination</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-2</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>1</LuminousIntensity><angle>0</angle>
+         <Units>86 </Units>
+      </PhysDimension>
+      <Role><Id>1</Id><Name>MDMSystemAdministrator</Name><MimeType>application/x-asam.aorole</MimeType><Description>system administrator of the MDM system.</Description><SuperuserFlag>1</SuperuserFlag>
+         <groups2users>3 </groups2users>
+      </Role>
+      <Role><Id>2</Id><Name>MDMMethodsAdministrator</Name><MimeType>application/x-asam.aorole</MimeType><Description>administers (creates, changes, deletes) the description
+				patterns (MDM catalogue and MDM Templates) of the MDM system as well
+				as the interfacing with contextual systems.</Description><SuperuserFlag>0</SuperuserFlag>
+         <groups2users>2 </groups2users>
+      </Role>
+      <Role><Id>3</Id><Name>MDMTestPlanner</Name><MimeType>application/x-asam.aorole</MimeType><Description>defines the desired boundary conditions
+				(MDM:UnitUnderTest, MDM:TestEquipment, MDM: TestSequence) of a test.
+			</Description><SuperuserFlag>0</SuperuserFlag>
+         <groups2users>4 </groups2users>
+      </Role>
+      <Role><Id>4</Id><Name>MDMDataProcessor</Name><MimeType>application/x-asam.aorole</MimeType><Description>retrieves data from the MDM system, generates derived
+				data and stores it back to the MDM system</Description><SuperuserFlag>0</SuperuserFlag>
+         <groups2users>5 </groups2users>
+      </Role>
+      <Role><Id>5</Id><Name>MDMTestConditioner</Name><MimeType>application/x-asam.aorole</MimeType><Description>sets up the MDM:TestEquipment and assembles it with the
+				MDM:UnitUnderTest to complete the Test setup for executing the
+				MDM:TestStep</Description><SuperuserFlag>0</SuperuserFlag>
+         <groups2users>6 </groups2users>
+      </Role>
+      <Role><Id>6</Id><Name>MDMTestObjectConditioner</Name><MimeType>application/x-asam.aorole</MimeType><Description>prepares the MDM:UnitUnderTest for the MDM:TestStep.
+			</Description><SuperuserFlag>0</SuperuserFlag>
+         <groups2users>7 </groups2users>
+      </Role>
+      <Role><Id>7</Id><Name>MDMTestOperator</Name><MimeType>application/x-asam.aorole</MimeType><Description>executes the MDM:TestSteps and generates the Test Data
+			</Description><SuperuserFlag>0</SuperuserFlag>
+         <groups2users>8 </groups2users>
+      </Role>
+      <Role><Id>8</Id><Name>MDMDataCustomer</Name><MimeType>application/x-asam.aorole</MimeType><Description>retrieves data from the MDM system for any use
+			</Description><SuperuserFlag>0</SuperuserFlag>
+         <groups2users>9 </groups2users>
+      </Role>
+      <Role><Id>9</Id><Name>MDMTestReviewer</Name><MimeType>application/x-asam.aorole</MimeType><Description>checks the Test results for correctness, completeness
+				and relevancy and imports them from an external test bed system e.g.
+				to the MDM System.</Description><SuperuserFlag>0</SuperuserFlag>
+         <groups2users>1 </groups2users>
+      </Role>
+      <Role><Id>10</Id><Name>MDMMethodsPlanner</Name><MimeType>application/x-asam.aorole</MimeType><Description>defines the standards for testing and functional design
+				which have to be met by the tests documented in the mdm system
+			</Description><SuperuserFlag>0</SuperuserFlag>
+         <groups2users>10 </groups2users>
+      </Role>
+      <Unit><Id>1</Id><Name>m</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>3</PhysDimension>
+      </Unit>
+      <Unit><Id>2</Id><Name>kg</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>2</PhysDimension>
+      </Unit>
+      <Unit><Id>3</Id><Name>s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>1</PhysDimension>
+      </Unit>
+      <Unit><Id>4</Id><Name>A</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>4</PhysDimension>
+      </Unit>
+      <Unit><Id>5</Id><Name>K</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>5</PhysDimension>
+      </Unit>
+      <Unit><Id>6</Id><Name>mol</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>6</PhysDimension>
+      </Unit>
+      <Unit><Id>7</Id><Name>cd</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>7</PhysDimension>
+      </Unit>
+      <Unit><Id>8</Id><Name>rad</Name><MimeType>application/x-asam.aounit</MimeType><Description>1 rad = 360° / (2*pi)</Description><Factor>57.29580000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>8</PhysDimension>
+      </Unit>
+      <Unit><Id>9</Id><Name>grad</Name><MimeType>application/x-asam.aounit</MimeType><Description>(pi/180) * rad</Description><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>8</PhysDimension>
+      </Unit>
+      <Unit><Id>10</Id><Name>&apos;</Name><MimeType>application/x-asam.aounit</MimeType><Description>1/60°</Description><Factor>0.016670</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>8</PhysDimension>
+      </Unit>
+      <Unit><Id>11</Id><Name>&apos;&apos;</Name><MimeType>application/x-asam.aounit</MimeType><Description>1/3600°</Description><Factor>0.000278</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>8</PhysDimension>
+      </Unit>
+      <Unit><Id>12</Id><Name>gon</Name><MimeType>application/x-asam.aounit</MimeType><Description>1 gon = 0.9°</Description><Factor>0.900000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>8</PhysDimension>
+      </Unit>
+      <Unit><Id>13</Id><Name>dpt</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>10</PhysDimension>
+      </Unit>
+      <Unit><Id>14</Id><Name>m^2</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>11</PhysDimension>
+      </Unit>
+      <Unit><Id>15</Id><Name>a</Name><MimeType>application/x-asam.aounit</MimeType><Factor>100.0000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>11</PhysDimension>
+      </Unit>
+      <Unit><Id>16</Id><Name>ha</Name><MimeType>application/x-asam.aounit</MimeType><Factor>10000.00000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>11</PhysDimension>
+      </Unit>
+      <Unit><Id>17</Id><Name>b</Name><MimeType>application/x-asam.aounit</MimeType><Factor>0.000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>11</PhysDimension>
+      </Unit>
+      <Unit><Id>18</Id><Name>m^3</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>12</PhysDimension>
+      </Unit>
+      <Unit><Id>19</Id><Name>L</Name><MimeType>application/x-asam.aounit</MimeType><Factor>0.001000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>12</PhysDimension>
+      </Unit>
+      <Unit><Id>20</Id><Name>m^3/s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>13</PhysDimension>
+      </Unit>
+      <Unit><Id>21</Id><Name>m^3/kg</Name><MimeType>application/x-asam.aounit</MimeType><Description>m^3/kg</Description><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>14</PhysDimension>
+      </Unit>
+      <Unit><Id>22</Id><Name>g</Name><MimeType>application/x-asam.aounit</MimeType><Factor>0.001000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>2</PhysDimension>
+      </Unit>
+      <Unit><Id>23</Id><Name>t</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1000.000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>2</PhysDimension>
+      </Unit>
+      <Unit><Id>24</Id><Name>carat</Name><MimeType>application/x-asam.aounit</MimeType><Description>metric carat</Description><Factor>0.000200</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>2</PhysDimension>
+      </Unit>
+      <Unit><Id>25</Id><Name>u</Name><MimeType>application/x-asam.aounit</MimeType><Description>&quot;1 u&quot;</Description><Factor>0.000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>2</PhysDimension>
+      </Unit>
+      <Unit><Id>26</Id><Name>tex</Name><MimeType>application/x-asam.aounit</MimeType><Factor>0.000001</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>15</PhysDimension>
+      </Unit>
+      <Unit><Id>27</Id><Name>kg/m^2</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>16</PhysDimension>
+      </Unit>
+      <Unit><Id>28</Id><Name>kg/s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>17</PhysDimension>
+      </Unit>
+      <Unit><Id>29</Id><Name>kg/m^3</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>18</PhysDimension>
+      </Unit>
+      <Unit><Id>30</Id><Name>min</Name><MimeType>application/x-asam.aounit</MimeType><Factor>60.00000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>1</PhysDimension>
+      </Unit>
+      <Unit><Id>31</Id><Name>h</Name><MimeType>application/x-asam.aounit</MimeType><Factor>3600.000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>1</PhysDimension>
+      </Unit>
+      <Unit><Id>32</Id><Name>d</Name><MimeType>application/x-asam.aounit</MimeType><Factor>86400.00000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>1</PhysDimension>
+      </Unit>
+      <Unit><Id>33</Id><Name>Hz</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>19</PhysDimension>
+      </Unit>
+      <Unit><Id>34</Id><Name>1/s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>20</PhysDimension>
+      </Unit>
+      <Unit><Id>35</Id><Name>1/min</Name><MimeType>application/x-asam.aounit</MimeType><Factor>0.016670</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>20</PhysDimension>
+      </Unit>
+      <Unit><Id>36</Id><Name>m/s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>21</PhysDimension>
+      </Unit>
+      <Unit><Id>37</Id><Name>km/h</Name><MimeType>application/x-asam.aounit</MimeType><Factor>3.600000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>21</PhysDimension>
+      </Unit>
+      <Unit><Id>38</Id><Name>m/s^2</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>22</PhysDimension>
+      </Unit>
+      <Unit><Id>39</Id><Name>rad/s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>57.29580000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>23</PhysDimension>
+      </Unit>
+      <Unit><Id>40</Id><Name>N</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>24</PhysDimension>
+      </Unit>
+      <Unit><Id>41</Id><Name>N/s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>25</PhysDimension>
+      </Unit>
+      <Unit><Id>42</Id><Name>N/m^2</Name><MimeType>application/x-asam.aounit</MimeType><Description>= 1 pascal</Description><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>26</PhysDimension>
+      </Unit>
+      <Unit><Id>43</Id><Name>Watt</Name><MimeType>application/x-asam.aounit</MimeType><Description>watt gibts schon</Description><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>27</PhysDimension>
+      </Unit>
+      <Unit><Id>44</Id><Name>W/m^2</Name><MimeType>application/x-asam.aounit</MimeType><Description>W/(m^2) = kg/(s^3)</Description><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>28</PhysDimension>
+      </Unit>
+      <Unit><Id>45</Id><Name>Pa</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>30</PhysDimension>
+      </Unit>
+      <Unit><Id>46</Id><Name>bar</Name><MimeType>application/x-asam.aounit</MimeType><Factor>100000.0000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>30</PhysDimension>
+      </Unit>
+      <Unit><Id>47</Id><Name>Torr</Name><MimeType>application/x-asam.aounit</MimeType><Description>1 torr = 1 mmHg</Description><Factor>133.3220000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>30</PhysDimension>
+      </Unit>
+      <Unit><Id>48</Id><Name>Pa*s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>31</PhysDimension>
+      </Unit>
+      <Unit><Id>49</Id><Name>m^2/s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>32</PhysDimension>
+      </Unit>
+      <Unit><Id>50</Id><Name>J</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>33</PhysDimension>
+      </Unit>
+      <Unit><Id>51</Id><Name>kW*h</Name><MimeType>application/x-asam.aounit</MimeType><Factor>3600000.000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>33</PhysDimension>
+      </Unit>
+      <Unit><Id>52</Id><Name>eV</Name><MimeType>application/x-asam.aounit</MimeType><Factor>0.000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>33</PhysDimension>
+      </Unit>
+      <Unit><Id>53</Id><Name>J/K</Name><MimeType>application/x-asam.aounit</MimeType><Description>= 1 m^2*kg/(s^2*K)</Description><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>34</PhysDimension>
+      </Unit>
+      <Unit><Id>54</Id><Name>J/m^3</Name><MimeType>application/x-asam.aounit</MimeType><Description>= 1 kg/(m*(s^2))</Description><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>35</PhysDimension>
+      </Unit>
+      <Unit><Id>55</Id><Name>m^2/s^2</Name><MimeType>application/x-asam.aounit</MimeType><Description>= J/kg</Description><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>36</PhysDimension>
+      </Unit>
+      <Unit><Id>56</Id><Name>J/mol</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>68</PhysDimension>
+      </Unit>
+      <Unit><Id>57</Id><Name>J/mol*K</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>67</PhysDimension>
+      </Unit>
+      <Unit><Id>58</Id><Name>W</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>37</PhysDimension>
+      </Unit>
+      <Unit><Id>59</Id><Name>V*A</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>37</PhysDimension>
+      </Unit>
+      <Unit><Id>60</Id><Name>var</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>37</PhysDimension>
+      </Unit>
+      <Unit><Id>61</Id><Name>PS</Name><MimeType>application/x-asam.aounit</MimeType><Factor>735.4987500000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>37</PhysDimension>
+      </Unit>
+      <Unit><Id>62</Id><Name>W/m*K</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>38</PhysDimension>
+      </Unit>
+      <Unit><Id>63</Id><Name>W/m^2*K</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>39</PhysDimension>
+      </Unit>
+      <Unit><Id>65</Id><Name>W/sr</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>41</PhysDimension>
+      </Unit>
+      <Unit><Id>66</Id><Name>sr</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>9</PhysDimension>
+      </Unit>
+      <Unit><Id>67</Id><Name>W/(m^2*sr)</Name><MimeType>application/x-asam.aounit</MimeType><Description>doppelt, wenn steradian dimensionslos ist</Description><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>42</PhysDimension>
+      </Unit>
+      <Unit><Id>68</Id><Name>ohm</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>44</PhysDimension>
+      </Unit>
+      <Unit><Id>69</Id><Name>S</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>45</PhysDimension>
+      </Unit>
+      <Unit><Id>70</Id><Name>C</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>46</PhysDimension>
+      </Unit>
+      <Unit><Id>71</Id><Name>A*h</Name><MimeType>application/x-asam.aounit</MimeType><Factor>3600.000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>46</PhysDimension>
+      </Unit>
+      <Unit><Id>72</Id><Name>C/m^3</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>47</PhysDimension>
+      </Unit>
+      <Unit><Id>73</Id><Name>C/m^2</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>48</PhysDimension>
+      </Unit>
+      <Unit><Id>74</Id><Name>F</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>49</PhysDimension>
+      </Unit>
+      <Unit><Id>75</Id><Name>F/m</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>50</PhysDimension>
+      </Unit>
+      <Unit><Id>76</Id><Name>V/m</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>51</PhysDimension>
+      </Unit>
+      <Unit><Id>77</Id><Name>V</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>43</PhysDimension>
+      </Unit>
+      <Unit><Id>78</Id><Name>Wb</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>52</PhysDimension>
+      </Unit>
+      <Unit><Id>79</Id><Name>T</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>53</PhysDimension>
+      </Unit>
+      <Unit><Id>80</Id><Name>H</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>54</PhysDimension>
+      </Unit>
+      <Unit><Id>81</Id><Name>H/m</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>55</PhysDimension>
+      </Unit>
+      <Unit><Id>82</Id><Name>A/m</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>56</PhysDimension>
+      </Unit>
+      <Unit><Id>83</Id><Name>gradC</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>273.1500000000000</Offset><dB>FALSE</dB><PhysDimension>5</PhysDimension>
+      </Unit>
+      <Unit><Id>84</Id><Name>cd/m^2</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>57</PhysDimension>
+      </Unit>
+      <Unit><Id>85</Id><Name>lm</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>58</PhysDimension>
+      </Unit>
+      <Unit><Id>86</Id><Name>lx</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>72</PhysDimension>
+      </Unit>
+      <Unit><Id>87</Id><Name>Bq</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>59</PhysDimension>
+      </Unit>
+      <Unit><Id>88</Id><Name>Gy</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>60</PhysDimension>
+      </Unit>
+      <Unit><Id>89</Id><Name>Sv</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>61</PhysDimension>
+      </Unit>
+      <Unit><Id>90</Id><Name>Gy/s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>62</PhysDimension>
+      </Unit>
+      <Unit><Id>91</Id><Name>mol/m^3</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>65</PhysDimension>
+      </Unit>
+      <Unit><Id>92</Id><Name>mol/L</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1000.000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>65</PhysDimension>
+      </Unit>
+      <Unit><Id>93</Id><Name>m^3/mol</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>66</PhysDimension>
+      </Unit>
+      <Unit><Id>94</Id><Name>L/mol</Name><MimeType>application/x-asam.aounit</MimeType><Factor>0.001000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>66</PhysDimension>
+      </Unit>
+      <Unit><Id>95</Id><Name>kat</Name><MimeType>application/x-asam.aounit</MimeType><Description>mol/s</Description><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>70</PhysDimension>
+      </Unit>
+      <Unit><Id>96</Id><Name>Pa^2*s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>29</PhysDimension>
+      </Unit>
+      <Unit><Id>97</Id><Name>kat/m^3</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>71</PhysDimension>
+      </Unit>
+      <Unit><Id>98</Id><Name>Sv/s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>63</PhysDimension>
+      </Unit>
+      <Unit><Id>99</Id><Name>A*s/kg</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><dB>FALSE</dB><PhysDimension>64</PhysDimension>
+      </Unit>
+      <User><Id>1</Id><Name>tr</Name><Password>tr</Password><MimeType>application/x-asam.aouser</MimeType><Description>MDMTestReviewer</Description><GivenName>MDM basic example</GivenName><Surname>tr</Surname>
+         <users2groups>9 </users2groups>
+      </User>
+      <User><Id>2</Id><Name>ma</Name><Password>ma</Password><MimeType>application/x-asam.aouser</MimeType><Description>MDMMethodsAdministrator</Description><GivenName>MDM basic example</GivenName><Surname>ma</Surname>
+         <users2groups>2 </users2groups>
+      </User>
+      <User><Id>3</Id><Name>sa</Name><Password>sa</Password><MimeType>application/x-asam.aouser</MimeType><Description>MDMSystemAdministrator</Description><GivenName>MDM basic example</GivenName><Surname>sa</Surname>
+         <users2groups>1 </users2groups>
+      </User>
+      <User><Id>4</Id><Name>tp</Name><Password>tp</Password><MimeType>application/x-asam.aouser</MimeType><Description>MDMTestPlanner</Description><GivenName>MDM basic example</GivenName><Surname>tp</Surname>
+         <users2groups>3 </users2groups>
+      </User>
+      <User><Id>5</Id><Name>dp</Name><Password>dp</Password><MimeType>application/x-asam.aouser</MimeType><Description>MDMDataProcessor</Description><GivenName>MDM basic example</GivenName><Surname>dp</Surname>
+         <users2groups>4 </users2groups>
+      </User>
+      <User><Id>6</Id><Name>tc</Name><Password>tc</Password><MimeType>application/x-asam.aouser</MimeType><Description>MDMTestConditioner</Description><GivenName>MDM basic example</GivenName><Surname>tc</Surname>
+         <users2groups>5 </users2groups>
+      </User>
+      <User><Id>7</Id><Name>oc</Name><Password>oc</Password><MimeType>application/x-asam.aouser</MimeType><Description>MDMTestObjectConditioner</Description><GivenName>MDM basic example</GivenName><Surname>oc</Surname>
+         <users2groups>6 </users2groups>
+      </User>
+      <User><Id>8</Id><Name>to</Name><Password>to</Password><MimeType>application/x-asam.aouser</MimeType><Description>MDMTestOperator</Description><GivenName>MDM basic example</GivenName><Surname>to</Surname>
+         <users2groups>7 </users2groups>
+      </User>
+      <User><Id>9</Id><Name>dc</Name><Password>dc</Password><MimeType>application/x-asam.aouser</MimeType><Description>MDMDataCustomer</Description><GivenName>MDM basic example</GivenName><Surname>dc</Surname>
+         <users2groups>8 </users2groups>
+      </User>
+      <User><Id>10</Id><Name>mp</Name><Password>mp</Password><MimeType>application/x-asam.aouser</MimeType><Description>MDMMethodsPlanner</Description><GivenName>MDM basic example</GivenName><Surname>mp</Surname>
+         <users2groups>10 </users2groups>
+      </User>
+      <AttributeMap><Id>1</Id><Name>Name</Name><MimeType>application/x-asam.aoattributemap.attributemap</MimeType><AttributeName>Name</AttributeName>
+         <AliasNames><s>Name</s><s>Name</s>
+         </AliasNames><NameMap>1</NameMap>
+      </AttributeMap>
+      <AttributeMap><Id>2</Id><Name>Name</Name><MimeType>application/x-asam.aoattributemap.attributemap</MimeType><AttributeName>Name</AttributeName>
+         <AliasNames><s>Name</s><s>Name</s>
+         </AliasNames><NameMap>2</NameMap>
+      </AttributeMap>
+      <AttributeMap><Id>3</Id><Name>Name</Name><MimeType>application/x-asam.aoattributemap.attributemap</MimeType><AttributeName>Name</AttributeName>
+         <AliasNames><s>Name</s><s>Name</s>
+         </AliasNames><NameMap>3</NameMap>
+      </AttributeMap>
+      <AttributeMap><Id>4</Id><Name>Description</Name><MimeType>application/x-asam.aoattributemap.attributemap</MimeType><AttributeName>Description</AttributeName>
+         <AliasNames><s>Description</s><s>Beschreibung</s>
+         </AliasNames><NameMap>3</NameMap>
+      </AttributeMap>
+   </instance_data>
+</atfx_file>
\ No newline at end of file
diff --git a/org.eclipse.mdm.api.atfxadapter/src/test/resources/mdm_minimum_ods_application_model_500.xml b/org.eclipse.mdm.api.atfxadapter/src/test/resources/mdm_minimum_ods_application_model_500.xml
new file mode 100644
index 0000000..e601fab
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/test/resources/mdm_minimum_ods_application_model_500.xml
@@ -0,0 +1,1431 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<atfx_file version="atfx_file: V1.2.0" xmlns="http://www.asam.net/ODS/5.2.0/Schema">
+  <documentation>
+    <exported_by>openATFX</exported_by>
+    <exporter>openATFX</exporter>
+    <export_date_time>20181022101553</export_date_time>
+    <exporter_version>0.7.3</exporter_version>
+  </documentation>
+  <base_model_version>asam30</base_model_version>
+  <application_model>
+    <application_enumeration>
+      <name>axistype</name>
+      <item>
+        <name>Xaxis</name>
+        <value>0</value>
+      </item>
+      <item>
+        <name>Yaxis</name>
+        <value>1</value>
+      </item>
+      <item>
+        <name>Both</name>
+        <value>2</value>
+      </item>
+    </application_enumeration>
+    <application_enumeration>
+      <name>valid_enum</name>
+      <item>
+        <name>editing</name>
+        <value>0</value>
+      </item>
+      <item>
+        <name>valid</name>
+        <value>1</value>
+      </item>
+      <item>
+        <name>archive</name>
+        <value>2</value>
+      </item>
+    </application_enumeration>
+      <application_element><name>CatSensor</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <relation_attribute><name>CatTestEquipmentComp</name><ref_to>CatTestEquipmentComp</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>CatSensor</inverse_name></relation_attribute>
+         <relation_attribute><name>CatSensorAttr</name><ref_to>CatSensorAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatSensor</inverse_name></relation_attribute>
+<!--          <relation_attribute><name>TplSensor</name><ref_to>TplSensor</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatSensor</inverse_name></relation_attribute> -->
+      </application_element>
+      <application_element><name>CatSensorAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>ValueListRef</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ValueCopyable</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ActionRequestClassname</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>ActionRequestParameter</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatSensor</name><ref_to>CatSensor</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>CatSensorAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>ValueList</name><ref_to>ValueList</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>CatSensorAttr</inverse_name></relation_attribute>
+<!--          <relation_attribute><name>TplSensorAttr</name><ref_to>TplSensorAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatSensorAttr</inverse_name></relation_attribute> -->
+      </application_element>
+      <application_element><name>CatTestEquipmentComp</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatTestEquipmentAttr</name><ref_to>CatTestEquipmentAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestEquipmentComp</inverse_name></relation_attribute>
+<!--          <relation_attribute><name>TplTestEquipmentComp</name><ref_to>TplTestEquipmentComp</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestEquipmentComp</inverse_name></relation_attribute> -->
+         <relation_attribute><name>CatSensor</name><ref_to>CatSensor</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestEquipmentComp</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>CatTestEquipmentAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>ValueListRef</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ValueCopyable</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ActionRequestClassname</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>ActionRequestParameter</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatTestEquipmentComp</name><ref_to>CatTestEquipmentComp</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>CatTestEquipmentAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>ValueList</name><ref_to>ValueList</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>CatTestEquipmentAttr</inverse_name></relation_attribute>
+<!--          <relation_attribute><name>TplTestEquipmentAttr</name><ref_to>TplTestEquipmentAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestEquipmentAttr</inverse_name></relation_attribute> -->
+      </application_element>
+      <application_element><name>CatTestSequenceComp</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatTestSequenceAttr</name><ref_to>CatTestSequenceAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestSequenceComp</inverse_name></relation_attribute>
+<!--          <relation_attribute><name>TplTestSequenceComp</name><ref_to>TplTestSequenceComp</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestSequenceComp</inverse_name></relation_attribute> -->
+      </application_element>
+      <application_element><name>CatTestSequenceAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>ValueListRef</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ValueCopyable</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ActionRequestClassname</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>ActionRequestParameter</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatTestSequenceComp</name><ref_to>CatTestSequenceComp</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>CatTestSequenceAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>ValueList</name><ref_to>ValueList</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>CatTestSequenceAttr</inverse_name></relation_attribute>
+<!--          <relation_attribute><name>TplTestSequenceAttr</name><ref_to>TplTestSequenceAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestSequenceAttr</inverse_name></relation_attribute> -->
+      </application_element>
+      <application_element><name>CatUnitUnderTestComp</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatUnitUnderTestAttr</name><ref_to>CatUnitUnderTestAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatUnitUnderTestComp</inverse_name></relation_attribute>
+<!--          <relation_attribute><name>TplUnitUnderTestComp</name><ref_to>TplUnitUnderTestComp</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatUnitUnderTestComp</inverse_name></relation_attribute> -->
+      </application_element>
+      <application_element><name>CatUnitUnderTestAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1500</length></application_attribute>
+         <application_attribute><name>ValueListRef</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ValueCopyable</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ActionRequestClassname</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>ActionRequestParameter</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatUnitUnderTestComp</name><ref_to>CatUnitUnderTestComp</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>CatUnitUnderTestAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>ValueList</name><ref_to>ValueList</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>CatUnitUnderTestAttr</inverse_name></relation_attribute>
+<!--          <relation_attribute><name>TplUnitUnderTestAttr</name><ref_to>TplUnitUnderTestAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatUnitUnderTestAttr</inverse_name></relation_attribute> -->
+      </application_element>
+      <application_element><name>ValueList</name><basetype>AoParameterSet</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <relation_attribute><name>CatUnitUnderTestAttr</name><ref_to>CatUnitUnderTestAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ValueList</inverse_name></relation_attribute>
+         <relation_attribute><name>CatTestEquipmentAttr</name><ref_to>CatTestEquipmentAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ValueList</inverse_name></relation_attribute>
+         <relation_attribute><name>CatTestSequenceAttr</name><ref_to>CatTestSequenceAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ValueList</inverse_name></relation_attribute>
+         <relation_attribute><name>CatSensorAttr</name><ref_to>CatSensorAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ValueList</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>ValueListValue</name><basetype>AoParameter</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DataType</name><base_attribute>parameter_datatype</base_attribute><datatype>DT_ENUM</datatype><enumeration_type>datatype_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Value</name><base_attribute>pvalue</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>ValueList</name><ref_to>ValueList</ref_to><base_relation>parameter_set</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>ValueListValue</inverse_name></relation_attribute>
+      </application_element>
+    <application_element>
+      <name>MeaQuantity</name>
+      <basetype>AoMeasurementQuantity</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DataType</name>
+        <base_attribute>datatype</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Interpolation</name>
+        <base_attribute>interpolation</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Rank</name>
+        <base_attribute>rank</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Dimension</name>
+        <base_attribute>dimension</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>TypeSize</name>
+        <base_attribute>type_size</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Minimum</name>
+        <base_attribute>minimum</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Maximum</name>
+        <base_attribute>maximum</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Average</name>
+        <base_attribute>average</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Deviation</name>
+        <base_attribute>standard_deviation</base_attribute>
+      </application_attribute>
+      <relation_attribute>
+        <name>ResultParameterSet</name>
+        <ref_to>ResultParameterSet</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Quantity</name>
+        <ref_to>Quantity</ref_to>
+        <base_relation>quantity</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantities</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>LocalColumns</name>
+        <ref_to>LocalColumn</ref_to>
+        <base_relation>local_columns</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Unit</name>
+        <ref_to>Unit</ref_to>
+        <base_relation>unit</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantities</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResult</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>measurement</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantities</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>StructureLevel</name>
+      <basetype>AoSubTest</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>Project</name>
+        <ref_to>Project</ref_to>
+        <base_relation>parent_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>StructureLevel</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Tests</name>
+        <ref_to>Test</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>StructureLevel</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>PhysDimension</name>
+      <basetype>AoPhysicalDimension</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Length</name>
+        <base_attribute>length_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Mass</name>
+        <base_attribute>mass_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Time</name>
+        <base_attribute>time_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Current</name>
+        <base_attribute>current_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Temperature</name>
+        <base_attribute>temperature_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MolarAmount</name>
+        <base_attribute>molar_amount_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>LuminousIntensity</name>
+        <base_attribute>luminous_intensity_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>angle</name>
+        <datatype>DT_LONG</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>Units</name>
+        <ref_to>Unit</ref_to>
+        <base_relation>units</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>PhysDimension</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>Project</name>
+      <basetype>AoTest</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>StructureLevel</name>
+        <ref_to>StructureLevel</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Project</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>Environment</name>
+      <basetype>AoEnvironment</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Max_test_level</name>
+        <base_attribute>max_test_level</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Base_model_version</name>
+        <base_attribute>base_model_version</base_attribute>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>AppModelType</name>
+        <base_attribute>application_model_type</base_attribute>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>AppModelVersion</name>
+        <base_attribute>application_model_version</base_attribute>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Timezone</name>
+        <base_attribute>timezone</base_attribute>
+        <length>20</length>
+      </application_attribute>
+    </application_element>
+    <application_element>
+      <name>User</name>
+      <basetype>AoUser</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Password</name>
+        <base_attribute>password</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>GivenName</name>
+        <datatype>DT_STRING</datatype>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Surname</name>
+        <datatype>DT_STRING</datatype>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Department</name>
+        <datatype>DT_STRING</datatype>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Telephone</name>
+        <datatype>DT_STRING</datatype>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>E-Mail</name>
+        <datatype>DT_STRING</datatype>
+        <length>50</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>users2groups</name>
+        <ref_to>Role</ref_to>
+        <base_relation>groups</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>groups2users</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Tests</name>
+        <ref_to>Test</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>ResponsiblePerson</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>SubMatrix</name>
+      <basetype>AoSubmatrix</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>SubMatrixNoRows</name>
+        <base_attribute>number_of_rows</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>y-axis-for-x-axis</name>
+        <ref_to>SubMatrix</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>x-axis-for-y-axis</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ResultParameter</name>
+        <ref_to>ResultParameter</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>SubMatrix</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>y-axis-for-z-axis</name>
+        <ref_to>SubMatrix</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>z-axis-for-y-axis</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>x-axis-for-y-axis</name>
+        <ref_to>SubMatrix</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>y-axis-for-x-axis</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>LocalColumns</name>
+        <ref_to>LocalColumn</ref_to>
+        <base_relation>local_columns</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>SubMatrix</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>z-axis-for-y-axis</name>
+        <ref_to>SubMatrix</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>y-axis-for-z-axis</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResult</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>measurement</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>SubMatrices</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>Unit</name>
+      <basetype>AoUnit</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Factor</name>
+        <base_attribute>factor</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Offset</name>
+        <base_attribute>offset</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>ResultParameter</name>
+        <ref_to>ResultParameter</ref_to>
+        <base_relation>parameters</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Unit</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>PhysDimension</name>
+        <ref_to>PhysDimension</ref_to>
+        <base_relation>phys_dimension</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>Units</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantities</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Unit</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Quantities</name>
+        <ref_to>Quantity</ref_to>
+        <base_relation>quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Unit</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TestEquipment</name>
+      <basetype>AoTestEquipment</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>MeaResults</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>measurement</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestEquipment</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSteps</name>
+        <ref_to>TestStep</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestEquipment</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TestStep</name>
+      <basetype>AoSubTest</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Optional</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>Sortindex</name>
+        <datatype>DT_LONG</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MDMLinks</name>
+        <base_attribute>external_references</base_attribute>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>MeaResults</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestStep</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Test</name>
+        <ref_to>Test</ref_to>
+        <base_relation>parent_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TestSteps</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSequence</name>
+        <ref_to>TestSequence</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TestSteps</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestEquipment</name>
+        <ref_to>TestEquipment</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TestSteps</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TestSteps</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TestSequence</name>
+      <basetype>AoTestSequence</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>MeaResults</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>measurement</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestSequence</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSteps</name>
+        <ref_to>TestStep</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestSequence</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>ExternalComponent</name>
+      <basetype>AoExternalComponent</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>FilenameURL</name>
+        <base_attribute>filename_url</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>TypeSpecification</name>
+        <base_attribute>value_type</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Length</name>
+        <base_attribute>component_length</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>StartOffset</name>
+        <base_attribute>start_offset</base_attribute>
+        <datatype>DT_LONGLONG</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>Blocksize</name>
+        <base_attribute>block_size</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>ValuesPerBlock</name>
+        <base_attribute>valuesperblock</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>ValueOffset</name>
+        <base_attribute>value_offset</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>OrdinalNumber</name>
+        <base_attribute>ordinal_number</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>FlagsFilenameURL</name>
+        <base_attribute>flags_filename_url</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>FlagsStartOffset</name>
+        <base_attribute>flags_start_offset</base_attribute>
+        <datatype>DT_LONGLONG</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>LocalColumn</name>
+        <ref_to>LocalColumn</ref_to>
+        <base_relation>local_column</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ExternalComponent</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>MeaResult</name>
+      <basetype>AoMeasurement</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MeasurementBegin</name>
+        <base_attribute>measurement_begin</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MeasurementEnd</name>
+        <base_attribute>measurement_end</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MDMLinks</name>
+        <base_attribute>external_references</base_attribute>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TestStep</name>
+        <ref_to>TestStep</ref_to>
+        <base_relation>test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaResults</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ResultParameterSet</name>
+        <ref_to>ResultParameterSet</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>MeaResult</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>SubMatrices</name>
+        <ref_to>SubMatrix</ref_to>
+        <base_relation>submatrices</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>MeaResult</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantities</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>MeaResult</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSequence</name>
+        <ref_to>TestSequence</ref_to>
+        <base_relation>sequences</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaResults</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>units_under_test</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaResults</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestEquipment</name>
+        <ref_to>TestEquipment</ref_to>
+        <base_relation>equipments</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaResults</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>Test</name>
+      <basetype>AoSubTest</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateClosed</name>
+        <datatype>DT_DATE</datatype>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MDMLinks</name>
+        <base_attribute>external_references</base_attribute>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TestSteps</name>
+        <ref_to>TestStep</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Test</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ResponsiblePerson</name>
+        <ref_to>User</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>Tests</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>StructureLevel</name>
+        <ref_to>StructureLevel</ref_to>
+        <base_relation>parent_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>Tests</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>UnitUnderTest</name>
+      <basetype>AoUnitUnderTest</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>MeaResults</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>measurement</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSteps</name>
+        <ref_to>TestStep</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>Role</name>
+      <basetype>AoUserGroup</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>SuperuserFlag</name>
+        <base_attribute>superuser_flag</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>groups2users</name>
+        <ref_to>User</ref_to>
+        <base_relation>users</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>users2groups</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>Quantity</name>
+      <basetype>AoQuantity</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DefaultRank</name>
+        <base_attribute>default_rank</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>DefDimension</name>
+        <base_attribute>default_dimension</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>DefTypeSize</name>
+        <base_attribute>default_type_size</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>DefMQName</name>
+        <base_attribute>default_mq_name</base_attribute>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DefDataType</name>
+        <base_attribute>default_datatype</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>ValidFlag</name>
+        <datatype>DT_ENUM</datatype>
+        <enumeration_type>valid_enum</enumeration_type>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>MeaQuantities</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Quantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Unit</name>
+        <ref_to>Unit</ref_to>
+        <base_relation>default_unit</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>Quantities</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>LocalColumn</name>
+      <basetype>AoLocalColumn</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>IndependentFlag</name>
+        <base_attribute>independent</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>SequenceRepresentation</name>
+        <base_attribute>sequence_representation</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>GlobalFlag</name>
+        <base_attribute>global_flag</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Values</name>
+        <base_attribute>values</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Flags</name>
+        <base_attribute>flags</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>GenerationParameters</name>
+        <base_attribute>generation_parameters</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>RawDatatype</name>
+        <base_attribute>raw_datatype</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>axistype</name>
+        <datatype>DT_ENUM</datatype>
+        <enumeration_type>axistype</enumeration_type>
+      </application_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantity</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>LocalColumns</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ExternalComponent</name>
+        <ref_to>ExternalComponent</ref_to>
+        <base_relation>external_component</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>LocalColumn</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>SubMatrix</name>
+        <ref_to>SubMatrix</ref_to>
+        <base_relation>submatrix</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>LocalColumns</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>ResultParameterSet</name>
+      <basetype>AoParameterSet</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ResultParameterSet</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ResultParameter</name>
+        <ref_to>ResultParameter</ref_to>
+        <base_relation>parameters</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>ResultParameterSet</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResult</name>
+        <ref_to>MeaResult</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ResultParameterSet</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>ResultParameter</name>
+      <basetype>AoParameter</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DataType</name>
+        <base_attribute>parameter_datatype</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Value</name>
+        <base_attribute>pvalue</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>ResultParameterSet</name>
+        <ref_to>ResultParameterSet</ref_to>
+        <base_relation>parameter_set</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ResultParameter</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Unit</name>
+        <ref_to>Unit</ref_to>
+        <base_relation>unit</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ResultParameter</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>SubMatrix</name>
+        <ref_to>SubMatrix</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ResultParameter</inverse_name>
+      </relation_attribute>
+    </application_element>
+  </application_model>
+  <instance_data>
+    <Environment>
+      <Id>1</Id>
+      <Name>MDM</Name>
+      <MimeType>application/x-asam.aoenvironment</MimeType>
+      <Description>MDM Environment</Description>
+      <DateCreated>20120703120000</DateCreated>
+      <Max_test_level>4</Max_test_level>
+      <Base_model_version>asam30</Base_model_version>
+      <AppModelType>MDM</AppModelType>
+      <AppModelVersion>4.4.1_mod_prototype</AppModelVersion>
+      <Timezone>GMT</Timezone>
+    </Environment>
+    <User>
+      <Id>1</Id>
+      <Name>dummy</Name>
+      <Password>dummy</Password>
+      <MimeType>application/x-asam.aouser</MimeType>
+      <GivenName>dummy</GivenName>
+      <Surname>dummy</Surname>
+      <users2groups>1</users2groups>
+    </User>
+    <Role>
+      <Id>1</Id>
+      <Name>DummyRole</Name>
+      <SuperuserFlag>0</SuperuserFlag>
+      <MimeType>application/x-asam.aorole</MimeType>
+      <groups2users>1</groups2users>
+    </Role>
+  </instance_data>
+</atfx_file>
\ No newline at end of file
diff --git a/org.eclipse.mdm.api.atfxadapter/src/test/resources/mdm_minimum_ods_application_model_with_templates_500.xml b/org.eclipse.mdm.api.atfxadapter/src/test/resources/mdm_minimum_ods_application_model_with_templates_500.xml
new file mode 100644
index 0000000..e383902
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/test/resources/mdm_minimum_ods_application_model_with_templates_500.xml
@@ -0,0 +1,1172 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<atfx_file version="atfx_file: V1.1.0"  xmlns="http://www.asam.net/ODS/5.2/Schema"
+                                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                                         xsi:schemaLocation="http://www.asam.net/ODS/5.2/Schema http://www.asam.net/ODS/5.2/Schema.xsd">
+<!--
+***************************************************************************************************************
+* Based on ODS Base Model version *
+***************************************************************************************************************
+ -->
+   <base_model_version>asam30</base_model_version>
+<!-- 
+***************************************************************************************************************
+* declare application model meta data *
+***************************************************************************************************************
+ -->
+
+   <application_model>
+<!--
+***************************************************************************************************************
+* declare enumeration definitions *
+***************************************************************************************************************
+ -->
+      <application_enumeration>
+         <name>valid_enum</name>
+         <item><name>editing</name><value>0</value></item>
+         <item><name>valid</name><value>1</value></item>
+         <item><name>archive</name><value>2</value></item>
+      </application_enumeration>
+      <application_enumeration>
+         <name>axistype</name>
+         <item><name>Xaxis</name><value>0</value></item>
+         <item><name>Yaxis</name><value>1</value></item>
+         <item><name>Both</name><value>2</value></item>
+      </application_enumeration>
+
+      <application_element><name>Environment</name><basetype>AoEnvironment</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>Max_test_level</name><base_attribute>max_test_level</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Base_model_version</name><base_attribute>base_model_version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>AppModelType</name><base_attribute>application_model_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>AppModelVersion</name><base_attribute>application_model_version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>Timezone</name><base_attribute>timezone</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MeaningOfAliases</name><base_attribute>meaning_of_aliases</base_attribute><datatype>DS_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+      </application_element>
+      <application_element><name>CatSensor</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <relation_attribute><name>CatTestEquipmentComp</name><ref_to>CatTestEquipmentComp</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>CatSensor</inverse_name></relation_attribute>
+         <relation_attribute><name>CatSensorAttr</name><ref_to>CatSensorAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatSensor</inverse_name></relation_attribute>
+         <relation_attribute><name>TplSensor</name><ref_to>TplSensor</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatSensor</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>CatSensorAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>ValueListRef</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ValueCopyable</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ActionRequestClassname</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>ActionRequestParameter</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatSensor</name><ref_to>CatSensor</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>CatSensorAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>ValueList</name><ref_to>ValueList</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>CatSensorAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>TplSensorAttr</name><ref_to>TplSensorAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatSensorAttr</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>CatTestEquipmentComp</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatTestEquipmentAttr</name><ref_to>CatTestEquipmentAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestEquipmentComp</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestEquipmentComp</name><ref_to>TplTestEquipmentComp</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestEquipmentComp</inverse_name></relation_attribute>
+         <relation_attribute><name>CatSensor</name><ref_to>CatSensor</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestEquipmentComp</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>CatTestEquipmentAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>ValueListRef</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ValueCopyable</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ActionRequestClassname</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>ActionRequestParameter</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatTestEquipmentComp</name><ref_to>CatTestEquipmentComp</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>CatTestEquipmentAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>ValueList</name><ref_to>ValueList</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>CatTestEquipmentAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestEquipmentAttr</name><ref_to>TplTestEquipmentAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestEquipmentAttr</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>CatTestSequenceComp</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatTestSequenceAttr</name><ref_to>CatTestSequenceAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestSequenceComp</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestSequenceComp</name><ref_to>TplTestSequenceComp</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestSequenceComp</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>CatTestSequenceAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>ValueListRef</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ValueCopyable</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ActionRequestClassname</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>ActionRequestParameter</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatTestSequenceComp</name><ref_to>CatTestSequenceComp</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>CatTestSequenceAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>ValueList</name><ref_to>ValueList</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>CatTestSequenceAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestSequenceAttr</name><ref_to>TplTestSequenceAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatTestSequenceAttr</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>CatUnitUnderTestComp</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatUnitUnderTestAttr</name><ref_to>CatUnitUnderTestAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatUnitUnderTestComp</inverse_name></relation_attribute>
+         <relation_attribute><name>TplUnitUnderTestComp</name><ref_to>TplUnitUnderTestComp</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatUnitUnderTestComp</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>CatUnitUnderTestAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1500</length></application_attribute>
+         <application_attribute><name>ValueListRef</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ValueCopyable</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ActionRequestClassname</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>ActionRequestParameter</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>CatUnitUnderTestComp</name><ref_to>CatUnitUnderTestComp</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>CatUnitUnderTestAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>ValueList</name><ref_to>ValueList</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>CatUnitUnderTestAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>TplUnitUnderTestAttr</name><ref_to>TplUnitUnderTestAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CatUnitUnderTestAttr</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>FavouriteLists</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ASAMPaths</name><datatype>DS_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <relation_attribute><name>User</name><ref_to>User</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>FavouriteLists</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>MDMFunction</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>256</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <relation_attribute><name>Role</name><ref_to>Role</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MDMFunction</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>SystemParameter</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>100</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Value</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>References</name><datatype>DS_EXTERNALREFERENCE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>254</length></application_attribute>
+         <relation_attribute><name>UserParameter</name><ref_to>UserParameter</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>SystemParameter</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplGroup</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>TplGroupParent</name><ref_to>TplGroup</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplGroupChild</inverse_name></relation_attribute>
+         <relation_attribute><name>TplGroupChild</name><ref_to>TplGroup</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplGroupParent</inverse_name></relation_attribute>
+         <relation_attribute><name>TplUnitUnderTestRoot</name><ref_to>TplUnitUnderTestRoot</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplGroup</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestSequenceRoot</name><ref_to>TplTestSequenceRoot</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplGroup</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestEquipmentRoot</name><ref_to>TplTestEquipmentRoot</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplGroup</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestStep</name><ref_to>TplTestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplGroup</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTest</name><ref_to>TplTest</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplGroup</inverse_name></relation_attribute>
+         <relation_attribute><name>TplMeaResult</name><ref_to>TplMeaResult</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplGroup</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplMeaResult</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+	  <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>DefaultMimeType</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>DefaultName</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>TplSubMatrix</name><ref_to>TplSubMatrix</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplMeaResult</inverse_name></relation_attribute>
+         <relation_attribute><name>TplGroup</name><ref_to>TplGroup</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplMeaResult</inverse_name></relation_attribute>
+         <relation_attribute><name>TplParameterSet</name><ref_to>TplParameterSet</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplMeaResult</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaResult</name><ref_to>MeaResult</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplMeaResult</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestStep</name><ref_to>TplTestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplMeaResult</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplSensor</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Optional</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>DefaultActive</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplTestEquipmentComp</name><ref_to>TplTestEquipmentComp</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>TplSensor</inverse_name></relation_attribute>
+         <relation_attribute><name>CatSensor</name><ref_to>CatSensor</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplSensor</inverse_name></relation_attribute>
+         <relation_attribute><name>Quantity</name><ref_to>Quantity</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplSensor</inverse_name></relation_attribute>
+         <relation_attribute><name>TplSensorAttr</name><ref_to>TplSensorAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplSensor</inverse_name></relation_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>MeaQuantityValuesEditable</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>MeaQuantityIndependent</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>MeaQuantityAxisType</name><datatype>DT_ENUM</datatype><enumeration_type>axistype</enumeration_type><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>MeaQuantityEditorPlugin</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>TplParameterSet</name><ref_to>TplParameterSet</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplSensor</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplSensorAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>DefaultValue</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>ValueReadonly</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Obligatory</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplSensor</name><ref_to>TplSensor</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>TplSensorAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>CatSensorAttr</name><ref_to>CatSensorAttr</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplSensorAttr</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplSubMatrix</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+	  <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>MinNoRows</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>MaxNoRows</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplMeaResult</name><ref_to>TplMeaResult</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>TplSubMatrix</inverse_name></relation_attribute>
+         <relation_attribute><name>SubMatrix</name><ref_to>SubMatrix</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplSubMatrix</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplTest</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>NameHelperClassname</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>DataSourcePluginClassnames</name><datatype>DS_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>TestOrderActionClassnames</name><datatype>DS_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>Tests</name><ref_to>Test</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTest</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestStepUsage</name><ref_to>TplTestStepUsage</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTest</inverse_name></relation_attribute>
+         <relation_attribute><name>TplGroup</name><ref_to>TplGroup</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTest</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplTestEquipmentAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>DefaultValue</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>ValueReadonly</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Obligatory</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplTestEquipmentComp</name><ref_to>TplTestEquipmentComp</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestEquipmentAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>CatTestEquipmentAttr</name><ref_to>CatTestEquipmentAttr</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestEquipmentAttr</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplTestEquipmentRoot</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplTestEquipmentComp</name><ref_to>TplTestEquipmentComp</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestEquipmentRoot</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestStep</name><ref_to>TplTestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestEquipmentRoot</inverse_name></relation_attribute>
+         <relation_attribute><name>TestEquipment</name><ref_to>TestEquipment</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestEquipmentRoot</inverse_name></relation_attribute>
+         <relation_attribute><name>TplGroup</name><ref_to>TplGroup</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestEquipmentRoot</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplTestEquipmentComp</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Optional</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>DefaultActive</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>TestStepSeriesVariable</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplTestEquipmentRoot</name><ref_to>TplTestEquipmentRoot</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestEquipmentComp</inverse_name></relation_attribute>
+         <relation_attribute><name>TplCompParent</name><ref_to>TplTestEquipmentComp</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplCompChildren</inverse_name></relation_attribute>
+         <relation_attribute><name>CatTestEquipmentComp</name><ref_to>CatTestEquipmentComp</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestEquipmentComp</inverse_name></relation_attribute>
+         <relation_attribute><name>TplCompChildren</name><ref_to>TplTestEquipmentComp</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplCompParent</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestEquipmentAttr</name><ref_to>TplTestEquipmentAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestEquipmentComp</inverse_name></relation_attribute>
+         <relation_attribute><name>TplSensor</name><ref_to>TplSensor</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestEquipmentComp</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplTestSequenceAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>DefaultValue</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>ValueReadonly</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Obligatory</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplTestSequenceComp</name><ref_to>TplTestSequenceComp</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestSequenceAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>CatTestSequenceAttr</name><ref_to>CatTestSequenceAttr</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestSequenceAttr</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplTestSequenceRoot</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplTestSequenceComp</name><ref_to>TplTestSequenceComp</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestSequenceRoot</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestStep</name><ref_to>TplTestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestSequenceRoot</inverse_name></relation_attribute>
+         <relation_attribute><name>TestSequence</name><ref_to>TestSequence</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestSequenceRoot</inverse_name></relation_attribute>
+         <relation_attribute><name>TplGroup</name><ref_to>TplGroup</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestSequenceRoot</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplTestSequenceComp</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Optional</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>DefaultActive</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>TestStepSeriesVariable</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplTestSequenceRoot</name><ref_to>TplTestSequenceRoot</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestSequenceComp</inverse_name></relation_attribute>
+         <relation_attribute><name>TplCompParent</name><ref_to>TplTestSequenceComp</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplCompChildren</inverse_name></relation_attribute>
+         <relation_attribute><name>CatTestSequenceComp</name><ref_to>CatTestSequenceComp</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestSequenceComp</inverse_name></relation_attribute>
+         <relation_attribute><name>TplCompChildren</name><ref_to>TplTestSequenceComp</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplCompParent</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestSequenceAttr</name><ref_to>TplTestSequenceAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestSequenceComp</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplTestStepUsage</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+	  <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>DefaultActive</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Optional</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplTest</name><ref_to>TplTest</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestStepUsage</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestStep</name><ref_to>TplTestStep</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestStepUsage</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplUnitUnderTestAttr</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>DefaultValue</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>ValueReadonly</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Obligatory</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplUnitUnderTestComp</name><ref_to>TplUnitUnderTestComp</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>TplUnitUnderTestAttr</inverse_name></relation_attribute>
+         <relation_attribute><name>CatUnitUnderTestAttr</name><ref_to>CatUnitUnderTestAttr</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplUnitUnderTestAttr</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplUnitUnderTestRoot</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplUnitUnderTestComp</name><ref_to>TplUnitUnderTestComp</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplUnitUnderTestRoot</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestStep</name><ref_to>TplTestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplUnitUnderTestRoot</inverse_name></relation_attribute>
+         <relation_attribute><name>UnitUnderTest</name><ref_to>UnitUnderTest</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplUnitUnderTestRoot</inverse_name></relation_attribute>
+         <relation_attribute><name>TplGroup</name><ref_to>TplGroup</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplUnitUnderTestRoot</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplTestStep</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplUnitUnderTestRoot</name><ref_to>TplUnitUnderTestRoot</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestStep</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestEquipmentRoot</name><ref_to>TplTestEquipmentRoot</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestStep</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestSequenceRoot</name><ref_to>TplTestSequenceRoot</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestStep</inverse_name></relation_attribute>
+         <relation_attribute><name>TestSteps</name><ref_to>TestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestStep</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTestStepUsage</name><ref_to>TplTestStepUsage</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestStep</inverse_name></relation_attribute>
+         <relation_attribute><name>TplGroup</name><ref_to>TplGroup</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplTestStep</inverse_name></relation_attribute>
+         <relation_attribute><name>TplMeaResult</name><ref_to>TplMeaResult</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplTestStep</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplUnitUnderTestComp</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Optional</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>DefaultActive</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>TestStepSeriesVariable</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>TplUnitUnderTestRoot</name><ref_to>TplUnitUnderTestRoot</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplUnitUnderTestComp</inverse_name></relation_attribute>
+         <relation_attribute><name>TplCompParent</name><ref_to>TplUnitUnderTestComp</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplCompChildren</inverse_name></relation_attribute>
+         <relation_attribute><name>CatUnitUnderTestComp</name><ref_to>CatUnitUnderTestComp</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplUnitUnderTestComp</inverse_name></relation_attribute>
+         <relation_attribute><name>TplCompChildren</name><ref_to>TplUnitUnderTestComp</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplCompParent</inverse_name></relation_attribute>
+         <relation_attribute><name>TplUnitUnderTestAttr</name><ref_to>TplUnitUnderTestAttr</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplUnitUnderTestComp</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>UserParameter</name><basetype>AoAny</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Value</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>References</name><datatype>DS_EXTERNALREFERENCE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>254</length></application_attribute>
+         <relation_attribute><name>SystemParameter</name><ref_to>SystemParameter</ref_to><base_relation>parent</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>UserParameter</inverse_name></relation_attribute>
+         <relation_attribute><name>User</name><ref_to>User</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>UserParameter</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>PhysDimension</name><basetype>AoPhysicalDimension</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>Length</name><base_attribute>length_exp</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Mass</name><base_attribute>mass_exp</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Time</name><base_attribute>time_exp</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Current</name><base_attribute>current_exp</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Temperature</name><base_attribute>temperature_exp</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>MolarAmount</name><base_attribute>molar_amount_exp</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>LuminousIntensity</name><base_attribute>luminous_intensity_exp</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>angle</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>Units</name><ref_to>Unit</ref_to><base_relation>units</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>PhysDimension</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>Project</name><basetype>AoTest</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>StructureLevel</name><ref_to>StructureLevel</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Project</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>ResultParameterSet</name><basetype>AoParameterSet</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>MeaResult</name><ref_to>MeaResult</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>ResultParameterSet</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaQuantity</name><ref_to>MeaQuantity</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>ResultParameterSet</inverse_name></relation_attribute>
+         <relation_attribute><name>ResultParameter</name><ref_to>ResultParameter</ref_to><base_relation>parameters</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ResultParameterSet</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>Role</name><basetype>AoUserGroup</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>SuperuserFlag</name><base_attribute>superuser_flag</base_attribute><datatype>DT_SHORT</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>MDMFunction</name><ref_to>MDMFunction</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Role</inverse_name></relation_attribute>
+         <relation_attribute><name>groups2users</name><ref_to>User</ref_to><base_relation>users</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>users2groups</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TestEquipment</name><basetype>AoTestEquipment</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>TplTestEquipmentRoot</name><ref_to>TplTestEquipmentRoot</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TestEquipment</inverse_name></relation_attribute>
+         <relation_attribute><name>TestSteps</name><ref_to>TestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TestEquipment</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaResults</name><ref_to>MeaResult</ref_to><base_relation>measurement</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TestEquipment</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TestSequence</name><basetype>AoTestSequence</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>TplTestSequenceRoot</name><ref_to>TplTestSequenceRoot</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TestSequence</inverse_name></relation_attribute>
+         <relation_attribute><name>TestSteps</name><ref_to>TestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TestSequence</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaResults</name><ref_to>MeaResult</ref_to><base_relation>measurement</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TestSequence</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplParameterSet</name><basetype>AoParameterSet</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+	  <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>TplMeaResult</name><ref_to>TplMeaResult</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplParameterSet</inverse_name></relation_attribute>
+         <relation_attribute><name>TplParameter</name><ref_to>TplParameter</ref_to><base_relation>parameters</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TplParameterSet</inverse_name></relation_attribute>
+         <relation_attribute><name>TplSensor</name><ref_to>TplSensor</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplParameterSet</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>Unit</name><basetype>AoUnit</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>Factor</name><base_attribute>factor</base_attribute><datatype>DT_DOUBLE</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Offset</name><base_attribute>offset</base_attribute><datatype>DT_DOUBLE</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>PhysDimension</name><ref_to>PhysDimension</ref_to><base_relation>phys_dimension</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>Units</inverse_name></relation_attribute>
+         <relation_attribute><name>Quantities</name><ref_to>Quantity</ref_to><base_relation>quantities</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Unit</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaQuantities</name><ref_to>MeaQuantity</ref_to><base_relation>measurement_quantities</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Unit</inverse_name></relation_attribute>
+         <relation_attribute><name>ResultParameter</name><ref_to>ResultParameter</ref_to><base_relation>parameters</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Unit</inverse_name></relation_attribute>
+         <relation_attribute><name>TplParameter</name><ref_to>TplParameter</ref_to><base_relation>parameters</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Unit</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>Quantity</name><basetype>AoQuantity</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>DefaultRank</name><base_attribute>default_rank</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>DefDimension</name><base_attribute>default_dimension</base_attribute><datatype>DS_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>DefTypeSize</name><base_attribute>default_type_size</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>DefMQName</name><base_attribute>default_mq_name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>DefDataType</name><base_attribute>default_datatype</base_attribute><datatype>DT_ENUM</datatype><enumeration_type>datatype_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ValidFlag</name><datatype>DT_ENUM</datatype><enumeration_type>valid_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>Unit</name><ref_to>Unit</ref_to><base_relation>default_unit</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>Quantities</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaQuantities</name><ref_to>MeaQuantity</ref_to><base_relation>measurement_quantities</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Quantity</inverse_name></relation_attribute>
+         <relation_attribute><name>TplSensor</name><ref_to>TplSensor</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Quantity</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>UnitUnderTest</name><basetype>AoUnitUnderTest</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>Version</name><base_attribute>version</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>20</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>TplUnitUnderTestRoot</name><ref_to>TplUnitUnderTestRoot</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>UnitUnderTest</inverse_name></relation_attribute>
+         <relation_attribute><name>TestSteps</name><ref_to>TestStep</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>UnitUnderTest</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaResults</name><ref_to>MeaResult</ref_to><base_relation>measurement</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>UnitUnderTest</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>User</name><basetype>AoUser</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>50</length></application_attribute>
+         <application_attribute><name>Password</name><base_attribute>password</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>GivenName</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>Surname</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>Department</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>Telephone</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>E-Mail</name><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <relation_attribute><name>Tests</name><ref_to>Test</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ResponsiblePerson</inverse_name></relation_attribute>
+         <relation_attribute><name>UserParameter</name><ref_to>UserParameter</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>User</inverse_name></relation_attribute>
+         <relation_attribute><name>FavouriteLists</name><ref_to>FavouriteLists</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>User</inverse_name></relation_attribute>
+         <relation_attribute><name>users2groups</name><ref_to>Role</ref_to><base_relation>groups</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>groups2users</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>ValueList</name><basetype>AoParameterSet</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>true</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <relation_attribute><name>CatUnitUnderTestAttr</name><ref_to>CatUnitUnderTestAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ValueList</inverse_name></relation_attribute>
+         <relation_attribute><name>CatTestEquipmentAttr</name><ref_to>CatTestEquipmentAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ValueList</inverse_name></relation_attribute>
+         <relation_attribute><name>CatTestSequenceAttr</name><ref_to>CatTestSequenceAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ValueList</inverse_name></relation_attribute>
+         <relation_attribute><name>CatSensorAttr</name><ref_to>CatSensorAttr</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ValueList</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>ResultParameter</name><basetype>AoParameter</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>DataType</name><base_attribute>parameter_datatype</base_attribute><datatype>DT_ENUM</datatype><enumeration_type>datatype_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Value</name><base_attribute>pvalue</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>ResultParameterSet</name><ref_to>ResultParameterSet</ref_to><base_relation>parameter_set</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>ResultParameter</inverse_name></relation_attribute>
+         <relation_attribute><name>SubMatrix</name><ref_to>SubMatrix</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>ResultParameter</inverse_name></relation_attribute>
+         <relation_attribute><name>Unit</name><ref_to>Unit</ref_to><base_relation>unit</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>ResultParameter</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>StructureLevel</name><basetype>AoSubTest</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>Project</name><ref_to>Project</ref_to><base_relation>parent_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>StructureLevel</inverse_name></relation_attribute>
+         <relation_attribute><name>Tests</name><ref_to>Test</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>StructureLevel</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TplParameter</name><basetype>AoParameter</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+	  <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>50</length></application_attribute>
+         <application_attribute><name>DefaultDataType</name><base_attribute>parameter_datatype</base_attribute><datatype>DT_ENUM</datatype><enumeration_type>datatype_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>DefaultValue</name><base_attribute>pvalue</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>254</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <relation_attribute><name>TplParameterSet</name><ref_to>TplParameterSet</ref_to><base_relation>parameter_set</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>TplParameter</inverse_name></relation_attribute>
+         <relation_attribute><name>Unit</name><ref_to>Unit</ref_to><base_relation>unit</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TplParameter</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>Test</name><basetype>AoSubTest</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>DateClosed</name><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MDMLinks</name><base_attribute>external_references</base_attribute><datatype>DS_EXTERNALREFERENCE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>254</length></application_attribute>
+         <relation_attribute><name>StructureLevel</name><ref_to>StructureLevel</ref_to><base_relation>parent_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>Tests</inverse_name></relation_attribute>        
+         <relation_attribute><name>ResponsiblePerson</name><ref_to>User</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>Tests</inverse_name></relation_attribute>
+         <relation_attribute><name>TplTest</name><ref_to>TplTest</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>Tests</inverse_name></relation_attribute>
+         <relation_attribute><name>TestSteps</name><ref_to>TestStep</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>Test</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>TestStep</name><basetype>AoSubTest</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>Optional</name><datatype>DT_BOOLEAN</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Sortindex</name><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>MDMLinks</name><base_attribute>external_references</base_attribute><datatype>DS_EXTERNALREFERENCE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>254</length></application_attribute>
+         <relation_attribute><name>Test</name><ref_to>Test</ref_to><base_relation>parent_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>TestSteps</inverse_name></relation_attribute>         
+         <relation_attribute><name>TplTestStep</name><ref_to>TplTestStep</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TestSteps</inverse_name></relation_attribute>
+         <relation_attribute><name>TestEquipment</name><ref_to>TestEquipment</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TestSteps</inverse_name></relation_attribute>
+         <relation_attribute><name>UnitUnderTest</name><ref_to>UnitUnderTest</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TestSteps</inverse_name></relation_attribute>
+         <relation_attribute><name>TestSequence</name><ref_to>TestSequence</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>TestSteps</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaResults</name><ref_to>MeaResult</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>TestStep</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>MeaResult</name><basetype>AoMeasurement</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>100</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>DateCreated</name><base_attribute>version_date</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MeasurementBegin</name><base_attribute>measurement_begin</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MeasurementEnd</name><base_attribute>measurement_end</base_attribute><datatype>DT_DATE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>30</length></application_attribute>
+         <application_attribute><name>MDMLinks</name><base_attribute>external_references</base_attribute><datatype>DS_EXTERNALREFERENCE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>254</length></application_attribute>
+         <relation_attribute><name>TestStep</name><ref_to>TestStep</ref_to><base_relation>test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>MeaResults</inverse_name></relation_attribute>
+         <relation_attribute><name>TestEquipment</name><ref_to>TestEquipment</ref_to><base_relation>equipments</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>MeaResults</inverse_name></relation_attribute>
+         <relation_attribute><name>UnitUnderTest</name><ref_to>UnitUnderTest</ref_to><base_relation>units_under_test</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>MeaResults</inverse_name></relation_attribute>
+         <relation_attribute><name>TestSequence</name><ref_to>TestSequence</ref_to><base_relation>sequences</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>MeaResults</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaQuantities</name><ref_to>MeaQuantity</ref_to><base_relation>measurement_quantities</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MeaResult</inverse_name></relation_attribute>
+         <relation_attribute><name>SubMatrices</name><ref_to>SubMatrix</ref_to><base_relation>submatrices</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MeaResult</inverse_name></relation_attribute>
+         <relation_attribute><name>ResultParameterSet</name><ref_to>ResultParameterSet</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MeaResult</inverse_name></relation_attribute>
+         <relation_attribute><name>TplMeaResult</name><ref_to>TplMeaResult</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>MeaResult</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>MeaQuantity</name><basetype>AoMeasurementQuantity</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>Description</name><base_attribute>description</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>500</length></application_attribute>
+         <application_attribute><name>Interpolation</name><base_attribute>interpolation</base_attribute><datatype>DT_ENUM</datatype><enumeration_type>interpolation_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>DataType</name><base_attribute>datatype</base_attribute><datatype>DT_ENUM</datatype><enumeration_type>datatype_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Rank</name><base_attribute>rank</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Dimension</name><base_attribute>dimension</base_attribute><datatype>DS_LONG</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>TypeSize</name><base_attribute>type_size</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Minimum</name><base_attribute>minimum</base_attribute><datatype>DT_DOUBLE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Maximum</name><base_attribute>maximum</base_attribute><datatype>DT_DOUBLE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Average</name><base_attribute>average</base_attribute><datatype>DT_DOUBLE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Deviation</name><base_attribute>standard_deviation</base_attribute><datatype>DT_DOUBLE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>MeaResult</name><ref_to>MeaResult</ref_to><base_relation>measurement</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>MeaQuantities</inverse_name></relation_attribute>
+         <relation_attribute><name>Quantity</name><ref_to>Quantity</ref_to><base_relation>quantity</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>MeaQuantities</inverse_name></relation_attribute>
+         <relation_attribute><name>Unit</name><ref_to>Unit</ref_to><base_relation>unit</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>MeaQuantities</inverse_name></relation_attribute>
+         <relation_attribute><name>LocalColumns</name><ref_to>LocalColumn</ref_to><base_relation>local_columns</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MeaQuantity</inverse_name></relation_attribute>
+         <relation_attribute><name>ResultParameterSet</name><ref_to>ResultParameterSet</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>MeaQuantity</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>SubMatrix</name><basetype>AoSubmatrix</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>SubMatrixNoRows</name><base_attribute>number_of_rows</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>MeaResult</name><ref_to>MeaResult</ref_to><base_relation>measurement</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>SubMatrices</inverse_name></relation_attribute>
+         <relation_attribute><name>x-axis-for-y-axis</name><ref_to>SubMatrix</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>y-axis-for-x-axis</inverse_name></relation_attribute>
+         <relation_attribute><name>z-axis-for-y-axis</name><ref_to>SubMatrix</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>y-axis-for-z-axis</inverse_name></relation_attribute>
+         <relation_attribute><name>y-axis-for-x-axis</name><ref_to>SubMatrix</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>x-axis-for-y-axis</inverse_name></relation_attribute>
+         <relation_attribute><name>y-axis-for-z-axis</name><ref_to>SubMatrix</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>z-axis-for-y-axis</inverse_name></relation_attribute>
+         <relation_attribute><name>ResultParameter</name><ref_to>ResultParameter</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>SubMatrix</inverse_name></relation_attribute>
+         <relation_attribute><name>LocalColumns</name><ref_to>LocalColumn</ref_to><base_relation>local_columns</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>SubMatrix</inverse_name></relation_attribute>
+         <relation_attribute><name>TplSubMatrix</name><ref_to>TplSubMatrix</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>SubMatrix</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>LocalColumn</name><basetype>AoLocalColumn</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>MimeType</name><base_attribute>mime_type</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>IndependentFlag</name><base_attribute>independent</base_attribute><datatype>DT_SHORT</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>SequenceRepresentation</name><base_attribute>sequence_representation</base_attribute><datatype>DT_ENUM</datatype><enumeration_type>seq_rep_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>GlobalFlag</name><base_attribute>global_flag</base_attribute><datatype>DT_SHORT</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Values</name><base_attribute>values</base_attribute></application_attribute>
+         <application_attribute><name>Flags</name><base_attribute>flags</base_attribute></application_attribute>
+         <application_attribute><name>GenerationParameters</name><base_attribute>generation_parameters</base_attribute><datatype>DS_DOUBLE</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>RawDatatype</name><base_attribute>raw_datatype</base_attribute><datatype>DT_ENUM</datatype><enumeration_type>datatype_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>axistype</name><datatype>DT_ENUM</datatype><enumeration_type>axistype</enumeration_type><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>SubMatrix</name><ref_to>SubMatrix</ref_to><base_relation>submatrix</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>LocalColumns</inverse_name></relation_attribute>
+         <relation_attribute><name>MeaQuantity</name><ref_to>MeaQuantity</ref_to><base_relation>measurement_quantity</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>LocalColumns</inverse_name></relation_attribute>
+         <relation_attribute><name>ExternalComponent</name><ref_to>ExternalComponent</ref_to><base_relation>external_component</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>LocalColumn</inverse_name></relation_attribute>
+      </application_element>
+      <application_element><name>ExternalComponent</name><basetype>AoExternalComponent</basetype>
+         <application_attribute><name>Id</name><base_attribute>id</base_attribute><datatype>DT_LONGLONG</datatype><autogenerate>true</autogenerate><obligatory>true</obligatory><unique>true</unique><length>1</length></application_attribute>
+         <application_attribute><name>Name</name><base_attribute>name</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>150</length></application_attribute>
+         <application_attribute><name>OrdinalNumber</name><base_attribute>ordinal_number</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>TypeSpecification</name><base_attribute>value_type</base_attribute><datatype>DT_ENUM</datatype><enumeration_type>typespec_enum</enumeration_type><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Length</name><base_attribute>component_length</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>StartOffset</name><base_attribute>start_offset</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>Blocksize</name><base_attribute>block_size</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ValuesPerBlock</name><base_attribute>valuesperblock</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>ValueOffset</name><base_attribute>value_offset</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <application_attribute><name>FilenameURL</name><base_attribute>filename_url</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>true</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>FlagsFilenameURL</name><base_attribute>flags_filename_url</base_attribute><datatype>DT_STRING</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>256</length></application_attribute>
+         <application_attribute><name>FlagsStartOffset</name><base_attribute>flags_start_offset</base_attribute><datatype>DT_LONG</datatype><autogenerate>false</autogenerate><obligatory>false</obligatory><unique>false</unique><length>1</length></application_attribute>
+         <relation_attribute><name>LocalColumn</name><ref_to>LocalColumn</ref_to><base_relation>local_column</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>ExternalComponent</inverse_name></relation_attribute>
+      </application_element>
+   </application_model>
+<!-- 
+***************************************************************************************************************
+* end application model meta data *
+***************************************************************************************************************
+ -->
+<!--
+***************************************************************************************************************
+* Instance Data is NOT validated with Base Schema *
+***************************************************************************************************************
+ -->
+
+   <instance_data>
+      <Environment><Id>1</Id><Name>MDM</Name><MimeType>application/x-asam.aoenvironment</MimeType><Description>MDM Environment</Description><DateCreated>20120214120000</DateCreated><Max_test_level>4</Max_test_level><Base_model_version>asam30</Base_model_version><AppModelType>ASAM_SECURITY,ASAM_NVH,MDM</AppModelType><AppModelVersion>4.4.1</AppModelVersion><Timezone>GMT</Timezone>
+         <MeaningOfAliases><s>,language=en</s><s>,language=de</s>
+         </MeaningOfAliases>
+      </Environment>
+      <PhysDimension><Id>1</Id><Name>time</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>3 30 31 32 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>2</Id><Name>mass</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>1</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>2 22 23 24 25 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>3</Id><Name>length</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>1</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>1 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>4</Id><Name>current</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>0</Time><Current>1</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>4 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>5</Id><Name>temperature</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>1</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>5 83 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>6</Id><Name>amount_of_substance</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>1</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>6 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>7</Id><Name>luminous_intensity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>1</LuminousIntensity><angle>0</angle>
+         <Units>7 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>8</Id><Name>plane_angle</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>8 9 10 11 12 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>9</Id><Name>solid_angle</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>66 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>10</Id><Name>refraction_power</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>&quot;diopter&quot;, &quot;dioptre&quot;</Description><Length>-1</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>13 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>11</Id><Name>area</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>14 15 16 17 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>12</Id><Name>volume</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>3</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>18 19 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>13</Id><Name>volume_flow_rate</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>3</Length><Mass>0</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>20 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>14</Id><Name>specific_volume</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>3</Length><Mass>-1</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>21 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>15</Id><Name>fiber_coarseness</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-1</Length><Mass>1</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>26 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>16</Id><Name>area_related_mass</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>area-related mass = grammage</Description><Length>-2</Length><Mass>1</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>27 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>17</Id><Name>mass_flow</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>1</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>28 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>18</Id><Name>density</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-3</Length><Mass>1</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>29 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>19</Id><Name>frequency</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>33 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>20</Id><Name>rotational_frequency</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>1/s</Description><Length>0</Length><Mass>0</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>34 35 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>21</Id><Name>velocity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>1</Length><Mass>0</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>36 37 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>22</Id><Name>acceleration</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>1</Length><Mass>0</Mass><Time>-2</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>38 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>23</Id><Name>angular_velocity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>39 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>24</Id><Name>force</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>1</Length><Mass>1</Mass><Time>-2</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>40 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>25</Id><Name>momentum</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>&quot;impulse&quot;, &quot;impetus&quot;</Description><Length>1</Length><Mass>1</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>41 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>26</Id><Name>acoustic_pressure</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-1</Length><Mass>1</Mass><Time>-2</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>42 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>27</Id><Name>acoustic_power</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>1</Mass><Time>-3</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>43 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>28</Id><Name>sound_intensity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>W/(m^2)</Description><Length>0</Length><Mass>1</Mass><Time>-3</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>44 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>29</Id><Name>noise_dose</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>&quot;laermdosis&quot;</Description><Length>0</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>96 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>30</Id><Name>pressure</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>unit: pascal</Description><Length>-1</Length><Mass>1</Mass><Time>-2</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>45 46 47 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>31</Id><Name>dynamic_viscosity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-1</Length><Mass>1</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>48 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>32</Id><Name>kinematic_viscosity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>0</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>49 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>33</Id><Name>energy</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>unit: joule</Description><Length>2</Length><Mass>1</Mass><Time>-2</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>50 51 52 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>34</Id><Name>heat_capacity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>= entropy</Description><Length>2</Length><Mass>1</Mass><Time>-2</Time><Current>0</Current><Temperature>-1</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>53 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>35</Id><Name>energy_density</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-1</Length><Mass>1</Mass><Time>-2</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>54 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>36</Id><Name>specific_energy</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>0</Mass><Time>-2</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>55 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>37</Id><Name>output</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>unit: watt</Description><Length>2</Length><Mass>1</Mass><Time>-3</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>58 59 60 61 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>38</Id><Name>thermal_conductivity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>1</Length><Mass>1</Mass><Time>-3</Time><Current>0</Current><Temperature>-1</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>62 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>39</Id><Name>thermal_transmission_coefficient</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>1</Mass><Time>-3</Time><Current>0</Current><Temperature>-1</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>63 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>40</Id><Name>heat_flow_density</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>1</Mass><Time>-3</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+      </PhysDimension>
+      <PhysDimension><Id>41</Id><Name>radiant_intensity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>1</Mass><Time>-3</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>65 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>42</Id><Name>radiance</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>1</Mass><Time>-3</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>67 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>43</Id><Name>voltage</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>1</Mass><Time>-3</Time><Current>-1</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>77 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>44</Id><Name>electrical_resistance</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>1</Mass><Time>-3</Time><Current>-2</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>68 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>45</Id><Name>electrical_conductance</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-2</Length><Mass>-1</Mass><Time>3</Time><Current>2</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>69 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>46</Id><Name>electric_charge</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>1</Time><Current>1</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>70 71 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>47</Id><Name>charge_density</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-3</Length><Mass>0</Mass><Time>1</Time><Current>1</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>72 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>48</Id><Name>electrical_displacement_field</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-2</Length><Mass>0</Mass><Time>1</Time><Current>1</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>73 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>49</Id><Name>capacitance</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-2</Length><Mass>-1</Mass><Time>4</Time><Current>2</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>74 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>50</Id><Name>permittivity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-3</Length><Mass>-1</Mass><Time>4</Time><Current>2</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>75 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>51</Id><Name>electric_field_strength</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>1</Length><Mass>1</Mass><Time>-3</Time><Current>-1</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>76 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>52</Id><Name>magnetic_flux</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>1</Mass><Time>-2</Time><Current>-1</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>78 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>53</Id><Name>magnetic_field_density</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>1</Mass><Time>-2</Time><Current>-1</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>79 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>54</Id><Name>inductance</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>1</Mass><Time>-2</Time><Current>-2</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>80 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>55</Id><Name>permeability</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>electromagnetic</Description><Length>1</Length><Mass>1</Mass><Time>-2</Time><Current>-2</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>81 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>56</Id><Name>magnetic_field_intensity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-1</Length><Mass>0</Mass><Time>0</Time><Current>1</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>82 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>57</Id><Name>luminance</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-2</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>1</LuminousIntensity><angle>0</angle>
+         <Units>84 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>58</Id><Name>luminous_flux</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>1</LuminousIntensity><angle>0</angle>
+         <Units>85 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>59</Id><Name>activity_of_a_radioactive_substance</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>87 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>60</Id><Name>absorbed_dose</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>0</Mass><Time>-2</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>88 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>61</Id><Name>equivalent_dose</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>0</Mass><Time>-2</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>89 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>62</Id><Name>absorbed_dose_power</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>&quot;energiedosisleistung&quot;</Description><Length>2</Length><Mass>0</Mass><Time>-3</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>90 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>63</Id><Name>equivalent_dose_rate</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>0</Mass><Time>-3</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>98 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>64</Id><Name>exposure_as_a_quantity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>&quot;ionendosis&quot;</Description><Length>0</Length><Mass>-1</Mass><Time>1</Time><Current>1</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>99 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>65</Id><Name>molar_concentration</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-3</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>1</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>91 92 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>66</Id><Name>molar_volume</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>3</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>-1</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>93 94 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>67</Id><Name>molar_entropy</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>2</Length><Mass>1</Mass><Time>-2</Time><Current>0</Current><Temperature>-1</Temperature><MolarAmount>-1</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>57 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>68</Id><Name>molar_internal_energy</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>&quot;molare innere energie&quot;</Description><Length>2</Length><Mass>1</Mass><Time>-2</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>-1</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>56 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>69</Id><Name>mass_fraction</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+      </PhysDimension>
+      <PhysDimension><Id>70</Id><Name>catalytic_activity</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>0</Length><Mass>0</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>1</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>95 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>71</Id><Name>catalytic_concentration</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Description>&quot;katalytische konzentration&quot;</Description><Length>-3</Length><Mass>0</Mass><Time>-1</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>1</MolarAmount><LuminousIntensity>0</LuminousIntensity><angle>0</angle>
+         <Units>97 </Units>
+      </PhysDimension>
+      <PhysDimension><Id>72</Id><Name>illumination</Name><MimeType>application/x-asam.aophysicaldimension</MimeType><Length>-2</Length><Mass>0</Mass><Time>0</Time><Current>0</Current><Temperature>0</Temperature><MolarAmount>0</MolarAmount><LuminousIntensity>1</LuminousIntensity><angle>0</angle>
+         <Units>86 </Units>
+      </PhysDimension>
+      <Role><Id>1</Id><Name>MDMSystemAdministrator</Name><MimeType>application/x-asam.aorole</MimeType><Description>system administrator of the MDM system.</Description><SuperuserFlag>1</SuperuserFlag>
+         <groups2users>3 </groups2users>
+      </Role>
+      <Role><Id>2</Id><Name>MDMMethodsAdministrator</Name><MimeType>application/x-asam.aorole</MimeType><Description>administers (creates, changes, deletes) the description
+				patterns (MDM catalogue and MDM Templates) of the MDM system as well
+				as the interfacing with contextual systems.</Description><SuperuserFlag>0</SuperuserFlag>
+         <groups2users>2 </groups2users>
+      </Role>
+      <Role><Id>3</Id><Name>MDMTestPlanner</Name><MimeType>application/x-asam.aorole</MimeType><Description>defines the desired boundary conditions
+				(MDM:UnitUnderTest, MDM:TestEquipment, MDM: TestSequence) of a test.
+			</Description><SuperuserFlag>0</SuperuserFlag>
+         <groups2users>4 </groups2users>
+      </Role>
+      <Role><Id>4</Id><Name>MDMDataProcessor</Name><MimeType>application/x-asam.aorole</MimeType><Description>retrieves data from the MDM system, generates derived
+				data and stores it back to the MDM system</Description><SuperuserFlag>0</SuperuserFlag>
+         <groups2users>5 </groups2users>
+      </Role>
+      <Role><Id>5</Id><Name>MDMTestConditioner</Name><MimeType>application/x-asam.aorole</MimeType><Description>sets up the MDM:TestEquipment and assembles it with the
+				MDM:UnitUnderTest to complete the Test setup for executing the
+				MDM:TestStep</Description><SuperuserFlag>0</SuperuserFlag>
+         <groups2users>6 </groups2users>
+      </Role>
+      <Role><Id>6</Id><Name>MDMTestObjectConditioner</Name><MimeType>application/x-asam.aorole</MimeType><Description>prepares the MDM:UnitUnderTest for the MDM:TestStep.
+			</Description><SuperuserFlag>0</SuperuserFlag>
+         <groups2users>7 </groups2users>
+      </Role>
+      <Role><Id>7</Id><Name>MDMTestOperator</Name><MimeType>application/x-asam.aorole</MimeType><Description>executes the MDM:TestSteps and generates the Test Data
+			</Description><SuperuserFlag>0</SuperuserFlag>
+         <groups2users>8 </groups2users>
+      </Role>
+      <Role><Id>8</Id><Name>MDMDataCustomer</Name><MimeType>application/x-asam.aorole</MimeType><Description>retrieves data from the MDM system for any use
+			</Description><SuperuserFlag>0</SuperuserFlag>
+         <groups2users>9 </groups2users>
+      </Role>
+      <Role><Id>9</Id><Name>MDMTestReviewer</Name><MimeType>application/x-asam.aorole</MimeType><Description>checks the Test results for correctness, completeness
+				and relevancy and imports them from an external test bed system e.g.
+				to the MDM System.</Description><SuperuserFlag>0</SuperuserFlag>
+         <groups2users>1 </groups2users>
+      </Role>
+      <Role><Id>10</Id><Name>MDMMethodsPlanner</Name><MimeType>application/x-asam.aorole</MimeType><Description>defines the standards for testing and functional design
+				which have to be met by the tests documented in the mdm system
+			</Description><SuperuserFlag>0</SuperuserFlag>
+         <groups2users>10 </groups2users>
+      </Role>
+      <Unit><Id>1</Id><Name>m</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>3</PhysDimension>
+      </Unit>
+      <Unit><Id>2</Id><Name>kg</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>2</PhysDimension>
+      </Unit>
+      <Unit><Id>3</Id><Name>s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>1</PhysDimension>
+      </Unit>
+      <Unit><Id>4</Id><Name>A</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>4</PhysDimension>
+      </Unit>
+      <Unit><Id>5</Id><Name>K</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>5</PhysDimension>
+      </Unit>
+      <Unit><Id>6</Id><Name>mol</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>6</PhysDimension>
+      </Unit>
+      <Unit><Id>7</Id><Name>cd</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>7</PhysDimension>
+      </Unit>
+      <Unit><Id>8</Id><Name>rad</Name><MimeType>application/x-asam.aounit</MimeType><Description>1 rad = 360° / (2*pi)</Description><Factor>57.29580000000000</Factor><Offset>0.000000</Offset><PhysDimension>8</PhysDimension>
+      </Unit>
+      <Unit><Id>9</Id><Name>grad</Name><MimeType>application/x-asam.aounit</MimeType><Description>(pi/180) * rad</Description><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>8</PhysDimension>
+      </Unit>
+      <Unit><Id>10</Id><Name>&apos;</Name><MimeType>application/x-asam.aounit</MimeType><Description>1/60°</Description><Factor>0.016670</Factor><Offset>0.000000</Offset><PhysDimension>8</PhysDimension>
+      </Unit>
+      <Unit><Id>11</Id><Name>&apos;&apos;</Name><MimeType>application/x-asam.aounit</MimeType><Description>1/3600°</Description><Factor>0.000278</Factor><Offset>0.000000</Offset><PhysDimension>8</PhysDimension>
+      </Unit>
+      <Unit><Id>12</Id><Name>gon</Name><MimeType>application/x-asam.aounit</MimeType><Description>1 gon = 0.9°</Description><Factor>0.900000000000000</Factor><Offset>0.000000</Offset><PhysDimension>8</PhysDimension>
+      </Unit>
+      <Unit><Id>13</Id><Name>dpt</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>10</PhysDimension>
+      </Unit>
+      <Unit><Id>14</Id><Name>m^2</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>11</PhysDimension>
+      </Unit>
+      <Unit><Id>15</Id><Name>a</Name><MimeType>application/x-asam.aounit</MimeType><Factor>100.0000000000000</Factor><Offset>0.000000</Offset><PhysDimension>11</PhysDimension>
+      </Unit>
+      <Unit><Id>16</Id><Name>ha</Name><MimeType>application/x-asam.aounit</MimeType><Factor>10000.00000000000</Factor><Offset>0.000000</Offset><PhysDimension>11</PhysDimension>
+      </Unit>
+      <Unit><Id>17</Id><Name>b</Name><MimeType>application/x-asam.aounit</MimeType><Factor>0.000000</Factor><Offset>0.000000</Offset><PhysDimension>11</PhysDimension>
+      </Unit>
+      <Unit><Id>18</Id><Name>m^3</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>12</PhysDimension>
+      </Unit>
+      <Unit><Id>19</Id><Name>L</Name><MimeType>application/x-asam.aounit</MimeType><Factor>0.001000</Factor><Offset>0.000000</Offset><PhysDimension>12</PhysDimension>
+      </Unit>
+      <Unit><Id>20</Id><Name>m^3/s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>13</PhysDimension>
+      </Unit>
+      <Unit><Id>21</Id><Name>m^3/kg</Name><MimeType>application/x-asam.aounit</MimeType><Description>m^3/kg</Description><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>14</PhysDimension>
+      </Unit>
+      <Unit><Id>22</Id><Name>g</Name><MimeType>application/x-asam.aounit</MimeType><Factor>0.001000</Factor><Offset>0.000000</Offset><PhysDimension>2</PhysDimension>
+      </Unit>
+      <Unit><Id>23</Id><Name>t</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1000.000000000000</Factor><Offset>0.000000</Offset><PhysDimension>2</PhysDimension>
+      </Unit>
+      <Unit><Id>24</Id><Name>carat</Name><MimeType>application/x-asam.aounit</MimeType><Description>metric carat</Description><Factor>0.000200</Factor><Offset>0.000000</Offset><PhysDimension>2</PhysDimension>
+      </Unit>
+      <Unit><Id>25</Id><Name>u</Name><MimeType>application/x-asam.aounit</MimeType><Description>&quot;1 u&quot;</Description><Factor>0.000000</Factor><Offset>0.000000</Offset><PhysDimension>2</PhysDimension>
+      </Unit>
+      <Unit><Id>26</Id><Name>tex</Name><MimeType>application/x-asam.aounit</MimeType><Factor>0.000001</Factor><Offset>0.000000</Offset><PhysDimension>15</PhysDimension>
+      </Unit>
+      <Unit><Id>27</Id><Name>kg/m^2</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>16</PhysDimension>
+      </Unit>
+      <Unit><Id>28</Id><Name>kg/s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>17</PhysDimension>
+      </Unit>
+      <Unit><Id>29</Id><Name>kg/m^3</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>18</PhysDimension>
+      </Unit>
+      <Unit><Id>30</Id><Name>min</Name><MimeType>application/x-asam.aounit</MimeType><Factor>60.00000000000000</Factor><Offset>0.000000</Offset><PhysDimension>1</PhysDimension>
+      </Unit>
+      <Unit><Id>31</Id><Name>h</Name><MimeType>application/x-asam.aounit</MimeType><Factor>3600.000000000000</Factor><Offset>0.000000</Offset><PhysDimension>1</PhysDimension>
+      </Unit>
+      <Unit><Id>32</Id><Name>d</Name><MimeType>application/x-asam.aounit</MimeType><Factor>86400.00000000000</Factor><Offset>0.000000</Offset><PhysDimension>1</PhysDimension>
+      </Unit>
+      <Unit><Id>33</Id><Name>Hz</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>19</PhysDimension>
+      </Unit>
+      <Unit><Id>34</Id><Name>1/s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>20</PhysDimension>
+      </Unit>
+      <Unit><Id>35</Id><Name>1/min</Name><MimeType>application/x-asam.aounit</MimeType><Factor>0.016670</Factor><Offset>0.000000</Offset><PhysDimension>20</PhysDimension>
+      </Unit>
+      <Unit><Id>36</Id><Name>m/s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>21</PhysDimension>
+      </Unit>
+      <Unit><Id>37</Id><Name>km/h</Name><MimeType>application/x-asam.aounit</MimeType><Factor>3.600000000000000</Factor><Offset>0.000000</Offset><PhysDimension>21</PhysDimension>
+      </Unit>
+      <Unit><Id>38</Id><Name>m/s^2</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>22</PhysDimension>
+      </Unit>
+      <Unit><Id>39</Id><Name>rad/s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>57.29580000000000</Factor><Offset>0.000000</Offset><PhysDimension>23</PhysDimension>
+      </Unit>
+      <Unit><Id>40</Id><Name>N</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>24</PhysDimension>
+      </Unit>
+      <Unit><Id>41</Id><Name>N/s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>25</PhysDimension>
+      </Unit>
+      <Unit><Id>42</Id><Name>N/m^2</Name><MimeType>application/x-asam.aounit</MimeType><Description>= 1 pascal</Description><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>26</PhysDimension>
+      </Unit>
+      <Unit><Id>43</Id><Name>Watt</Name><MimeType>application/x-asam.aounit</MimeType><Description>watt gibts schon</Description><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>27</PhysDimension>
+      </Unit>
+      <Unit><Id>44</Id><Name>W/m^2</Name><MimeType>application/x-asam.aounit</MimeType><Description>W/(m^2) = kg/(s^3)</Description><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>28</PhysDimension>
+      </Unit>
+      <Unit><Id>45</Id><Name>Pa</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>30</PhysDimension>
+      </Unit>
+      <Unit><Id>46</Id><Name>bar</Name><MimeType>application/x-asam.aounit</MimeType><Factor>100000.0000000000</Factor><Offset>0.000000</Offset><PhysDimension>30</PhysDimension>
+      </Unit>
+      <Unit><Id>47</Id><Name>Torr</Name><MimeType>application/x-asam.aounit</MimeType><Description>1 torr = 1 mmHg</Description><Factor>133.3220000000000</Factor><Offset>0.000000</Offset><PhysDimension>30</PhysDimension>
+      </Unit>
+      <Unit><Id>48</Id><Name>Pa*s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>31</PhysDimension>
+      </Unit>
+      <Unit><Id>49</Id><Name>m^2/s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>32</PhysDimension>
+      </Unit>
+      <Unit><Id>50</Id><Name>J</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>33</PhysDimension>
+      </Unit>
+      <Unit><Id>51</Id><Name>kW*h</Name><MimeType>application/x-asam.aounit</MimeType><Factor>3600000.000000000</Factor><Offset>0.000000</Offset><PhysDimension>33</PhysDimension>
+      </Unit>
+      <Unit><Id>52</Id><Name>eV</Name><MimeType>application/x-asam.aounit</MimeType><Factor>0.000000</Factor><Offset>0.000000</Offset><PhysDimension>33</PhysDimension>
+      </Unit>
+      <Unit><Id>53</Id><Name>J/K</Name><MimeType>application/x-asam.aounit</MimeType><Description>= 1 m^2*kg/(s^2*K)</Description><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>34</PhysDimension>
+      </Unit>
+      <Unit><Id>54</Id><Name>J/m^3</Name><MimeType>application/x-asam.aounit</MimeType><Description>= 1 kg/(m*(s^2))</Description><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>35</PhysDimension>
+      </Unit>
+      <Unit><Id>55</Id><Name>m^2/s^2</Name><MimeType>application/x-asam.aounit</MimeType><Description>= J/kg</Description><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>36</PhysDimension>
+      </Unit>
+      <Unit><Id>56</Id><Name>J/mol</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>68</PhysDimension>
+      </Unit>
+      <Unit><Id>57</Id><Name>J/mol*K</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>67</PhysDimension>
+      </Unit>
+      <Unit><Id>58</Id><Name>W</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>37</PhysDimension>
+      </Unit>
+      <Unit><Id>59</Id><Name>V*A</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>37</PhysDimension>
+      </Unit>
+      <Unit><Id>60</Id><Name>var</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>37</PhysDimension>
+      </Unit>
+      <Unit><Id>61</Id><Name>PS</Name><MimeType>application/x-asam.aounit</MimeType><Factor>735.4987500000000</Factor><Offset>0.000000</Offset><PhysDimension>37</PhysDimension>
+      </Unit>
+      <Unit><Id>62</Id><Name>W/m*K</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>38</PhysDimension>
+      </Unit>
+      <Unit><Id>63</Id><Name>W/m^2*K</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>39</PhysDimension>
+      </Unit>
+      <Unit><Id>65</Id><Name>W/sr</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>41</PhysDimension>
+      </Unit>
+      <Unit><Id>66</Id><Name>sr</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>9</PhysDimension>
+      </Unit>
+      <Unit><Id>67</Id><Name>W/(m^2*sr)</Name><MimeType>application/x-asam.aounit</MimeType><Description>doppelt, wenn steradian dimensionslos ist</Description><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>42</PhysDimension>
+      </Unit>
+      <Unit><Id>68</Id><Name>ohm</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>44</PhysDimension>
+      </Unit>
+      <Unit><Id>69</Id><Name>S</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>45</PhysDimension>
+      </Unit>
+      <Unit><Id>70</Id><Name>C</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>46</PhysDimension>
+      </Unit>
+      <Unit><Id>71</Id><Name>A*h</Name><MimeType>application/x-asam.aounit</MimeType><Factor>3600.000000000000</Factor><Offset>0.000000</Offset><PhysDimension>46</PhysDimension>
+      </Unit>
+      <Unit><Id>72</Id><Name>C/m^3</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>47</PhysDimension>
+      </Unit>
+      <Unit><Id>73</Id><Name>C/m^2</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>48</PhysDimension>
+      </Unit>
+      <Unit><Id>74</Id><Name>F</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>49</PhysDimension>
+      </Unit>
+      <Unit><Id>75</Id><Name>F/m</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>50</PhysDimension>
+      </Unit>
+      <Unit><Id>76</Id><Name>V/m</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>51</PhysDimension>
+      </Unit>
+      <Unit><Id>77</Id><Name>V</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>43</PhysDimension>
+      </Unit>
+      <Unit><Id>78</Id><Name>Wb</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>52</PhysDimension>
+      </Unit>
+      <Unit><Id>79</Id><Name>T</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>53</PhysDimension>
+      </Unit>
+      <Unit><Id>80</Id><Name>H</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>54</PhysDimension>
+      </Unit>
+      <Unit><Id>81</Id><Name>H/m</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>55</PhysDimension>
+      </Unit>
+      <Unit><Id>82</Id><Name>A/m</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>56</PhysDimension>
+      </Unit>
+      <Unit><Id>83</Id><Name>gradC</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>273.1500000000000</Offset><PhysDimension>5</PhysDimension>
+      </Unit>
+      <Unit><Id>84</Id><Name>cd/m^2</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>57</PhysDimension>
+      </Unit>
+      <Unit><Id>85</Id><Name>lm</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>58</PhysDimension>
+      </Unit>
+      <Unit><Id>86</Id><Name>lx</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>72</PhysDimension>
+      </Unit>
+      <Unit><Id>87</Id><Name>Bq</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>59</PhysDimension>
+      </Unit>
+      <Unit><Id>88</Id><Name>Gy</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>60</PhysDimension>
+      </Unit>
+      <Unit><Id>89</Id><Name>Sv</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>61</PhysDimension>
+      </Unit>
+      <Unit><Id>90</Id><Name>Gy/s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>62</PhysDimension>
+      </Unit>
+      <Unit><Id>91</Id><Name>mol/m^3</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>65</PhysDimension>
+      </Unit>
+      <Unit><Id>92</Id><Name>mol/L</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1000.000000000000</Factor><Offset>0.000000</Offset><PhysDimension>65</PhysDimension>
+      </Unit>
+      <Unit><Id>93</Id><Name>m^3/mol</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>66</PhysDimension>
+      </Unit>
+      <Unit><Id>94</Id><Name>L/mol</Name><MimeType>application/x-asam.aounit</MimeType><Factor>0.001000</Factor><Offset>0.000000</Offset><PhysDimension>66</PhysDimension>
+      </Unit>
+      <Unit><Id>95</Id><Name>kat</Name><MimeType>application/x-asam.aounit</MimeType><Description>mol/s</Description><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>70</PhysDimension>
+      </Unit>
+      <Unit><Id>96</Id><Name>Pa^2*s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>29</PhysDimension>
+      </Unit>
+      <Unit><Id>97</Id><Name>kat/m^3</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>71</PhysDimension>
+      </Unit>
+      <Unit><Id>98</Id><Name>Sv/s</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>63</PhysDimension>
+      </Unit>
+      <Unit><Id>99</Id><Name>A*s/kg</Name><MimeType>application/x-asam.aounit</MimeType><Factor>1.000000000000000</Factor><Offset>0.000000</Offset><PhysDimension>64</PhysDimension>
+      </Unit>
+      <User><Id>1</Id><Name>tr</Name><Password>tr</Password><MimeType>application/x-asam.aouser</MimeType><Description>MDMTestReviewer</Description><GivenName>MDM basic example</GivenName><Surname>tr</Surname>
+         <users2groups>9 </users2groups>
+      </User>
+      <User><Id>2</Id><Name>ma</Name><Password>ma</Password><MimeType>application/x-asam.aouser</MimeType><Description>MDMMethodsAdministrator</Description><GivenName>MDM basic example</GivenName><Surname>ma</Surname>
+         <users2groups>2 </users2groups>
+      </User>
+      <User><Id>3</Id><Name>sa</Name><Password>sa</Password><MimeType>application/x-asam.aouser</MimeType><Description>MDMSystemAdministrator</Description><GivenName>MDM basic example</GivenName><Surname>sa</Surname>
+         <users2groups>1 </users2groups>
+      </User>
+      <User><Id>4</Id><Name>tp</Name><Password>tp</Password><MimeType>application/x-asam.aouser</MimeType><Description>MDMTestPlanner</Description><GivenName>MDM basic example</GivenName><Surname>tp</Surname>
+         <users2groups>3 </users2groups>
+      </User>
+      <User><Id>5</Id><Name>dp</Name><Password>dp</Password><MimeType>application/x-asam.aouser</MimeType><Description>MDMDataProcessor</Description><GivenName>MDM basic example</GivenName><Surname>dp</Surname>
+         <users2groups>4 </users2groups>
+      </User>
+      <User><Id>6</Id><Name>tc</Name><Password>tc</Password><MimeType>application/x-asam.aouser</MimeType><Description>MDMTestConditioner</Description><GivenName>MDM basic example</GivenName><Surname>tc</Surname>
+         <users2groups>5 </users2groups>
+      </User>
+      <User><Id>7</Id><Name>oc</Name><Password>oc</Password><MimeType>application/x-asam.aouser</MimeType><Description>MDMTestObjectConditioner</Description><GivenName>MDM basic example</GivenName><Surname>oc</Surname>
+         <users2groups>6 </users2groups>
+      </User>
+      <User><Id>8</Id><Name>to</Name><Password>to</Password><MimeType>application/x-asam.aouser</MimeType><Description>MDMTestOperator</Description><GivenName>MDM basic example</GivenName><Surname>to</Surname>
+         <users2groups>7 </users2groups>
+      </User>
+      <User><Id>9</Id><Name>dc</Name><Password>dc</Password><MimeType>application/x-asam.aouser</MimeType><Description>MDMDataCustomer</Description><GivenName>MDM basic example</GivenName><Surname>dc</Surname>
+         <users2groups>8 </users2groups>
+      </User>
+      <User><Id>10</Id><Name>mp</Name><Password>mp</Password><MimeType>application/x-asam.aouser</MimeType><Description>MDMMethodsPlanner</Description><GivenName>MDM basic example</GivenName><Surname>mp</Surname>
+         <users2groups>10 </users2groups>
+      </User>
+   </instance_data>
+</atfx_file>
\ No newline at end of file
diff --git a/org.eclipse.mdm.api.atfxadapter/src/test/resources/openmdm.png b/org.eclipse.mdm.api.atfxadapter/src/test/resources/openmdm.png
new file mode 100644
index 0000000..437bb58
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/test/resources/openmdm.png
Binary files differ
diff --git a/org.eclipse.mdm.apicopy/.gitignore b/org.eclipse.mdm.apicopy/.gitignore
new file mode 100644
index 0000000..03be9c1
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/.gitignore
@@ -0,0 +1,3 @@
+/.gradle/
+/build/
+/bin/
diff --git a/org.eclipse.mdm.apicopy/build.gradle b/org.eclipse.mdm.apicopy/build.gradle
new file mode 100644
index 0000000..8a6f180
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/build.gradle
@@ -0,0 +1,38 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+description = 'atfx file importer'
+
+dependencies {
+	compile 'org.glassfish.jersey.media:jersey-media-multipart:2.23.2'
+	compileOnly 'org.slf4j:slf4j-api:1.7.25'
+	compileOnly 'javax:javaee-api:7.0'
+	runtime 'ch.qos.logback:logback-classic:1.2.3'
+
+	// MDM5 API
+	compile project(':org.eclipse.mdm.application')
+	compile project(':org.eclipse.mdm.businessobjects')
+
+	testImplementation project(':org.eclipse.mdm.api.atfxadapter')
+	testCompile 'junit:junit:4.12'
+	testCompile 'org.mockito:mockito-core:2.13.0'
+	testCompile 'org.assertj:assertj-core:3.6.2'
+	testCompile 'org.glassfish.jersey.test-framework.providers:jersey-test-framework-provider-grizzly2:2.23.2'
+	testCompile 'org.glassfish.jersey.media:jersey-media-json-jackson:2.23.2'
+}
+
+jar {
+	metaInf { from 'NOTICE.txt' }
+	metaInf { from 'LICENSE.txt' }
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ExportResource.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ExportResource.java
new file mode 100644
index 0000000..d323460
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ExportResource.java
@@ -0,0 +1,145 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.boundary;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.StreamingOutput;
+
+import org.eclipse.mdm.shoppingbasket.entity.ShoppingBasket;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+@Tag(name = "Export")
+@javax.ws.rs.Path("/export")
+public class ExportResource {
+	private static final Logger LOG = LoggerFactory.getLogger(ExportResource.class);
+
+	@EJB
+	private ExportService exportService;
+
+	/**
+	 * Default public constructor for JAX-RS
+	 */
+	public ExportResource() {
+	}
+
+	/**
+	 * Used to provide service for unit tests
+	 * 
+	 * @param exportService
+	 */
+	protected ExportResource(ExportService exportService) {
+		this.exportService = exportService;
+	}
+
+	@POST
+	@Consumes(MediaType.APPLICATION_XML)
+	@Produces(MediaType.APPLICATION_XML)
+	public Response exportAtfx(ShoppingBasket basket) throws IOException {
+
+		final Path exportAtfx = exportService.exportAtfx(basket);
+
+		List<File> files = Files.list(exportAtfx).map(p -> p.toFile()).collect(Collectors.toList());
+		if (files.size() == 1) {
+			StreamingOutput output = new StreamingOutput() {
+				@Override
+				public void write(OutputStream out) throws IOException {
+					try (final InputStream responseStream = new FileInputStream(files.get(0))) {
+						int length;
+						byte[] buffer = new byte[1024];
+						while ((length = responseStream.read(buffer)) != -1) {
+							out.write(buffer, 0, length);
+						}
+						out.flush();
+					} finally {
+						if (exportAtfx != null) {
+							try {
+								deleteDirectory(exportAtfx);
+							} catch (IOException e) {
+								LOG.warn("Could not delete temporary directory "
+										+ exportAtfx.getParent().toFile().getAbsolutePath(), e);
+							}
+						}
+					}
+				}
+			};
+
+			return Response.ok(output, MediaType.APPLICATION_XML).build();
+		} else {
+			StreamingOutput out = new StreamingOutput() {
+				@Override
+				public void write(OutputStream output) throws IOException, WebApplicationException {
+					try (ZipOutputStream out = new ZipOutputStream(output)) {
+						List<File> files = Files.list(exportAtfx).map(p -> p.toFile()).collect(Collectors.toList());
+						for (File f : files) {
+							out.putNextEntry(new ZipEntry(f.getName()));
+							try (InputStream in = new FileInputStream(f)) {
+								int read = 0;
+								byte[] bytes = new byte[1024];
+
+								while ((read = in.read(bytes)) != -1) {
+									out.write(bytes, 0, read);
+								}
+							}
+						}
+					} catch (Exception e) {
+						e.printStackTrace();
+					} finally {
+						if (exportAtfx != null) {
+							try {
+								deleteDirectory(exportAtfx);
+							} catch (IOException e) {
+								LOG.warn(
+										"Could not delete temporary directory " + exportAtfx.toFile().getAbsolutePath(),
+										e);
+							}
+						}
+					}
+				}
+			};
+			return Response.ok(out, "application/zip").build();
+		}
+	}
+
+	/**
+	 * Deletes a directory.
+	 * 
+	 * @param pathToBeDeleted directory to delete
+	 * @throws IOException
+	 */
+	private void deleteDirectory(java.nio.file.Path pathToBeDeleted) throws IOException {
+		Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
+	}
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ExportService.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ExportService.java
new file mode 100644
index 0000000..f090501
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ExportService.java
@@ -0,0 +1,194 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.boundary;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.ConnectionException;
+import org.eclipse.mdm.api.base.ServiceNotProvidedException;
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.ApplicationContextFactory;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.Pool;
+import org.eclipse.mdm.api.dflt.model.Project;
+import org.eclipse.mdm.apicopy.control.ApiCopyException;
+import org.eclipse.mdm.apicopy.control.ExportTask;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+import org.eclipse.mdm.shoppingbasket.entity.MDMItem;
+import org.eclipse.mdm.shoppingbasket.entity.ShoppingBasket;
+
+import com.google.common.collect.BiMap;
+import com.google.common.collect.ImmutableBiMap;
+import com.google.common.collect.ImmutableMap;
+
+/**
+ * Service for importing an ATFX file into a MDM datasource.
+ *
+ */
+@Stateless
+public class ExportService {
+
+	// TODO make temp path configurable
+	private static final Path TMP = Paths.get(System.getProperty("java.io.tmpdir"));
+
+	@Inject
+	private ConnectorService connectorService;
+
+	private final String atfxContextFactoryClassname = "org.eclipse.mdm.api.atfxadapter.ATFXContextFactory";
+
+	/**
+	 * Default public constructor
+	 */
+	public ExportService() {
+	}
+
+	/**
+	 * Imports an ATFX file into the provided datasource.
+	 *
+	 * @param atfxFileSupplier returns a {@link Path} to an ATFX file. Accompanying
+	 *                         binary files are expected to be on the same folder.
+	 * @return
+	 */
+	public Path exportAtfx(ShoppingBasket basket) {
+
+		try {
+			Path tmpDir = Files.createTempDirectory(TMP, "atfxexport");
+			Path atfxFile = tmpDir.resolve("export.atfx");
+			writeToFile(atfxFile, ExportTask.class.getResourceAsStream("/emptyAtfx.xml"));
+
+			Map<String, String> params = ImmutableMap.of("atfxfile", atfxFile.toFile().getAbsolutePath(),
+					"freetext.active", "false", "includeCatalog", "true");
+			ApplicationContext contextDst = connectContext(atfxContextFactoryClassname, params);
+
+			Map<String, List<MDMItem>> map = basket.getItems().stream().map(i -> i.getRestURI().getPath())
+					.map(p -> split(p)).collect(Collectors.groupingBy(p -> p.getSource()));
+			if (map.size() != 1) {
+				throw new ApiCopyException("Currently only exports from exactly one application context are allowed!");
+			}
+			String srcContextName = map.keySet().iterator().next();
+
+			ApplicationContext contextSrc = connectorService.getContextByName(srcContextName);
+			List<? extends Entity> entities = loadEntities(contextSrc, basket);
+
+			/*
+			 * Copy the catalog (which involves creating the ContextComponts).
+			 */
+			ExportTask task = new ExportTask(contextSrc, contextDst);
+			task.copyCatalog();
+			contextDst.close();
+
+			/*
+			 * After creating the ContextComponents, the application model has to be
+			 * reloaded. This is normally done in a co-session, but openATFX does not
+			 * support co-sessions. Thus we have to create a new session by creating a new
+			 * application context.
+			 */
+			contextDst = connectContext(atfxContextFactoryClassname, params);
+			task = new ExportTask(contextSrc, contextDst);
+			task.copy(entities);
+			contextDst.close();
+
+			return tmpDir;
+		} catch (ServiceNotProvidedException e) {
+			throw new ApiCopyException("Could not retrive all required services from ATFX application context!", e);
+		} catch (ConnectionException e) {
+			throw new ApiCopyException("Could not create ATFX application context!", e);
+		} catch (IOException e) {
+			throw new ApiCopyException("Cold not create temporary directory!", e);
+		}
+	}
+
+	private List<? extends Entity> loadEntities(ApplicationContext contextSrc, ShoppingBasket basket)
+			throws ServiceNotProvidedException, DataAccessException {
+		EntityManager em = contextSrc.getEntityManager()
+				.orElseThrow(() -> new ServiceNotProvidedException(EntityManager.class));
+
+		return basket.getItems().stream().map(i -> i.getRestURI().getPath()).map(p -> split(p))
+				.map(i -> em.load(typeToClass(i.getType()), i.getId())).collect(Collectors.toList());
+	}
+
+	private Class<? extends Entity> typeToClass(String s) {
+		return ENTITY2FRAGMENT_URI.inverse().get(s);
+	}
+
+	private static final BiMap<Class<? extends Entity>, String> ENTITY2FRAGMENT_URI = ImmutableBiMap
+			.<Class<? extends Entity>, String>builder().put(Project.class, "projects").put(Pool.class, "pools")
+			.put(Test.class, "tests").put(TestStep.class, "teststeps").put(Measurement.class, "measurements")
+			.put(ChannelGroup.class, "channelgroups").put(Channel.class, "channels").build();
+
+	private MDMItem split(String path) {
+
+		String[] splitted = path.split("/");
+		MDMItem item = new MDMItem();
+		item.setId(splitted[splitted.length - 1]);
+		item.setType(splitted[splitted.length - 2]);
+		item.setSource(splitted[splitted.length - 3]);
+		return item;
+	}
+
+	/**
+	 * Connects to a {@link ApplicationContext}.
+	 * 
+	 * @param contextFactoryClassname classname of the
+	 *                                {@link ApplicationContextFactory}
+	 * @param parameters              connection parameters
+	 * @return connected {@link ApplicationContext}
+	 * @throws ConnectionException
+	 */
+	private ApplicationContext connectContext(String contextFactoryClassname, Map<String, String> parameters)
+			throws ConnectionException {
+		try {
+
+			Class<? extends ApplicationContextFactory> contextFactoryClass = Thread.currentThread()
+					.getContextClassLoader().loadClass(contextFactoryClassname)
+					.asSubclass(ApplicationContextFactory.class);
+
+			ApplicationContextFactory contextFactory = contextFactoryClass.newInstance();
+			return contextFactory.connect(parameters);
+		} catch (Exception e) {
+			throw new ConnectionException(
+					"failed to initialize entity manager using factory '" + contextFactoryClassname + "'", e);
+		}
+	}
+
+	private static void writeToFile(Path resolve, InputStream entityAs) throws IOException {
+		try (OutputStream out = new FileOutputStream(resolve.toFile())) {
+			int read = 0;
+			byte[] bytes = new byte[1024];
+
+			while ((read = entityAs.read(bytes)) != -1) {
+				out.write(bytes, 0, read);
+			}
+		}
+	}
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ImportResource.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ImportResource.java
new file mode 100644
index 0000000..4eb141e
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ImportResource.java
@@ -0,0 +1,270 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.eclipse.mdm.apicopy.control.ApiCopyException;
+import org.glassfish.jersey.media.multipart.FormDataBodyPart;
+import org.glassfish.jersey.media.multipart.FormDataMultiPart;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+/**
+ * Provides endpoints for importing ATFX files to a specific datasource.
+ *
+ */
+@Tag(name = "Import")
+@javax.ws.rs.Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/import")
+public class ImportResource {
+	private static final Logger LOG = LoggerFactory.getLogger(ImportResource.class);
+
+	private static final String ATFX_EXTENSION = ".atfx";
+
+	@EJB
+	private ImportService importService;
+
+	/**
+	 * Default public constructor for JAX-RS
+	 */
+	public ImportResource() {
+	}
+
+	/**
+	 * Used to provide service for unit tests
+	 * 
+	 * @param importService
+	 */
+	protected ImportResource(ImportService importService) {
+		this.importService = importService;
+	}
+
+	/**
+	 * Imports an ATFX file. The ATFX file is provided in the body of the POST
+	 * request. Note that, this method is not suitable for importing a ATFX file
+	 * with accompanying binary files. In this case, use
+	 * {@link ImportResource#importMultiPart(FormDataMultiPart, String)} or
+	 * {@link ImportResource#importZip(InputStream, String)}
+	 *
+	 * @param atfxInputStream  the content of the ATFX file
+	 * @param targetSourceName name of the target datasource
+	 * @return
+	 */
+	@POST
+	@Consumes(MediaType.APPLICATION_XML)
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response importXml(InputStream atfxInputStream,
+			@PathParam(REQUESTPARAM_SOURCENAME) String targetSourceName) {
+		return importService.importAtfx(tmpDir -> extractDataFromInputStream(tmpDir, atfxInputStream),
+				targetSourceName);
+	}
+
+	/**
+	 * Imports an ATFX file. The ATFX file and its binary files are provided as
+	 * multipart form data. The field name represents the original file name and the
+	 * field value the contents of the file. The ATFX file is detected by its file
+	 * extension 'atfx' or the media type 'application/xml'. Only one ATFX file can
+	 * be set at a time.
+	 *
+	 * @param multiPart        form data as described above
+	 * @param targetSourceName name of the target datasource
+	 * @return
+	 */
+	@POST
+	@Consumes(MediaType.MULTIPART_FORM_DATA)
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response importMultiPart(@Parameter(hidden = true) FormDataMultiPart multiPart,
+			@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return importService.importAtfx(tmpDir -> extractDataFromMultiPart(tmpDir, multiPart), sourceName);
+	}
+
+	/**
+	 * Imports an ATFX file. The ATFX file and its binary files are provided as a
+	 * zip file. The ATFX file is detected by its file extension 'atfx'. Only one
+	 * ATFX file can be included in the zip file.
+	 *
+	 * @param zipFile          the ATFX file and its binary files as zip compressed
+	 *                         {@link InputStream}
+	 * @param targetSourceName name of the target datasource
+	 * @return
+	 */
+	@POST
+	@Consumes("application/zip")
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response importZip(InputStream zipFile, @PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return importService.importAtfx(tmpDir -> extractDataFromZip(tmpDir, zipFile), sourceName);
+	}
+
+	/**
+	 * Writes the provided {@link InputStream} into the folder <code>tmpDir</code>
+	 * and returns the path to this file.
+	 * 
+	 * @param tmpDir          temporary folder
+	 * @param atfxInputStream stream to be written into a file in tmpDir
+	 * @return Path referencing the written file.
+	 */
+	private Path extractDataFromInputStream(Path tmpDir, InputStream atfxInputStream) {
+		try {
+			Path atfxFile = tmpDir.resolve("tmp.atfx");
+			;
+
+			writeToFile(atfxFile, atfxInputStream);
+
+			LOG.debug("Received ATFX file {}.", atfxFile);
+			return atfxFile;
+		} catch (IOException e) {
+			throw new ApiCopyException("Could not extract data from request body.", e);
+		}
+	}
+
+	/**
+	 * Writes the files provided as multi part form data into the folder
+	 * <code>tmpDir</code> and returns the path to the ATFX file.
+	 * 
+	 * @param tmpDir    temporary folder
+	 * @param multiPart multi part form data with files
+	 * @return Path referencing the extracted ATFX file.
+	 * @throws ApiCopyException if there is no or more than one ATFX file is found
+	 */
+	private Path extractDataFromMultiPart(Path tmpDir, FormDataMultiPart multiPart) {
+		try {
+			if (multiPart.getBodyParts().isEmpty()) {
+				throw new ApiCopyException(
+						"MultiPart message does not contain any parts. Atleast an ATFX file is expected.");
+			}
+
+			Path atfxFile = null;
+			List<Path> binFiles = new ArrayList<>();
+
+			for (Entry<String, List<FormDataBodyPart>> entry : multiPart.getFields().entrySet()) {
+				if (entry.getValue().size() != 1) {
+					throw new ApiCopyException("Expecting exactly one part per field.");
+				}
+
+				String fileName = entry.getKey();
+				Path filePath = tmpDir.resolve(fileName);
+				FormDataBodyPart data = entry.getValue().get(0);
+
+				writeToFile(filePath, data.getEntityAs(InputStream.class));
+
+				if (fileName.toLowerCase().endsWith(ATFX_EXTENSION)
+						|| data.getMediaType().equals(MediaType.APPLICATION_XML_TYPE)) {
+					if (atfxFile == null) {
+						atfxFile = filePath;
+					} else {
+						throw new ApiCopyException("Expecting exactly one part with Content-Type '"
+								+ MediaType.APPLICATION_XML + "', but multiple parts were found.");
+					}
+
+				} else {
+					binFiles.add(filePath);
+				}
+			}
+			if (atfxFile == null) {
+				throw new ApiCopyException("Expecting exactly one part with Content-Type '" + MediaType.APPLICATION_XML
+						+ "', but zero parts were found.");
+			}
+
+			LOG.debug("Received ATFX file {} and binary files {}.", atfxFile, binFiles);
+
+			return atfxFile;
+		} catch (IOException e) {
+			throw new ApiCopyException("Could not extract data from multipart data.", e);
+		}
+	}
+
+	/**
+	 * Extracts the zip archive provided by {@link InputStream} into the folder
+	 * <code>tmpDir</code> and returns the path to the ATFX file.
+	 * 
+	 * @param tmpDir temporary folder
+	 * @param in     zip file to be extracted into a file in tmpDir
+	 * @return Path referencing the extracted ATFX file.
+	 * @throws ApiCopyException if there is no or more than one ATFX file is found
+	 */
+	private Path extractDataFromZip(Path tmpDir, InputStream in) {
+		try {
+			Path atfxFile = null;
+			List<Path> binFiles = new ArrayList<>();
+
+			ZipInputStream zipIn = new ZipInputStream(in);
+			ZipEntry entry;
+			while ((entry = zipIn.getNextEntry()) != null) {
+				String fileName = entry.getName();
+				Path file = tmpDir.resolve(fileName);
+				writeToFile(file, zipIn);
+
+				if (fileName.endsWith(ATFX_EXTENSION)) {
+					if (atfxFile == null) {
+						atfxFile = file;
+					} else {
+						throw new ApiCopyException(
+								"Expecting exactly one file with extension 'atfx', but files were found.");
+					}
+				} else {
+					binFiles.add(file);
+				}
+			}
+			if (atfxFile == null) {
+				throw new ApiCopyException(
+						"Expecting exactly one file with extension 'atfx', but zero parts were found.");
+			}
+
+			LOG.debug("Received ATFX file {} and binary files {}.", atfxFile, binFiles);
+			return atfxFile;
+		} catch (IOException e) {
+			throw new ApiCopyException("Could not extract data from zip file.", e);
+		}
+	}
+
+	/**
+	 * Writes inputstream to file
+	 * 
+	 * @param file
+	 * @param inputstream
+	 * @throws IOException
+	 */
+	private void writeToFile(Path file, InputStream inputstream) throws IOException {
+		try (OutputStream out = new FileOutputStream(file.toFile())) {
+			int read = 0;
+			byte[] bytes = new byte[1024];
+
+			while ((read = inputstream.read(bytes)) != -1) {
+				out.write(bytes, 0, read);
+			}
+		}
+	}
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ImportService.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ImportService.java
new file mode 100644
index 0000000..caa286f
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ImportService.java
@@ -0,0 +1,160 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.boundary;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+import javax.ws.rs.core.Response;
+
+import org.eclipse.mdm.api.base.ConnectionException;
+import org.eclipse.mdm.api.base.ServiceNotProvidedException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.ApplicationContextFactory;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.Project;
+import org.eclipse.mdm.apicopy.control.ApiCopyException;
+import org.eclipse.mdm.apicopy.control.ApiCopyService;
+import org.eclipse.mdm.apicopy.control.ApiCopyServiceImpl;
+import org.eclipse.mdm.apicopy.entity.CopyStatusResponse;
+import org.eclipse.mdm.apicopy.entity.CopyStatusResponse.State;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Function;
+import com.google.common.collect.ImmutableMap;
+
+/**
+ * Service for importing an ATFX file into a MDM datasource.
+ *
+ */
+@Stateless
+public class ImportService {
+
+	private static final Logger LOG = LoggerFactory.getLogger(ImportService.class);
+
+	// TODO make temp path configurable
+	private static final Path TMP = Paths.get(System.getProperty("java.io.tmpdir"));
+
+	@Inject
+	private ConnectorService connectorService;
+
+	private ApiCopyService apiCopyService = new ApiCopyServiceImpl();
+
+	private final String atfxContextFactoryClassname = "org.eclipse.mdm.api.atfxadapter.ATFXContextFactory";
+
+	/**
+	 * Default public constructor
+	 */
+	public ImportService() {
+	}
+
+	/**
+	 * Imports an ATFX file into the provided datasource.
+	 *
+	 * @param atfxFileSupplier returns a {@link Path} to an ATFX file. Accompanying
+	 *                         binary files are expected to be on the same folder.
+	 * @param dstContextName   target datasource of the import
+	 * @return
+	 */
+	public Response importAtfx(Function<Path, Path> atfxFileSupplier, String dstContextName) {
+		ApplicationContext contextDst = connectorService.getContextByName(dstContextName);
+		ApplicationContext contextSrc = null;
+
+		Path tmpDir = null;
+		try {
+			tmpDir = Files.createTempDirectory(TMP, "atfximport");
+
+			Path atfxFile = atfxFileSupplier.apply(tmpDir);
+
+			Map<String, String> params = ImmutableMap.of("atfxfile", atfxFile.toFile().getAbsolutePath(),
+					"freetext.active", "false");
+
+			contextSrc = connectContext(atfxContextFactoryClassname, params);
+			List<Project> projects = contextSrc.getEntityManager()
+					.orElseThrow(() -> new ServiceNotProvidedException(EntityManager.class)).loadAll(Project.class);
+
+			apiCopyService.newApiCopyTask(contextSrc, contextDst).copy(projects);
+
+			CopyStatusResponse response = new CopyStatusResponse();
+			response.setState(State.OK);
+			return Response.ok(response).build();
+		} catch (ServiceNotProvidedException e) {
+			throw new ApiCopyException("Could not retrive all required services from ATFX application context!", e);
+		} catch (ConnectionException e) {
+			throw new ApiCopyException("Could not create ATFX application context!", e);
+		} catch (IOException e) {
+			throw new ApiCopyException("Cold not create temporary directory!", e);
+		} finally {
+			if (contextSrc != null) {
+				try {
+					contextSrc.close();
+				} catch (ConnectionException e) {
+					LOG.warn("Could not close application context!", e);
+				}
+			}
+			if (tmpDir != null) {
+				try {
+					deleteDirectory(tmpDir);
+				} catch (IOException e) {
+					LOG.warn("Could not delete temporary directory " + tmpDir.toFile().getAbsolutePath(), e);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Deletes a directory.
+	 * 
+	 * @param pathToBeDeleted directory to delete
+	 * @throws IOException
+	 */
+	private void deleteDirectory(java.nio.file.Path pathToBeDeleted) throws IOException {
+		Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
+	}
+
+	/**
+	 * Connects to a {@link ApplicationContext}.
+	 * 
+	 * @param contextFactoryClassname classname of the
+	 *                                {@link ApplicationContextFactory}
+	 * @param parameters              connection parameters
+	 * @return connected {@link ApplicationContext}
+	 * @throws ConnectionException
+	 */
+	private ApplicationContext connectContext(String contextFactoryClassname, Map<String, String> parameters)
+			throws ConnectionException {
+		try {
+
+			Class<? extends ApplicationContextFactory> contextFactoryClass = Thread.currentThread()
+					.getContextClassLoader().loadClass(contextFactoryClassname)
+					.asSubclass(ApplicationContextFactory.class);
+
+			ApplicationContextFactory contextFactory = contextFactoryClass.newInstance();
+			return contextFactory.connect(parameters);
+		} catch (Exception e) {
+			throw new ConnectionException(
+					"failed to initialize entity manager using factory '" + contextFactoryClassname + "'", e);
+		}
+	}
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ApiCopyException.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ApiCopyException.java
new file mode 100644
index 0000000..b262caa
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ApiCopyException.java
@@ -0,0 +1,27 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.control;
+
+public class ApiCopyException extends RuntimeException {
+
+	private static final long serialVersionUID = 6120223578891046326L;
+
+	public ApiCopyException(String message) {
+		super(message);
+	}
+
+	public ApiCopyException(String message, Throwable t) {
+		super(message, t);
+	}
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ApiCopyService.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ApiCopyService.java
new file mode 100644
index 0000000..bbac60e
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ApiCopyService.java
@@ -0,0 +1,23 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.control;
+
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+
+public interface ApiCopyService {
+	ApiCopyTask newApiCopyTask(ApplicationContext src, ApplicationContext dst);
+
+	ApiCopyTask newApiCopyTask(ApplicationContext src, ApplicationContext dst, TemplateManager templateManager);
+
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ApiCopyServiceImpl.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ApiCopyServiceImpl.java
new file mode 100644
index 0000000..b05e47a
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ApiCopyServiceImpl.java
@@ -0,0 +1,33 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.control;
+
+import javax.ejb.Stateless;
+
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+
+@Stateless
+public class ApiCopyServiceImpl implements ApiCopyService {
+
+	@Override
+	public ApiCopyTask newApiCopyTask(ApplicationContext src, ApplicationContext dst) {
+		return newApiCopyTask(src, dst, new DefaultTemplateManager());
+	}
+
+	@Override
+	public ApiCopyTask newApiCopyTask(ApplicationContext src, ApplicationContext dst, TemplateManager templateManager) {
+		return new ImportTask(src, dst, templateManager);
+	}
+
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ApiCopyTask.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ApiCopyTask.java
new file mode 100644
index 0000000..b6e61b0
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ApiCopyTask.java
@@ -0,0 +1,46 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.control;
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.mdm.api.base.model.Entity;
+
+public interface ApiCopyTask {
+
+	void copy(List<? extends Entity> entities);
+
+	/**
+	 * Setting a optional mapping of source unit names to target unit names
+	 * 
+	 * @param unitMapping key = source unit name, value = target unit name
+	 */
+	void setUnitMapping(Map<String, String> unitMapping);
+
+	/**
+	 * Setting a optional mapping of source quantity names to target quantity names
+	 * 
+	 * @param quantityMapping key = source quantity name, value = target quantity
+	 *                        name
+	 */
+	void setQuantityMapping(Map<String, String> quantityMapping);
+
+	/**
+	 * setting a map with properties to configure the transfer task
+	 * 
+	 * @param properties
+	 */
+	void setProperties(Map<String, String> properties);
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ClassificationUtil.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ClassificationUtil.java
new file mode 100644
index 0000000..f4f504a
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ClassificationUtil.java
@@ -0,0 +1,204 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.control;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.eclipse.mdm.api.base.Transaction;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.ModelManager;
+import org.eclipse.mdm.api.base.query.ComparisonOperator;
+import org.eclipse.mdm.api.base.query.Condition;
+import org.eclipse.mdm.api.base.query.Filter;
+import org.eclipse.mdm.api.base.query.QueryService;
+import org.eclipse.mdm.api.base.query.Record;
+import org.eclipse.mdm.api.base.query.Result;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.Classification;
+import org.eclipse.mdm.api.dflt.model.Domain;
+import org.eclipse.mdm.api.dflt.model.EntityFactory;
+import org.eclipse.mdm.api.dflt.model.ProjectDomain;
+import org.eclipse.mdm.api.dflt.model.Status;
+
+import com.google.common.collect.Lists;
+
+/**
+ * Creates Classification instances, because openMDM4 clients checks them and
+ * does not show any data if classifications are absent. As soon as
+ * Classification can be created through standard MDM5 API this class becomes
+ * obsolete.
+ */
+public class ClassificationUtil {
+
+	private Transaction transaction;
+	private EntityFactory entityFactoryDst;
+	private EntityManager entityManagerDst;
+	private ModelManager modelManagerDst;
+	private QueryService queryService;
+
+	private Map<String, ProjectDomain> projectDomainCache = new HashMap<>();
+	private Map<String, Classification> classificationCache = new HashMap<>();
+
+	/**
+	 * 
+	 * @param transaction
+	 * @param transferBase
+	 * @param contextDst
+	 * @param entityFactoryDst
+	 * @param entityManagerDst
+	 * @param modelManagerDst
+	 */
+	public ClassificationUtil(Transaction transaction, ApplicationContext contextDst) {
+		super();
+		this.transaction = transaction;
+
+		if (contextDst.getEntityFactory().isPresent()) {
+			this.entityFactoryDst = contextDst.getEntityFactory().get();
+		} else {
+			throw new ApiCopyException("EntityFactory not found!");
+		}
+
+		if (contextDst.getEntityManager().isPresent()) {
+			this.entityManagerDst = contextDst.getEntityManager().get();
+		} else {
+			throw new ApiCopyException("EntityManager not found!");
+		}
+
+		if (contextDst.getModelManager().isPresent()) {
+			this.modelManagerDst = contextDst.getModelManager().get();
+		} else {
+			throw new ApiCopyException("ModelManager not found!");
+		}
+
+		if (contextDst.getQueryService().isPresent()) {
+			this.queryService = contextDst.getQueryService().get();
+		} else {
+			throw new IllegalStateException("QueryService not found!");
+		}
+	}
+
+	public Classification getClassification(String rootProjectName) {
+		Domain domain = getDomain();
+		Status status = getStatus();
+		ProjectDomain projectDomain = getProjectDomain(rootProjectName);
+		return getClassification(domain, status, projectDomain);
+	}
+
+	public Classification getClassification(Domain domain, Status status, ProjectDomain projectDomain) {
+		String cacheKey = Arrays.asList(domain.getName(), status.getName(), projectDomain.getName()).stream()
+				.collect(Collectors.joining("_"));
+
+		Classification classification = classificationCache.get(cacheKey);
+
+		if (classification == null) {
+			EntityType entityType = modelManagerDst.getEntityType(Classification.class);
+			Condition condClass1 = ComparisonOperator.CASE_INSENSITIVE_EQUAL
+					.create(entityType.getAttribute("ProjectDomain"), projectDomain.getID());
+			Condition condClass2 = ComparisonOperator.CASE_INSENSITIVE_EQUAL.create(entityType.getAttribute("Domain"),
+					domain.getID());
+			Condition condClass3 = ComparisonOperator.CASE_INSENSITIVE_EQUAL.create(entityType.getAttribute("Status"),
+					status.getID());
+
+			java.util.List<Result> fetch = queryService.createQuery().selectID(entityType)
+					.fetch(Filter.and().addAll(condClass1, condClass2, condClass3));
+
+			List<String> classificationIds = fetch.stream().map(r -> r.getRecord(entityType)).map(Record::getID)
+					.collect(Collectors.toList());
+
+			if (classificationIds.isEmpty()) {
+				String classificationName = String.format("ProjDomainId_%s.DomainId_%s.StatusId_%s",
+						projectDomain.getID(), domain.getID(), status.getID());
+				classification = entityFactoryDst.createClassification(classificationName, status, projectDomain,
+						domain);
+				transaction.create(Lists.newArrayList(classification));
+			} else {
+				classification = entityManagerDst.load(Classification.class, classificationIds.get(0));
+			}
+
+			classificationCache.put(cacheKey, classification);
+		}
+
+		return classification;
+	}
+
+	public ProjectDomain getProjectDomain(String rootProjectName) {
+		ProjectDomain projectDomain = projectDomainCache.get(rootProjectName);
+
+		if (projectDomain == null) {
+			EntityType entityTypeProjectDomain = modelManagerDst.getEntityType(ProjectDomain.class);
+			Condition condProjectDomainName = ComparisonOperator.CASE_INSENSITIVE_EQUAL
+					.create(entityTypeProjectDomain.getAttribute("Name"), rootProjectName);
+			List<Result> fetchProjectDomain = queryService.createQuery().selectID(entityTypeProjectDomain)
+					.fetch(Filter.and().addAll(condProjectDomainName));
+
+			List<String> projectDomainIds = fetchProjectDomain.stream().map(r -> r.getRecord(entityTypeProjectDomain))
+					.map(Record::getID).collect(Collectors.toList());
+
+			if (projectDomainIds.size() > 1) {
+				throw new IllegalStateException(
+						String.format("More than one ProjectDomain instance with name \"%s\" found in destination!",
+								rootProjectName));
+			} else if (projectDomainIds.isEmpty()) {
+				projectDomain = entityFactoryDst.createProjectDomain(rootProjectName);
+				transaction.create(Lists.newArrayList(projectDomain));
+			} else {
+				projectDomain = entityManagerDst.load(ProjectDomain.class, projectDomainIds.get(0));
+			}
+
+			projectDomainCache.put(rootProjectName, projectDomain);
+		}
+
+		return projectDomain;
+	}
+
+	public Domain getDomain() {
+		List<Domain> domains = entityManagerDst.loadAll(Domain.class);
+
+		if (domains.size() != 1) {
+			throw new IllegalStateException("No or more than one Domain instance found in destination!");
+		}
+
+		Domain domain = domains.get(0);
+		return domain;
+	}
+
+	public Status getStatus() {
+		EntityType entityTypeStatus = modelManagerDst.getEntityType(Status.class);
+		Condition condStatusName = ComparisonOperator.CASE_INSENSITIVE_EQUAL
+				.create(entityTypeStatus.getAttribute("Name"), "Imported");
+
+		List<Result> fetchStatus = queryService.createQuery().selectID(entityTypeStatus)
+				.fetch(Filter.and().addAll(condStatusName));
+
+		List<String> statusIds = fetchStatus.stream().map(r -> r.getRecord(entityTypeStatus)).map(Record::getID)
+				.collect(Collectors.toList());
+
+		if (statusIds.size() != 1) {
+			throw new IllegalStateException(
+					"No or more than one Status instance with name \"Imported\" found in destination!");
+		}
+
+		return entityManagerDst.load(Status.class, statusIds.get(0));
+	}
+
+	public void clearCache() {
+		projectDomainCache.clear();
+		classificationCache.clear();
+	}
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/DefaultTemplateManager.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/DefaultTemplateManager.java
new file mode 100644
index 0000000..91bce5f
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/DefaultTemplateManager.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+/**
+ * 
+ */
+package org.eclipse.mdm.apicopy.control;
+
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+
+/**
+ * Default implementation of the templatemanager. It read the template names
+ * from the attribute 'template' of the source test and test step
+ *
+ */
+public class DefaultTemplateManager implements TemplateManager {
+
+	private static final String TESTATTR_TEMPLATE = "template";
+
+	@Override
+	public void setSourceContext(ApplicationContext source) throws ApiCopyException {
+	}
+
+	@Override
+	public String getTemplateTestName(Test test) throws ApiCopyException {
+		String returnVal = null;
+
+		try {
+			returnVal = test.getValue(TESTATTR_TEMPLATE).extract(ValueType.STRING);
+		} catch (Exception e) {
+			// if attribute not exists return null
+		}
+
+		return returnVal;
+	}
+
+	@Override
+	public String getTemplateTestStepName(TestStep testStep) throws ApiCopyException {
+		String returnVal = null;
+
+		try {
+			returnVal = testStep.getValue(TESTATTR_TEMPLATE).extract(ValueType.STRING);
+		} catch (Exception e) {
+			// if attribute not exists return null
+		}
+
+		return returnVal;
+	}
+
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/EntityHolder.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/EntityHolder.java
new file mode 100644
index 0000000..01d4eac
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/EntityHolder.java
@@ -0,0 +1,143 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.control;
+
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.Pool;
+import org.eclipse.mdm.api.dflt.model.Project;
+
+import com.google.common.base.Strings;
+
+public class EntityHolder {
+	private final Entity entity;
+	private final EntityManager entityManager;
+	private String name;
+	private String path;
+	private String key;
+
+	public EntityHolder(Entity entity, EntityManager entityManager) {
+		this.entity = entity;
+		this.entityManager = entityManager;
+	}
+
+	public String getName() {
+		if (null == name) {
+			name = entity.getName();
+		}
+
+		return name;
+	}
+
+	public Entity getEntity() {
+		return entity;
+	}
+
+	public String getKey() {
+		if (null == key) {
+			key = String.format("%s:%s", entity.getTypeName(), entity.getID());
+		}
+
+		return key;
+	}
+
+	public String getPath() {
+		if (null == path) {
+			EntityHolder parent = this;
+			List<String> listNames = new LinkedList<>();
+			while (null != parent) {
+				listNames.add(parent.getName());
+				parent = parent.getParent();
+			}
+			Collections.reverse(listNames);
+
+			path = listNames.stream().collect(Collectors.joining(" / "));
+		}
+
+		return path;
+	}
+
+	public EntityHolder getParent() {
+		if (entity instanceof Environment) {
+			return null;
+		} else if (entity instanceof Project) {
+			return null;
+		} else if (entity instanceof Pool) {
+			return new EntityHolder(entityManager.loadParent(entity, Project.class).get(), entityManager);
+		} else if (entity instanceof Test) {
+			return new EntityHolder(entityManager.loadParent(entity, Pool.class).get(), entityManager);
+		} else if (entity instanceof TestStep) {
+			return new EntityHolder(entityManager.loadParent(entity, Test.class).get(), entityManager);
+		} else if (entity instanceof Measurement) {
+			return new EntityHolder(entityManager.loadParent(entity, TestStep.class).get(), entityManager);
+		}
+
+		return null;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see java.lang.Object#hashCode()
+	 */
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + (Strings.nullToEmpty(getKey()).hashCode());
+		return result;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj) {
+			return true;
+		}
+		if (obj == null) {
+			return false;
+		}
+		if (getClass() != obj.getClass()) {
+			return false;
+		}
+		final EntityHolder other = (EntityHolder) obj;
+		String k = getKey();
+		if (null == k) {
+			if (other.getKey() != null) {
+				return false;
+			}
+		} else if (!k.equals(other.getKey())) {
+			return false;
+		}
+		return true;
+	}
+
+	@Override
+	public String toString() {
+		return String.format("%s.%s.%s", getEntity().getSourceName(), getEntity().getTypeName(), getEntity().getID());
+	}
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ExportTask.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ExportTask.java
new file mode 100644
index 0000000..43261e4
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ExportTask.java
@@ -0,0 +1,484 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.control;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.mdm.api.base.Transaction;
+import org.eclipse.mdm.api.base.massdata.ReadRequest;
+import org.eclipse.mdm.api.base.massdata.ReadRequest.ValuesMode;
+import org.eclipse.mdm.api.base.massdata.WriteRequest;
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.ContextComponent;
+import org.eclipse.mdm.api.base.model.ContextDescribable;
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextSensor;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.MeasuredValues;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.PhysicalDimension;
+import org.eclipse.mdm.api.base.model.Quantity;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.model.Unit;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.model.CatalogAttribute;
+import org.eclipse.mdm.api.dflt.model.CatalogComponent;
+import org.eclipse.mdm.api.dflt.model.CatalogSensor;
+import org.eclipse.mdm.api.dflt.model.Pool;
+import org.eclipse.mdm.api.dflt.model.Project;
+import org.eclipse.mdm.api.dflt.model.TemplateRoot;
+import org.eclipse.mdm.api.dflt.model.TemplateTestStep;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.ListMultimap;
+
+public class ExportTask extends TransferBase implements ApiCopyTask {
+	private static final Logger LOG = LoggerFactory.getLogger(ExportTask.class);
+
+	public ExportTask(ApplicationContext src, ApplicationContext dst) {
+		super(src, dst);
+	}
+
+	@Override
+	public void copy(List<? extends Entity> entities) {
+		Transaction transaction = entityManagerDst.startTransaction();
+		try {
+			mapSrcDstEntities.clear();
+
+			ListMultimap<Class<? extends Entity>, Entity> parents = loadParents(entities);
+			LOG.trace("Resolved parents: {}", parents);
+			supportedRootEntities.forEach(ec -> parents.get(ec).forEach(e -> copyEntity(e, false, transaction)));
+
+			LOG.trace("Importing entities: {}", entities);
+			entities.forEach(e -> copyEntity(e, true, transaction));
+
+			transaction.commit();
+		} catch (Exception exc) {
+			try {
+				transaction.abort();
+			} catch (Exception exc2) {
+				LOG.error("Could not abort transaction!");
+			}
+
+			throw new ApiCopyException("Could not copy data.", exc);
+		}
+	}
+
+	private Entity copyEntity(Entity entity, boolean recursive, Transaction transaction) {
+		if (entity instanceof Project) {
+			return copyProject((Project) entity, recursive, transaction);
+		} else if (entity instanceof Pool) {
+			return copyPool((Pool) entity, recursive, transaction);
+		} else if (entity instanceof Test) {
+			return copyTest((Test) entity, recursive, transaction);
+		} else if (entity instanceof TestStep) {
+			return copyTestStep((TestStep) entity, recursive, transaction);
+		} else if (entity instanceof Measurement) {
+			return copyMeasurement((Measurement) entity, recursive, transaction);
+		} else {
+			throw new ApiCopyException("Unsupported entity: '" + entity.getClass().getName() + "'");
+		}
+	}
+
+	private Project copyProject(Project projectSrc, boolean recursive, Transaction transaction) {
+		EntityHolder ehSrc = new EntityHolder(projectSrc, entityManagerSrc);
+
+		EntityHolder ehDst = mapSrcDstEntities.get(ehSrc);
+
+		if (null == ehDst) {
+			LOG.trace("Exporting Project '{}'", projectSrc.getName());
+			Project projectDst = entityFactoryDst.createProject(projectSrc.getName());
+
+			copyValues(projectSrc, projectDst, Arrays.asList("Id", "Name"), false, false);
+
+			persist(transaction, projectDst);
+
+			ehDst = new EntityHolder(projectDst, entityManagerDst);
+			mapSrcDstEntities.put(ehSrc, ehDst);
+
+			if (recursive) {
+				entityManagerSrc.loadChildren(projectSrc, Pool.class)
+						.forEach(pool -> copyPool(pool, recursive, transaction));
+			}
+		}
+
+		return (Project) ehDst.getEntity();
+	}
+
+	private Pool copyPool(Pool poolSrc, boolean recursive, Transaction transaction) {
+		EntityHolder ehSrc = new EntityHolder(poolSrc, entityManagerSrc);
+
+		EntityHolder ehDst = mapSrcDstEntities.get(ehSrc);
+
+		if (null == ehDst) {
+			LOG.trace("Exporting Pool '{}'", poolSrc.getName());
+			Project projectParentDst = (Project) mapSrcDstEntities
+					.get(new EntityHolder(entityManagerSrc.loadParent(poolSrc, Project.class).get(), entityManagerSrc))
+					.getEntity();
+
+			Pool poolDst = entityFactoryDst.createPool(poolSrc.getName(), projectParentDst);
+
+			copyValues(poolSrc, poolDst, Arrays.asList("Id", "Name"), false, false);
+
+			persist(transaction, poolDst);
+
+			ehDst = new EntityHolder(poolDst, entityManagerDst);
+			mapSrcDstEntities.put(ehSrc, ehDst);
+
+			if (recursive) {
+				entityManagerSrc.loadChildren(poolSrc, Test.class)
+						.forEach(test -> copyTest(test, recursive, transaction));
+			}
+		}
+
+		return (Pool) ehDst.getEntity();
+	}
+
+	private Test copyTest(Test testSrc, boolean recursive, Transaction transaction) {
+		EntityHolder ehSrc = new EntityHolder(testSrc, entityManagerSrc);
+
+		EntityHolder ehDst = mapSrcDstEntities.get(ehSrc);
+
+		if (null == ehDst) {
+			LOG.trace("Exporting Test '{}'", testSrc.getName());
+			Pool poolParentDst = (Pool) mapSrcDstEntities
+					.get(new EntityHolder(entityManagerSrc.loadParent(testSrc, Pool.class).get(), entityManagerSrc))
+					.getEntity();
+
+			Test testDst = entityFactoryDst.createTest(testSrc.getName(), poolParentDst);
+
+			copyValues(testSrc, testDst, Arrays.asList("Id", "Name"), false, false);
+
+			persist(transaction, testDst);
+
+			ehDst = new EntityHolder(testDst, entityManagerDst);
+			mapSrcDstEntities.put(ehSrc, ehDst);
+
+			if (recursive) {
+				entityManagerSrc.loadChildren(testSrc, TestStep.class)
+						.forEach(testStep -> copyTestStep(testStep, recursive, transaction));
+			}
+		}
+
+		return (Test) ehDst.getEntity();
+	}
+
+	private TestStep copyTestStep(TestStep testStepSrc, boolean recursive, Transaction transaction) {
+		EntityHolder ehSrc = new EntityHolder(testStepSrc, entityManagerSrc);
+
+		EntityHolder ehDst = mapSrcDstEntities.get(ehSrc);
+
+		if (null == ehDst) {
+			LOG.trace("Exporting TestStep '{}'", testStepSrc.getName());
+			Test testParentDst = (Test) mapSrcDstEntities
+					.get(new EntityHolder(entityManagerSrc.loadParent(testStepSrc, Test.class).get(), entityManagerSrc))
+					.getEntity();
+
+			TestStep testStepDst = entityFactoryDst.createTestStep(testStepSrc.getName(), testParentDst);
+
+			copyValues(testStepSrc, testStepDst, Arrays.asList("Id", "Name"), false, false);
+
+			persist(transaction, testStepDst);
+
+			TemplateTestStep tpl = entityManagerSrc.loadTemplate(testStepSrc).orElseThrow(() -> new ApiCopyException(
+					"Could not retrieve TemplateTestStep for TestStep " + testStepSrc.getID()));
+
+			copyContext(testStepSrc, testStepDst, tpl, transaction);
+
+			ehDst = new EntityHolder(testStepDst, entityManagerDst);
+			mapSrcDstEntities.put(ehSrc, ehDst);
+
+			if (recursive) {
+				entityManagerSrc.loadChildren(testStepSrc, Measurement.class)
+						.forEach(measurement -> copyMeasurement(measurement, recursive, transaction));
+			}
+		}
+
+		return (TestStep) ehDst.getEntity();
+	}
+
+	private Measurement copyMeasurement(Measurement measurementSrc, boolean recursive, Transaction transaction) {
+		EntityHolder ehSrc = new EntityHolder(measurementSrc, entityManagerSrc);
+
+		EntityHolder ehDst = mapSrcDstEntities.get(ehSrc);
+
+		if (null == ehDst) {
+			LOG.trace("Exporting Measurement '{}'", measurementSrc.getName());
+			TestStep testStepParentSrc = entityManagerSrc.loadParent(measurementSrc, TestStep.class).get();
+
+			TestStep testStepParentDst = (TestStep) mapSrcDstEntities
+					.get(new EntityHolder(testStepParentSrc, entityManagerSrc)).getEntity();
+
+			Measurement measurementDst = entityFactoryDst.createMeasurement(measurementSrc.getName(),
+					testStepParentDst);
+
+			copyValues(measurementSrc, measurementDst, Arrays.asList("Id", "Name"), false, false);
+
+			persist(transaction, measurementDst);
+
+			TemplateTestStep tpl = entityManagerSrc.loadTemplate(testStepParentSrc)
+					.orElseThrow(() -> new ApiCopyException(
+							"Could not retrieve TemplateTestStep for Measurement + " + measurementSrc.getID()));
+
+			copyContext(measurementSrc, measurementDst, tpl, transaction);
+
+			ehDst = new EntityHolder(measurementDst, entityManagerDst);
+			mapSrcDstEntities.put(ehSrc, ehDst);
+
+			if (recursive) {
+				List<WriteRequest> listWriteRequests = new ArrayList<>();
+
+				Map<String, Channel> mapChannels = new HashMap<>();
+
+				for (Channel channel : entityManagerSrc.loadChildren(measurementSrc, Channel.class)) {
+					Channel channelDst = copyChannel(channel, transaction);
+					mapChannels.put(channel.getName(), channelDst);
+				}
+
+				for (ChannelGroup channelGroup : entityManagerSrc.loadChildren(measurementSrc, ChannelGroup.class)) {
+					ChannelGroup channelGroupDst = copyChannelGroup(channelGroup, transaction);
+
+					for (MeasuredValues measuredValues : entityManagerSrc.readMeasuredValues(ReadRequest
+							.create(channelGroup).valuesMode(ValuesMode.STORAGE).allChannels().allValues())) {
+						LOG.trace("Exporting MeasuredValues '{}'", measuredValues.getName());
+						if (!mapChannels.containsKey(measuredValues.getName())) {
+							throw new ApiCopyException(
+									String.format("Cannot find Channel %s in destination!", measuredValues.getName()));
+						}
+
+						Channel channelDst = mapChannels.get(measuredValues.getName());
+
+						listWriteRequests.add(createWriteRequest(channelGroupDst, channelDst, measuredValues));
+					}
+				}
+
+				transaction.writeMeasuredValues(listWriteRequests);
+			}
+		}
+
+		return (Measurement) ehDst.getEntity();
+	}
+
+	private void copyContext(ContextDescribable entitySrc, ContextDescribable entityDst, TemplateTestStep tpl,
+			Transaction transaction) {
+
+		for (ContextRoot root : entitySrc.loadContexts(entityManagerSrc).values()) {
+			LOG.trace("Exporting ContextRoot '{}'", root.getName());
+			TemplateRoot tplRoot = tpl.getTemplateRoot(root.getContextType())
+					.orElseThrow(() -> new ApiCopyException("Could not retrieve TemplateRoot " + root.getContextType()
+							+ " for TestStep + " + entitySrc.getID()));
+
+			ContextRoot rootDst;
+			if (entityDst instanceof TestStep) {
+				rootDst = entityFactoryDst.createContextRoot((TestStep) entityDst, tplRoot);
+			} else if (entityDst instanceof Measurement) {
+				rootDst = entityFactoryDst.createContextRoot((Measurement) entityDst, tplRoot);
+			} else {
+				throw new ApiCopyException("ContextDescribable must be of instance TestStep or Measurement!");
+			}
+
+			copyValues(root, rootDst, Arrays.asList("Id", "Name"), false, false);
+			persist(transaction, rootDst);
+
+			for (ContextComponent comp : root.getContextComponents()) {
+				LOG.trace("Exporting ContextComponent '{}'", comp.getName());
+				rootDst.getContextComponent(comp.getName()).ifPresent(c -> {
+					copyValues(comp, c, Arrays.asList("Id", "Name"), false, false);
+					persist(transaction, c);
+				});
+			}
+			for (ContextSensor sensor : root.getContextSensors()) {
+				LOG.trace("Exporting ContextSensor '{}'", sensor.getName());
+				// Parent should be already created above
+				ContextComponent parentDst = rootDst.getContextComponent(sensor.getContextComponent().getName())
+						.orElseThrow(() -> new ApiCopyException(
+								"Parent ContextComponent of sensor " + sensor.getName() + " not found!"));
+
+				ContextSensor sensorDst = parentDst.getContextSensor(sensor.getName()).orElseThrow(
+						() -> new ApiCopyException("ContextSensor '" + sensor.getName() + "' not found in target!"));
+				copyValues(sensor, sensorDst, Arrays.asList("Id", "Name"), false, false);
+				persist(transaction, sensorDst);
+			}
+		}
+
+		persist(transaction, entityDst);
+	}
+
+	private Channel copyChannel(Channel channelSrc, Transaction transaction) {
+		EntityHolder ehSrc = new EntityHolder(channelSrc, entityManagerSrc);
+
+		EntityHolder ehDst = mapSrcDstEntities.get(ehSrc);
+
+		if (null == ehDst) {
+			LOG.trace("Exporting Channel '{}'", channelSrc.getName());
+			Measurement measurementParentDst = (Measurement) mapSrcDstEntities
+					.get(new EntityHolder(entityManagerSrc.loadParent(channelSrc, Measurement.class).get(),
+							entityManagerSrc))
+					.getEntity();
+
+			Quantity quantitySrc = channelSrc.getQuantity();
+			Unit unitSrc = quantitySrc.getDefaultUnit();
+			PhysicalDimension physicalDimensionSrc = unitSrc.getPhysicalDimension();
+
+			PhysicalDimension physicalDimensionDst = fetchOne(entityManagerDst, PhysicalDimension.class,
+					physicalDimensionSrc.getName())
+							.orElseGet(() -> entityFactoryDst.createPhysicalDimension(physicalDimensionSrc.getName()));
+
+			if (isNewEntity(physicalDimensionDst)) {
+				copyValues(physicalDimensionSrc, physicalDimensionDst, Arrays.asList("Id", "Name"), false, false);
+				persist(transaction, physicalDimensionDst);
+			}
+
+			Unit unitDst = fetchOne(entityManagerDst, Unit.class, unitSrc.getName())
+					.orElseGet(() -> entityFactoryDst.createUnit(unitSrc.getName(), physicalDimensionDst));
+
+			if (isNewEntity(unitDst)) {
+				copyValues(unitSrc, unitDst, Arrays.asList("Id", "Name"), false, false);
+				persist(transaction, unitDst);
+			}
+
+			Quantity quantityDst = fetchOne(entityManagerDst, Quantity.class, quantitySrc.getName())
+					.orElseGet(() -> entityFactoryDst.createQuantity(quantitySrc.getName(), unitDst));
+
+			if (isNewEntity(quantityDst)) {
+				copyValues(quantitySrc, quantityDst, Arrays.asList("Id", "Name"), false, false);
+				persist(transaction, quantityDst);
+			}
+
+			Channel channelDst = entityFactoryDst.createChannel(channelSrc.getName(), measurementParentDst,
+					quantityDst);
+
+			copyValues(channelSrc, channelDst, Arrays.asList("Id", "Name"), false, false);
+
+			persist(transaction, channelDst);
+
+			ehDst = new EntityHolder(channelDst, entityManagerDst);
+			mapSrcDstEntities.put(ehSrc, ehDst);
+		}
+
+		return (Channel) ehDst.getEntity();
+	}
+
+	private ChannelGroup copyChannelGroup(ChannelGroup channelGroupSrc, Transaction transaction) {
+		EntityHolder ehSrc = new EntityHolder(channelGroupSrc, entityManagerSrc);
+
+		EntityHolder ehDst = mapSrcDstEntities.get(ehSrc);
+
+		if (null == ehDst) {
+			LOG.trace("Exporting ChannelGroup '{}'", channelGroupSrc.getName());
+			Measurement measurementParentDst = (Measurement) mapSrcDstEntities
+					.get(new EntityHolder(entityManagerSrc.loadParent(channelGroupSrc, Measurement.class).get(),
+							entityManagerSrc))
+					.getEntity();
+
+			ChannelGroup channelGroupDst = entityFactoryDst.createChannelGroup(channelGroupSrc.getName(),
+					channelGroupSrc.getNumberOfValues(), measurementParentDst);
+
+			copyValues(channelGroupSrc, channelGroupDst, Arrays.asList("Id", "Name"), false, false);
+
+			persist(transaction, channelGroupDst);
+
+			ehDst = new EntityHolder(channelGroupDst, entityManagerDst);
+			mapSrcDstEntities.put(ehSrc, ehDst);
+		}
+
+		return (ChannelGroup) ehDst.getEntity();
+	}
+
+	/**
+	 * Copy the MDM catalog.
+	 */
+	public void copyCatalog() {
+		Transaction catTransaction = entityManagerDst.startTransaction();
+		try {
+			mapSrcDstEntities.clear();
+
+			LOG.trace("Exporting Catalog");
+			// Copy catalog
+			List<CatalogComponent> catComps = new ArrayList<>();
+			for (ContextType contextType : ContextType.values()) {
+				for (CatalogComponent catComp : entityManagerSrc.loadAll(CatalogComponent.class, contextType)) {
+					LOG.trace("Exporting CatalogComponent '{}'", catComp.getName());
+					CatalogComponent catCompDst = entityFactoryDst.createCatalogComponent(catComp.getContextType(),
+							catComp.getName());
+					for (CatalogAttribute catAttr : catComp.getCatalogAttributes()) {
+						if (catAttr.getValueType().isEnumerationType()) {
+							entityFactoryDst.createCatalogAttribute(catAttr.getName(), catAttr.getEnumerationObject(),
+									catCompDst);
+						} else {
+							entityFactoryDst.createCatalogAttribute(catAttr.getName(), catAttr.getValueType(),
+									catCompDst);
+						}
+					}
+
+					for (CatalogSensor catSensor : catComp.getCatalogSensors()) {
+						LOG.trace("Exporting CatalogSensor '{}'", catComp.getName());
+						CatalogSensor catSensorDst = entityFactoryDst.createCatalogSensor(catSensor.getName(),
+								catCompDst);
+						for (CatalogAttribute catAttr : catSensor.getCatalogAttributes()) {
+							entityFactoryDst.createCatalogSensorAttribute(catAttr.getName(), catAttr.getValueType(),
+									catSensorDst);
+						}
+					}
+
+					catComps.add(catCompDst);
+				}
+			}
+
+			catTransaction.create(catComps);
+			catTransaction.commit();
+		} catch (Exception exc) {
+			try {
+				catTransaction.abort();
+			} catch (Exception exc2) {
+				LOG.error("Could not abort transaction!");
+			}
+
+			throw new ApiCopyException("Could not copy data.", exc);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.mdm.apicopy.control.ApiCopyTask#setUnitMapping(java.util.Map)
+	 */
+	@Override
+	public void setUnitMapping(Map<String, String> unitMapping) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.mdm.apicopy.control.ApiCopyTask#setQuantityMapping(java.util.Map)
+	 */
+	@Override
+	public void setQuantityMapping(Map<String, String> quantityMapping) {
+	}
+
+	@Override
+	public void setProperties(Map<String, String> properties) {
+	}
+
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ImportTask.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ImportTask.java
new file mode 100644
index 0000000..698518d
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ImportTask.java
@@ -0,0 +1,1054 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.control;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+import org.eclipse.mdm.api.base.ServiceNotProvidedException;
+import org.eclipse.mdm.api.base.Transaction;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.Relation;
+import org.eclipse.mdm.api.base.massdata.ReadRequest;
+import org.eclipse.mdm.api.base.massdata.ReadRequest.ValuesMode;
+import org.eclipse.mdm.api.base.massdata.WriteRequest;
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.ContextComponent;
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.MeasuredValues;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.Quantity;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.model.User;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.model.VersionState;
+import org.eclipse.mdm.api.base.query.Filter;
+import org.eclipse.mdm.api.base.search.SearchService;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.Pool;
+import org.eclipse.mdm.api.dflt.model.Project;
+import org.eclipse.mdm.api.dflt.model.TemplateComponent;
+import org.eclipse.mdm.api.dflt.model.TemplateRoot;
+import org.eclipse.mdm.api.dflt.model.TemplateTest;
+import org.eclipse.mdm.api.dflt.model.TemplateTestStep;
+import org.eclipse.mdm.api.dflt.model.Versionable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Strings;
+import com.google.common.collect.ListMultimap;
+
+public class ImportTask extends TransferBase implements ApiCopyTask {
+
+	/**
+	 * Property to configure to overwrite the existing test step
+	 * 
+	 * Default: false
+	 * 
+	 * If true and the matching target test step exists, context data will be
+	 * overwriten and the measurements will be imported as childs of the existing
+	 * teststep.
+	 * 
+	 * Otherwise a new test step will be created
+	 */
+	private static final String PROPERTY_OVERWRITE_EXISTING_ELEMENTS = "overwriteExistingElements";
+	private static final String DEFAULT_OVERWRITE_EXISTING_ELEMENTS = "false";
+
+	/**
+	 * Property to configure that existing measured values will be appended
+	 * 
+	 * Default: false
+	 * 
+	 * If true the measured value of the import data set will be appended to the
+	 * existing. That means, if the target measurement already exists the importer
+	 * will add the measured values of the source column to the target column. If at
+	 * the the target measurement the column not exists, the importer create a new
+	 * one, add first invalid values with the count of the target submatrix size,
+	 * and add there the source values.
+	 * 
+	 * If false and the target measurement already exists, the import task will be
+	 * canceled
+	 */
+	private static final String PROPERTY_APPEND = "append";
+	private static final String DEFAULT_APPEND = "false";
+
+	/**
+	 * Property to configure that existing file links will be replaced
+	 * 
+	 * Default: false
+	 * 
+	 * If true, file links of the target entities will be replaced, if in the source
+	 * the file link exists
+	 * 
+	 * Otherwise new file links will be added to the existing sequence.
+	 */
+	private static final String PROPERTY_REPLACE_FILELINKS = "replaceFileLinks";
+	private static final String DEFAULT_REPLACE_FILES = "false";
+
+	private static final Logger LOG = LoggerFactory.getLogger(ImportTask.class);
+
+	private SearchService searchServiceDst;
+	private ClassificationUtil classificationUtil;
+	private TemplateManager templateManager;
+
+	private Map<String, String> quantityMapping = new HashMap<>();
+
+	private Map<String, String> unitMapping = new HashMap<>();
+
+	private Map<String, String> properties = new HashMap<>();
+
+	private boolean replaceFileLinks = false;
+
+	public ImportTask(ApplicationContext src, ApplicationContext dst, TemplateManager templateManager) {
+		super(src, dst);
+
+		searchServiceDst = contextDst.getSearchService()
+				.orElseThrow(() -> new ServiceNotProvidedException(SearchService.class));
+
+		if (templateManager == null) {
+			this.templateManager = new DefaultTemplateManager();
+		} else {
+			this.templateManager = templateManager;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.mdm.apicopy.control.ApiCopyTask#setUnitMapping(java.util.Map)
+	 */
+	@Override
+	public void setUnitMapping(Map<String, String> unitMapping) {
+		this.unitMapping = unitMapping;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.mdm.apicopy.control.ApiCopyTask#setQuantityMapping(java.util.Map)
+	 */
+	@Override
+	public void setQuantityMapping(Map<String, String> quantityMapping) {
+		this.quantityMapping = quantityMapping;
+	}
+
+	@Override
+	public void copy(List<? extends Entity> entities) {
+		Transaction transaction = entityManagerDst.startTransaction();
+		classificationUtil = new ClassificationUtil(transaction, contextDst);
+		try {
+			mapSrcDstEntities.clear();
+
+			ListMultimap<Class<? extends Entity>, Entity> parents = loadParents(entities);
+			LOG.trace("Resolved parents: {}", parents);
+			supportedRootEntities.forEach(ec -> parents.get(ec).forEach(e -> copyEntity(e, false, transaction)));
+
+			LOG.trace("Export entities: {}", entities);
+			entities.forEach(e -> copyEntity(e, true, transaction));
+			transaction.commit();
+			deleteFilesOfReplacedFileLinks();
+		} catch (Exception exc) {
+			try {
+				transaction.abort();
+			} catch (Exception exc2) {
+				LOG.error("Could not abort transaction!");
+			}
+			deleteFilesOfUploadedFileLinks();
+
+			throw new ApiCopyException("Could not copy data: " + exc.getMessage(), exc);
+		} finally {
+			classificationUtil.clearCache();
+			clearReplacedFileLinkCache();
+			clearUploadedFileLinkCache();
+		}
+	}
+
+	private Entity copyEntity(Entity entity, boolean recursive, Transaction transaction) {
+		if (entity instanceof Project) {
+			return copyProject((Project) entity, recursive, transaction);
+		} else if (entity instanceof Pool) {
+			return copyPool((Pool) entity, recursive, transaction);
+		} else if (entity instanceof Test) {
+			return copyTest((Test) entity, recursive, transaction);
+		} else if (entity instanceof TestStep) {
+			return copyTestStep((TestStep) entity, recursive, transaction);
+		} else if (entity instanceof Measurement) {
+			return copyMeasurement((Measurement) entity, new ArrayList<ContextRoot>(), recursive, transaction);
+		} else {
+			throw new ApiCopyException("Unsupported entity: '" + entity.getClass().getName() + "'");
+		}
+	}
+
+	private Project copyProject(Project projectSrc, boolean recursive, Transaction transaction) {
+		EntityHolder ehSrc = new EntityHolder(projectSrc, entityManagerSrc);
+
+		EntityHolder ehDst = mapSrcDstEntities.get(ehSrc);
+
+		if (null == ehDst) {
+			LOG.trace("Importing Project '{}'", projectSrc.getName());
+			EntityType etProject = modelManagerDst.getEntityType(Project.class);
+
+			Filter filter = Filter.nameOnly(etProject, projectSrc.getName());
+
+			Project projectDst = fetchOne(searchServiceDst, Project.class, filter)
+					.orElseGet(() -> entityFactoryDst.createProject(projectSrc.getName()));
+
+			copyValues(projectSrc, projectDst, Arrays.asList("Id", "Name"), false, replaceFileLinks);
+
+			persist(transaction, projectDst);
+
+			ehDst = new EntityHolder(projectDst, entityManagerDst);
+			mapSrcDstEntities.put(ehSrc, ehDst);
+
+			if (recursive) {
+				entityManagerSrc.loadChildren(projectSrc, Pool.class)
+						.forEach(pool -> copyPool(pool, recursive, transaction));
+			}
+		}
+
+		return (Project) ehDst.getEntity();
+	}
+
+	private Pool copyPool(Pool poolSrc, boolean recursive, Transaction transaction) {
+		EntityHolder ehSrc = new EntityHolder(poolSrc, entityManagerSrc);
+
+		EntityHolder ehDst = mapSrcDstEntities.get(ehSrc);
+
+		if (null == ehDst) {
+			LOG.trace("Importing Pool '{}'", poolSrc.getName());
+
+			Project projectParentDst = (Project) mapSrcDstEntities
+					.get(new EntityHolder(entityManagerSrc.loadParent(poolSrc, Project.class).get(), entityManagerSrc))
+					.getEntity();
+
+			EntityType etPool = modelManagerDst.getEntityType(Pool.class);
+			EntityType etProject = modelManagerDst.getEntityType(Project.class);
+
+			Relation relProject = etPool.getRelation(etProject);
+
+			if (null == relProject) {
+				throw new ApiCopyException("No relation to Project found at Pool!");
+			}
+
+			Filter filter = Filter.nameOnly(etPool, poolSrc.getName()).id(relProject, projectParentDst.getID());
+			Pool poolDst = fetchOne(searchServiceDst, Pool.class, filter)
+					.orElseGet(() -> entityFactoryDst.createPool(poolSrc.getName(), projectParentDst));
+
+			copyValues(poolSrc, poolDst, Arrays.asList("Id", "Name"), false, replaceFileLinks);
+
+			persist(transaction, poolDst);
+
+			ehDst = new EntityHolder(poolDst, entityManagerDst);
+			mapSrcDstEntities.put(ehSrc, ehDst);
+
+			if (recursive) {
+				entityManagerSrc.loadChildren(poolSrc, Test.class)
+						.forEach(test -> copyTest(test, recursive, transaction));
+			}
+		}
+
+		return (Pool) ehDst.getEntity();
+	}
+
+	private Test copyTest(Test testSrc, boolean recursive, Transaction transaction) {
+		EntityHolder ehSrc = new EntityHolder(testSrc, entityManagerSrc);
+
+		EntityHolder ehDst = mapSrcDstEntities.get(ehSrc);
+
+		if (null == ehDst) {
+
+			Pool poolParentDst = (Pool) mapSrcDstEntities
+					.get(new EntityHolder(entityManagerSrc.loadParent(testSrc, Pool.class).get(), entityManagerSrc))
+					.getEntity();
+
+			EntityType etTest = modelManagerDst.getEntityType(Test.class);
+			EntityType etPool = modelManagerDst.getEntityType(Pool.class);
+
+			Relation relPool = etTest.getRelation(etPool);
+
+			if (null == relPool) {
+				throw new ApiCopyException("No relation to StructureLevel found at Test!");
+			}
+
+			Optional<TemplateTest> templateTestDst = loadTemplateTest(testSrc);
+
+			Filter filter = Filter.nameOnly(etTest, testSrc.getName()).id(relPool, poolParentDst.getID());
+
+			String rootProjectName = getProjectName(testSrc);
+
+			Test testDst;
+
+			if (templateTestDst.isPresent()) {
+				LOG.trace("Importing Test '{}' using TestTemplate '{}'", testSrc.getName(),
+						templateTestDst.get().getName());
+				testDst = fetchOne(searchServiceDst, Test.class, filter)
+						.orElseGet(() -> entityFactoryDst.createTest(testSrc.getName(), poolParentDst,
+								templateTestDst.get(), classificationUtil.getClassification(rootProjectName), false));
+			} else {
+				LOG.trace("Importing Test '{}' using no TestTemplate", testSrc.getName());
+				testDst = fetchOne(searchServiceDst, Test.class, filter)
+						.orElseGet(() -> entityFactoryDst.createTest(testSrc.getName(), poolParentDst, null,
+								classificationUtil.getClassification(rootProjectName), false));
+			}
+
+			copyValues(testSrc, testDst, Arrays.asList("Id", "Name"), true, replaceFileLinks);
+
+			// copy responsible person:
+			Optional<User> userSrc = testSrc.getResponsiblePerson();
+			if (userSrc.isPresent()) {
+				User userDst = entityManagerDst.loadAll(User.class, userSrc.get().getName()).stream().findFirst()
+						.orElseThrow(() -> new ApiCopyException(String.format(
+								"No User instance with name %s found in destination!", userSrc.get().getName())));
+
+				testDst.setResponsiblePerson(userDst);
+			}
+
+			persist(transaction, testDst);
+
+			ehDst = new EntityHolder(testDst, entityManagerDst);
+			mapSrcDstEntities.put(ehSrc, ehDst);
+
+			if (recursive) {
+				EntityType etTestStep = modelManagerDst.getEntityType(TestStep.class);
+				Relation relTest = etTestStep.getRelation(etTest);
+
+				if (null == relTest) {
+					throw new ApiCopyException("No relation to Test found at TestStep!");
+				}
+
+				copyTestSteps(testSrc, recursive, templateTestDst, testDst, transaction);
+				entityManagerSrc.loadChildren(testSrc, TestStep.class)
+						.forEach(testStep -> copyTestStep(testStep, recursive, transaction));
+			}
+		}
+
+		return (Test) ehDst.getEntity();
+	}
+
+	private TestStep copyTestStep(TestStep testStepSrc, boolean recursive, Transaction transaction) {
+		EntityHolder ehSrc = new EntityHolder(testStepSrc, entityManagerSrc);
+
+		EntityHolder ehDst = mapSrcDstEntities.get(ehSrc);
+
+		if (null == ehDst) {
+			LOG.trace("Importing TestStep '{}'", testStepSrc.getName());
+			EntityType etTestStep = modelManagerDst.getEntityType(TestStep.class);
+			EntityType etTest = modelManagerDst.getEntityType(Test.class);
+
+			Relation relTest = etTestStep.getRelation(etTest);
+
+			if (null == relTest) {
+				throw new ApiCopyException("No relation to Test found at TestStep!");
+			}
+
+			Test testDst = (Test) mapSrcDstEntities
+					.get(new EntityHolder(entityManagerSrc.loadParent(testStepSrc, Test.class).get(), entityManagerSrc))
+					.getEntity();
+
+			Optional<TemplateTestStep> templateTestStep = loadTemplateTestStep(testStepSrc);
+
+			Filter filter = Filter.nameOnly(etTestStep, testStepSrc.getName()).id(relTest, testDst.getID());
+
+			String rootProjectName = getProjectName(testStepSrc);
+
+			TestStep testStepDst = fetchOne(searchServiceDst, TestStep.class, filter).orElseGet(() -> {
+				if (templateTestStep.isPresent() && hasContextData(testStepSrc)) {
+					LOG.trace("Importing TestStep '{}' using TestStepTemplate '{}' and create context roots",
+							testStepSrc.getName(), templateTestStep.get().getName());
+					return entityFactoryDst.createTestStep(testDst, templateTestStep.get(),
+							classificationUtil.getClassification(rootProjectName));
+				} else if (templateTestStep.isPresent()) {
+					LOG.trace("Importing TestStep '{}' using TestStepTemplate '{}'", testStepSrc.getName(),
+							templateTestStep.get().getName());
+					return entityFactoryDst.createTestStepWithOutContextRoots(testDst, templateTestStep.get(),
+							classificationUtil.getClassification(rootProjectName));
+				} else {
+					LOG.trace("Importing TestStep '{}' using no TestStepTemplate", testStepSrc.getName());
+					TestStep createdTestStep = entityFactoryDst.createTestStep(testStepSrc.getName(), testDst,
+							classificationUtil.getClassification(rootProjectName));
+					Value value = createdTestStep.getValue("TplTestStep");
+					return createdTestStep;
+				}
+			});
+
+			copyValues(testStepSrc, testStepDst, Arrays.asList("Id"), true, replaceFileLinks);
+
+			persist(transaction, testStepDst);
+
+			ehDst = new EntityHolder(testStepDst, entityManagerDst);
+			mapSrcDstEntities.put(ehSrc, ehDst);
+
+			Map<ContextType, ContextRoot> mapContextRootsSrc = testStepSrc.loadContexts(entityManagerSrc,
+					ContextType.values());
+			Map<ContextType, ContextRoot> mapContextRootsDst = testStepDst.loadContexts(entityManagerDst,
+					ContextType.values());
+
+			copyContext(mapContextRootsSrc, mapContextRootsDst, templateTestStep, transaction);
+
+			if (recursive) {
+				List<ContextRoot> listContextRoots = new ArrayList<>();
+				entityManagerSrc.loadChildren(testStepSrc, Measurement.class)
+						.forEach(measurement -> copyMeasurement(measurement, listContextRoots, recursive, transaction));
+			}
+		}
+		return (TestStep) ehDst.getEntity();
+	}
+
+	private String getProjectName(TestStep testStepSrc) {
+		Optional<Test> parentTest = entityManagerSrc.loadParent(testStepSrc, Test.class);
+
+		if (!parentTest.isPresent()) {
+			throw new ApiCopyException("Parent of source teststep not found!");
+		}
+
+		return getProjectName(parentTest.get());
+	}
+
+	private String getProjectName(Test testSrc) {
+
+		Optional<Pool> parentPool = entityManagerSrc.loadParent(testSrc, Pool.class);
+
+		if (!parentPool.isPresent()) {
+			throw new ApiCopyException("Parent of source test not found!");
+		}
+
+		Optional<Project> parentProject = entityManagerSrc.loadParent(parentPool.get(), Project.class);
+
+		if (!parentProject.isPresent()) {
+			throw new ApiCopyException("Parent of source pool not found!");
+		}
+
+		return parentProject.get().getName();
+	}
+
+	/**
+	 * Check if the teststep has context data
+	 * 
+	 * @param testStepSrc
+	 * @return true if the teststep has conteyt data
+	 */
+	private boolean hasContextData(TestStep testStepSrc) {
+		boolean hasContextData = false;
+
+		Optional<EntityManager> entityManager = contextSrc.getEntityManager();
+		if (entityManager.isPresent()) {
+			Map<ContextType, ContextRoot> loadContexts = entityManager.get().loadContexts(testStepSrc,
+					ContextType.UNITUNDERTEST, ContextType.TESTEQUIPMENT, ContextType.TESTSEQUENCE);
+			if (!loadContexts.isEmpty()) {
+				hasContextData = true;
+			}
+		}
+
+		return hasContextData;
+
+	}
+
+	private List<TestStep> copyTestSteps(Test testSrc, boolean recursive, Optional<TemplateTest> templateTestDst,
+			Test testDst, Transaction transaction) {
+		EntityType etTestStep = modelManagerDst.getEntityType(TestStep.class);
+		EntityType etTest = modelManagerDst.getEntityType(Test.class);
+
+		Relation relTest = etTestStep.getRelation(etTest);
+
+		if (null == relTest) {
+			throw new ApiCopyException("No relation to Test found at TestStep!");
+		}
+
+		List<TestStep> listTestStepsSrc = entityManagerSrc.loadChildren(testSrc, TestStep.class);
+
+		List<TestStep> listTestStepsDst = new ArrayList<>();
+		for (int i = 0, len = listTestStepsSrc.size(); i < len; ++i) {
+			TestStep testStepSrc = listTestStepsSrc.get(i);
+			Optional<TemplateTestStep> templateTestStep = loadTemplateTestStep(testStepSrc);
+
+			String rootProjectName = getProjectName(testStepSrc);
+
+			Filter filter = Filter.nameOnly(etTestStep, testStepSrc.getName()).id(relTest, testDst.getID());
+			Optional<TestStep> oTestSTepDst = fetchOne(searchServiceDst, TestStep.class, filter);
+
+			TestStep testStepDst;
+
+			boolean overwriteExistingElements = Boolean.valueOf(
+					properties.getOrDefault(PROPERTY_OVERWRITE_EXISTING_ELEMENTS, DEFAULT_OVERWRITE_EXISTING_ELEMENTS));
+
+			if (!overwriteExistingElements || (overwriteExistingElements && !oTestSTepDst.isPresent())) {
+				if (templateTestStep.isPresent() && hasContextData(testStepSrc)) {
+					LOG.trace("Importing TestStep '{}' using TestStepTemplate '{}' and create context roots",
+							testStepSrc.getName(), templateTestStep.get().getName());
+					testStepDst = entityFactoryDst.createTestStep(testDst, templateTestStep.get(),
+							classificationUtil.getClassification(rootProjectName));
+					testStepDst.setName(testStepSrc.getName());
+				} else if (templateTestStep.isPresent()) {
+					LOG.trace("Importing TestStep '{}' using TestStepTemplate '{}' and create context roots",
+							testStepSrc.getName(), templateTestStep.get().getName());
+					testStepDst = entityFactoryDst.createTestStepWithOutContextRoots(testDst, templateTestStep.get(),
+							classificationUtil.getClassification(rootProjectName));
+				} else {
+					LOG.trace("Importing TestStep '{}' using no TestStepTemplate", testStepSrc.getName());
+					testStepDst = entityFactoryDst.createTestStep(testStepSrc.getName(), testDst,
+							classificationUtil.getClassification(rootProjectName));
+				}
+			} else {
+				testStepDst = oTestSTepDst.get();
+			}
+
+			copyValues(testStepSrc, testStepDst, Arrays.asList("Id"), true, replaceFileLinks);
+
+			listTestStepsDst.add(testStepDst);
+
+			mapSrcDstEntities.put(new EntityHolder(testStepSrc, entityManagerSrc),
+					new EntityHolder(testStepDst, entityManagerDst));
+		}
+
+		for (TestStep testStepSrc : listTestStepsSrc) {
+			Optional<TestStep> testStepDst = listTestStepsDst.stream()
+					.filter(n -> n.getName().equals(testStepSrc.getName())).findFirst();
+
+			if (testStepDst.isPresent()) {
+				Map<ContextType, ContextRoot> mapContextRootsSrc = testStepSrc.loadContexts(entityManagerSrc,
+						ContextType.values());
+				Map<ContextType, ContextRoot> mapContextRootsDst = testStepDst.get().loadContexts(entityManagerDst,
+						ContextType.values());
+				copyContext(mapContextRootsSrc, mapContextRootsDst, loadTemplateTestStep(testStepSrc), transaction);
+			}
+		}
+
+		persist(transaction, listTestStepsDst);
+
+		if (recursive) {
+			for (TestStep testStep : listTestStepsSrc) {
+				List<ContextRoot> listContextRoots = new ArrayList<>();
+				entityManagerSrc.loadChildren(testStep, Measurement.class)
+						.forEach(measurement -> copyMeasurement(measurement, listContextRoots, recursive, transaction));
+			}
+		}
+
+		return listTestStepsDst;
+	}
+
+	private void copyContext(Map<ContextType, ContextRoot> mapContextRootsSrc,
+			Map<ContextType, ContextRoot> mapContextRootsDst, Optional<TemplateTestStep> optTemplateTestStep,
+			Transaction transaction) {
+
+		for (Map.Entry<ContextType, ContextRoot> me : mapContextRootsSrc.entrySet()) {
+			LOG.trace("Importing ContextRoot '{}'", me.getKey());
+			ContextRoot contextRootDst = mapContextRootsDst.get(me.getKey());
+			if (null != contextRootDst && contextRootDst.getName().equals(me.getValue().getName())) {
+				ContextRoot contextRootSrc = me.getValue();
+				copyValues(contextRootSrc, contextRootDst, Arrays.asList("Id", "Name"), false, replaceFileLinks);
+
+				TemplateRoot templateRootDst = null;
+
+				if (optTemplateTestStep.isPresent()) {
+					Optional<TemplateRoot> optTemplateRoot = optTemplateTestStep.get()
+							.getTemplateRoot(contextRootDst.getContextType());
+
+					templateRootDst = optTemplateRoot.orElse(null);
+				}
+
+				for (ContextComponent contextComponentSrc : me.getValue().getContextComponents()) {
+					LOG.trace("Importing ContextComponent '{}'", contextComponentSrc.getName());
+					Optional<ContextComponent> o = contextRootDst.getContextComponent(contextComponentSrc.getName());
+
+					if (o.isPresent()) {
+						ContextComponent contextComponentDst = o.get();
+
+						copyValues(contextComponentSrc, contextComponentDst, Arrays.asList("Id", "Name"), true,
+								replaceFileLinks);
+
+					} else if (null != templateRootDst) {
+						Optional<TemplateComponent> optTemplateComponent = templateRootDst
+								.getTemplateComponent(contextComponentSrc.getName());
+
+						if (optTemplateComponent.isPresent()) {
+							TemplateComponent templateComponent = optTemplateComponent.get();
+							if (templateComponent.isOptional() && !templateComponent.isDefaultActive()) {
+								ContextComponent contextComponentDst = entityFactoryDst
+										.createContextComponent(contextComponentSrc.getName(), contextRootDst);
+
+								copyValues(contextComponentSrc, contextComponentDst, Arrays.asList("Id", "Name"), true,
+										replaceFileLinks);
+
+								persist(transaction, contextComponentDst);
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+
+	private Measurement copyMeasurement(Measurement measurementSrc, List<ContextRoot> listContextRootsDst,
+			boolean recursive, Transaction transaction) {
+		EntityHolder ehSrc = new EntityHolder(measurementSrc, entityManagerSrc);
+
+		EntityHolder ehDst = mapSrcDstEntities.get(ehSrc);
+
+		boolean append = Boolean.valueOf(properties.getOrDefault(PROPERTY_APPEND, DEFAULT_APPEND));
+
+		if (null == ehDst) {
+			LOG.trace("Importing Measurement '{}'", measurementSrc.getName());
+			TestStep testStepSrs = entityManagerSrc.loadParent(measurementSrc, TestStep.class).get();
+			TestStep testStepParentDst = (TestStep) mapSrcDstEntities
+					.get(new EntityHolder(testStepSrs, entityManagerSrc)).getEntity();
+
+			EntityType etMeasurement = modelManagerDst.getEntityType(Measurement.class);
+			EntityType etTestStep = modelManagerDst.getEntityType(TestStep.class);
+
+			Relation relTestStep = etMeasurement.getRelation(etTestStep);
+
+			if (null == relTestStep) {
+				throw new ApiCopyException("No relation to TestStep found at MeaResult!");
+			}
+
+			Filter filter = Filter.nameOnly(etMeasurement, measurementSrc.getName()).id(relTestStep,
+					testStepParentDst.getID());
+
+			Optional<Measurement> optMeasurement = fetchOne(searchServiceDst, Measurement.class, filter);
+			Measurement measurementDst = null;
+
+			if (optMeasurement.isPresent() && !append) {
+				throw new ApiCopyException(String.format("TestStep '%s' has already a measurement with name '%s'!",
+						testStepParentDst.getName(), measurementSrc.getName()));
+			} else if (optMeasurement.isPresent()) {
+				measurementDst = optMeasurement.get();
+			} else {
+				append = false;
+			}
+
+			Optional<TemplateTestStep> optTemplateTestStep = loadTemplateTestStep(testStepSrs);
+
+			// If no ContextRoots to use with the newly created Measurement are passed into
+			// this method, use ContextRoots
+			// of any already existing Measurement under the parent test step.
+			// First look in destination...
+			if (listContextRootsDst.isEmpty()) {
+				for (Measurement existingMeasurementDst : entityManagerDst.loadChildren(testStepParentDst,
+						Measurement.class)) {
+					listContextRootsDst.addAll(
+							existingMeasurementDst.loadContexts(entityManagerDst, ContextType.values()).values());
+
+					if (!listContextRootsDst.isEmpty()) {
+						break;
+					}
+				}
+			}
+
+			// ...then, if nothing has been found, in source and try to find destination
+			// counterpart in cache map:
+			if (listContextRootsDst.isEmpty()) {
+				for (Measurement existingMeasurementSrc : entityManagerSrc.loadChildren(testStepSrs,
+						Measurement.class)) {
+					EntityHolder eh = mapSrcDstEntities.get(new EntityHolder(existingMeasurementSrc, entityManagerSrc));
+					if (null != eh) {
+						listContextRootsDst.addAll(((Measurement) eh.getEntity())
+								.loadContexts(entityManagerDst, ContextType.values()).values());
+					}
+
+					if (!listContextRootsDst.isEmpty()) {
+						break;
+					}
+				}
+			}
+
+			// Still no ContextRoots found? Create them from the test step template:
+			if (listContextRootsDst.isEmpty() && optTemplateTestStep.isPresent()) {
+				optTemplateTestStep.get().getTemplateRoots()
+						.forEach(tr -> listContextRootsDst.add(entityFactoryDst.createContextRoot(tr)));
+			}
+
+			if (measurementDst == null) {
+				measurementDst = entityFactoryDst.createMeasurement(measurementSrc.getName(), testStepParentDst,
+						listContextRootsDst.toArray(new ContextRoot[listContextRootsDst.size()]));
+			}
+
+			copyValues(measurementSrc, measurementDst, Arrays.asList("Id", "Name"), true, replaceFileLinks);
+
+			ehDst = new EntityHolder(measurementDst, entityManagerDst);
+			mapSrcDstEntities.put(ehSrc, ehDst);
+
+			Map<ContextType, ContextRoot> mapContextRootsSrc = testStepParentDst.loadContexts(entityManagerDst,
+					ContextType.values());
+			Map<ContextType, ContextRoot> mapContextRootsDst = measurementDst.loadContexts(entityManagerDst,
+					ContextType.values());
+
+			copyContext(mapContextRootsSrc, mapContextRootsDst, optTemplateTestStep, transaction);
+
+			mapContextRootsSrc = measurementSrc.loadContexts(entityManagerSrc, ContextType.values());
+			mapContextRootsDst = measurementDst.loadContexts(entityManagerDst, ContextType.values());
+			copyContext(mapContextRootsSrc, mapContextRootsDst, optTemplateTestStep, transaction);
+
+			persist(transaction, measurementDst);
+
+			Iterator<ContextRoot> contextRootIter = mapContextRootsDst.values().iterator();
+
+			while (contextRootIter.hasNext()) {
+				ContextRoot contextRootForUpdate = contextRootIter.next();
+				persist(transaction, contextRootForUpdate);
+			}
+
+			if (recursive) {
+				List<WriteRequest> listWriteRequests = new ArrayList<>();
+
+				Map<String, Channel> mapChannels = new HashMap<>();
+
+				if (append && !isSrcChannelsValid(entityManagerSrc.loadChildren(measurementSrc, Channel.class),
+						entityManagerDst.loadChildren(measurementDst, Channel.class))) {
+					throw new ApiCopyException(
+							"Appending not possible. All channels of existing measurement have to be in the source measurement");
+				}
+
+				for (Channel channel : entityManagerSrc.loadChildren(measurementSrc, Channel.class)) {
+					Channel channelDst = copyChannel(channel, transaction);
+					mapChannels.put(channel.getName(), channelDst);
+				}
+
+				for (ChannelGroup channelGroup : entityManagerSrc.loadChildren(measurementSrc, ChannelGroup.class)) {
+					Map<String, MeasuredValues> existingMeasValuesToAppend = new HashMap<>();
+
+					Integer numberOfValues = 0;
+					if (append) {
+						Optional<ChannelGroup> optChannelGroup = fetchOneChannelGroup(channelGroup);
+
+						if (optChannelGroup.isPresent()) {
+							numberOfValues = optChannelGroup.get().getNumberOfValues();
+							existingMeasValuesToAppend = getMeasurementValuesMap(entityManagerDst,
+									optChannelGroup.get());
+						}
+
+					}
+
+					ChannelGroup channelGroupDst = copyChannelGroup(channelGroup, transaction, append);
+
+					for (MeasuredValues measuredValues : entityManagerSrc.readMeasuredValues(ReadRequest
+							.create(channelGroup).valuesMode(ValuesMode.STORAGE).allChannels().allValues())) {
+						LOG.trace("Importing MeasuredValues '{}'", measuredValues.getName());
+						if (!mapChannels.containsKey(measuredValues.getName())) {
+							throw new ApiCopyException(
+									String.format("Cannot find Channel %s in destination!", measuredValues.getName()));
+						}
+
+						Channel channelDst = mapChannels.get(measuredValues.getName());
+
+						String mappedUnit = unitMapping.get(measuredValues.getUnit());
+
+						if (!Strings.isNullOrEmpty(mappedUnit)) {
+							measuredValues = MeasuredValuesHelper.mapUnitOfMeasuredValues(measuredValues, mappedUnit);
+						}
+
+						if (append) {
+
+							channelDst = replaceChannelDst(channelDst, measurementDst, ehSrc, transaction);
+
+							MeasuredValues measuredValuesOld = existingMeasValuesToAppend.get(channelDst.getName());
+
+							if (measuredValuesOld == null) {
+								measuredValuesOld = MeasuredValuesHelper.createEmptyValues(measuredValues.getName(),
+										measuredValues.getScalarType(), measuredValues.getUnit(),
+										measuredValues.getSequenceRepresentation(),
+										measuredValues.getGenerationParameters(), measuredValues.isIndependent(),
+										measuredValues.getAxisType(), numberOfValues);
+
+							}
+
+							measuredValues = MeasuredValuesHelper.appenMeasuredValues(measuredValuesOld,
+									measuredValues);
+
+						}
+
+						listWriteRequests.add(createWriteRequest(channelGroupDst, channelDst, measuredValues));
+
+					}
+				}
+
+				transaction.writeMeasuredValues(listWriteRequests);
+			}
+		}
+
+		return (Measurement) ehDst.getEntity();
+	}
+
+	private boolean isSrcChannelsValid(List<Channel> channelsSrc, List<Channel> channelsDst) {
+		boolean isSrcChannelsValid = true;
+
+		Map<String, Channel> sourceMap = new HashMap<>();
+		channelsSrc.forEach(srcChannel -> sourceMap.put(srcChannel.getName(), srcChannel));
+
+		for (Channel channelDst : channelsDst) {
+			if (sourceMap.get(channelDst.getName()) == null) {
+				isSrcChannelsValid = false;
+				break;
+			}
+		}
+
+		return isSrcChannelsValid;
+	}
+
+	private Channel replaceChannelDst(Channel channelDst, Measurement measurementDst, EntityHolder ehSrc,
+			Transaction transaction) {
+		Channel channelNew = entityFactoryDst.createChannel(channelDst.getName(), measurementDst,
+				channelDst.getQuantity());
+
+		copyValues(channelDst, channelNew, Arrays.asList("Id"), false, replaceFileLinks);
+		persist(transaction, channelNew);
+		mapSrcDstEntities.put(ehSrc, new EntityHolder(channelNew, entityManagerDst));
+
+		transaction.delete(Collections.singletonList(channelDst));
+		return channelNew;
+	}
+
+	private Map<String, MeasuredValues> getMeasurementValuesMap(EntityManager entityManager,
+			ChannelGroup channelGroup) {
+
+		Map<String, MeasuredValues> returnVal = new HashMap<>();
+
+		for (MeasuredValues measuredValues : entityManager.readMeasuredValues(
+				ReadRequest.create(channelGroup).valuesMode(ValuesMode.STORAGE).allChannels().allValues())) {
+			returnVal.put(measuredValues.getName(), measuredValues);
+		}
+		return returnVal;
+	}
+
+	private Channel copyChannel(Channel channelSrc, Transaction transaction) {
+		EntityHolder ehSrc = new EntityHolder(channelSrc, entityManagerSrc);
+
+		EntityHolder ehDst = mapSrcDstEntities.get(ehSrc);
+
+		if (null == ehDst) {
+			LOG.trace("Importing Channel '{}'", channelSrc.getName());
+			Measurement measurementParentDst = (Measurement) mapSrcDstEntities
+					.get(new EntityHolder(entityManagerSrc.loadParent(channelSrc, Measurement.class).get(),
+							entityManagerSrc))
+					.getEntity();
+
+			EntityType etChannel = modelManagerDst.getEntityType(Channel.class);
+			EntityType etMeasurement = modelManagerDst.getEntityType(Measurement.class);
+
+			Relation relMeasurement = etChannel.getRelation(etMeasurement);
+
+			if (null == relMeasurement) {
+				throw new ApiCopyException("No relation to MeaResult found at MeaQuantity!");
+			}
+
+			// Find a valid quantity with the highest version
+			/*
+			 * TODO Quantity should actually implement Versionable, then we could just use
+			 * org.eclipse.mdm.api.dflt.EntityManager.loadLatestValid(Class<T>, String) Bug:
+			 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=553368
+			 */
+
+			Quantity quantity = entityManagerDst
+					.loadAll(Quantity.class,
+							quantityMapping.getOrDefault(channelSrc.getQuantity().getName(),
+									channelSrc.getQuantity().getName()))
+					.stream().filter(q -> q.getValue(Versionable.ATTR_VERSION_STATE).extract() == VersionState.VALID)
+					.sorted(Comparator.comparing(q -> Integer.valueOf(q.getValue(Versionable.ATTR_VERSION).extract())))
+					.findFirst().orElseThrow(() -> new ApiCopyException(String
+							.format("Cannot find Quantity with name '%s' in destination!",
+									channelSrc.getQuantity().getName())));
+
+			Filter filter = Filter.nameOnly(etChannel, channelSrc.getName()).id(relMeasurement,
+					measurementParentDst.getID());
+
+			Channel channelDst = fetchOne(searchServiceDst, Channel.class, filter).orElseGet(
+					() -> entityFactoryDst.createChannel(channelSrc.getName(), measurementParentDst, quantity));
+
+			copyValues(channelSrc, channelDst, Arrays.asList("Id"), false, replaceFileLinks);
+
+			persist(transaction, channelDst);
+
+			ehDst = new EntityHolder(channelDst, entityManagerDst);
+			mapSrcDstEntities.put(ehSrc, ehDst);
+		}
+
+		return (Channel) ehDst.getEntity();
+	}
+
+	private Optional<ChannelGroup> fetchOneChannelGroup(ChannelGroup channelGroupSrc) {
+		Measurement measurementParentDst = (Measurement) mapSrcDstEntities
+				.get(new EntityHolder(entityManagerSrc.loadParent(channelGroupSrc, Measurement.class).get(),
+						entityManagerSrc))
+				.getEntity();
+		EntityType etChannelGroup = modelManagerDst.getEntityType(ChannelGroup.class);
+		EntityType etMeasurement = modelManagerDst.getEntityType(Measurement.class);
+
+		Relation relMeasurement = etChannelGroup.getRelation(etMeasurement);
+
+		if (null == relMeasurement) {
+			throw new ApiCopyException("No relation to MeaResult found at SubMatrix!");
+		}
+
+		Filter filter = Filter.nameOnly(etChannelGroup, channelGroupSrc.getName()).id(relMeasurement,
+				measurementParentDst.getID());
+
+		return fetchOne(searchServiceDst, ChannelGroup.class, filter);
+	}
+
+	private ChannelGroup copyChannelGroup(ChannelGroup channelGroupSrc, Transaction transaction, boolean append) {
+		EntityHolder ehSrc = new EntityHolder(channelGroupSrc, entityManagerSrc);
+
+		EntityHolder ehDst = mapSrcDstEntities.get(ehSrc);
+
+		if (null == ehDst) {
+			LOG.trace("Importing ChannelGroup '{}'", channelGroupSrc.getName());
+			Measurement measurementParentDst = (Measurement) mapSrcDstEntities
+					.get(new EntityHolder(entityManagerSrc.loadParent(channelGroupSrc, Measurement.class).get(),
+							entityManagerSrc))
+					.getEntity();
+
+			EntityType etChannelGroup = modelManagerDst.getEntityType(ChannelGroup.class);
+			EntityType etMeasurement = modelManagerDst.getEntityType(Measurement.class);
+
+			Relation relMeasurement = etChannelGroup.getRelation(etMeasurement);
+
+			if (null == relMeasurement) {
+				throw new ApiCopyException("No relation to MeaResult found at SubMatrix!");
+			}
+
+			Optional<ChannelGroup> channelGroupOptional = fetchOneChannelGroup(channelGroupSrc);
+
+			ChannelGroup channelGroupDst = null;
+
+			if (append && channelGroupOptional.isPresent()) {
+				transaction.delete(Collections.singletonList(channelGroupOptional.get()));
+				channelGroupDst = entityFactoryDst.createChannelGroup(channelGroupSrc.getName(),
+						channelGroupSrc.getNumberOfValues(), measurementParentDst);
+			} else {
+				channelGroupDst = channelGroupOptional
+						.orElseGet(() -> entityFactoryDst.createChannelGroup(channelGroupSrc.getName(),
+								channelGroupSrc.getNumberOfValues(), measurementParentDst));
+			}
+
+			copyValues(channelGroupSrc, channelGroupDst, Arrays.asList("Id"), false, replaceFileLinks);
+
+			persist(transaction, channelGroupDst);
+
+			ehDst = new EntityHolder(channelGroupDst, entityManagerDst);
+			mapSrcDstEntities.put(ehSrc, ehDst);
+		}
+
+		return (ChannelGroup) ehDst.getEntity();
+	}
+
+	private Optional<TemplateTest> loadTemplateTest(Test testSrc) {
+		Optional<TemplateTest> returnVal = Optional.empty();
+
+		String templateTestName = templateManager.getTemplateTestName(testSrc);
+
+		if (!Strings.isNullOrEmpty(templateTestName)) {
+			returnVal = getCurrentValidTestTemplate(entityManagerDst.loadAll(TemplateTest.class, templateTestName));
+
+		}
+
+		return returnVal;
+	}
+
+	private Optional<TemplateTest> getCurrentValidTestTemplate(List<TemplateTest> listTemplateTests) {
+		Optional<TemplateTest> returnVal = Optional.empty();
+
+		if (listTemplateTests != null && !listTemplateTests.isEmpty()) {
+			int highestVersion = -1;
+			TemplateTest highestValidTemplate = null;
+
+			for (TemplateTest templateTest : listTemplateTests) {
+				Value value = templateTest.getValue(TemplateTest.ATTR_VERSION_STATE);
+
+				if (VersionState.VALID.equals(value.extract())) {
+					int version = Integer.parseInt(templateTest.getValue(TemplateTest.ATTR_VERSION).extract());
+
+					if (version > highestVersion) {
+						highestValidTemplate = templateTest;
+						highestVersion = version;
+					}
+				}
+
+			}
+
+			if (highestValidTemplate != null) {
+				returnVal = Optional.of(highestValidTemplate);
+			}
+
+		}
+		return returnVal;
+	}
+
+	private Optional<TemplateTestStep> loadTemplateTestStep(TestStep testStepSrc) {
+		Optional<TemplateTestStep> returnVal = Optional.empty();
+
+		String templateTestStepName = templateManager.getTemplateTestStepName(testStepSrc);
+
+		if (!Strings.isNullOrEmpty(templateTestStepName)) {
+			returnVal = getCurrentValidTestStepTemplate(
+					entityManagerDst.loadAll(TemplateTestStep.class, templateTestStepName));
+		}
+
+		return returnVal;
+	}
+
+	private Optional<TemplateTestStep> getCurrentValidTestStepTemplate(List<TemplateTestStep> listTemplateTestSteps) {
+		Optional<TemplateTestStep> returnVal = Optional.empty();
+
+		if (listTemplateTestSteps != null && !listTemplateTestSteps.isEmpty()) {
+			int highestVersion = -1;
+			TemplateTestStep highestValidTemplate = null;
+
+			for (TemplateTestStep templateTestStep : listTemplateTestSteps) {
+				Value value = templateTestStep.getValue(TemplateTestStep.ATTR_VERSION_STATE);
+
+				if (VersionState.VALID.equals(value.extract())) {
+					int version = Integer.parseInt(templateTestStep.getValue(TemplateTestStep.ATTR_VERSION).extract());
+
+					if (version > highestVersion) {
+						highestValidTemplate = templateTestStep;
+						highestVersion = version;
+					}
+				}
+
+			}
+
+			if (highestValidTemplate != null) {
+				returnVal = Optional.of(highestValidTemplate);
+			}
+
+		}
+		return returnVal;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.mdm.apicopy.control.ApiCopyTask#setProperties(java.util.Map)
+	 */
+	@Override
+	public void setProperties(Map<String, String> properties) {
+		this.properties = properties;
+		this.replaceFileLinks = Boolean
+				.valueOf(this.properties.getOrDefault(PROPERTY_REPLACE_FILELINKS, DEFAULT_REPLACE_FILES));
+	}
+
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/MeasuredValuesDTO.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/MeasuredValuesDTO.java
new file mode 100644
index 0000000..abfece9
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/MeasuredValuesDTO.java
@@ -0,0 +1,51 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.control;
+
+/**
+ * DTO Object which holds the pair of values and the corresponding flags
+ * 
+ * @author Alexander Knoblauch
+ *
+ */
+public class MeasuredValuesDTO {
+
+	private final Object values;
+	private final boolean[] flags;
+
+	/**
+	 * @param values
+	 * @param flags
+	 */
+	public MeasuredValuesDTO(Object values, boolean[] flags) {
+		super();
+		this.values = values;
+		this.flags = flags;
+	}
+
+	/**
+	 * @return the values
+	 */
+	public Object getValues() {
+		return values;
+	}
+
+	/**
+	 * @return the flags
+	 */
+	public boolean[] getFlags() {
+		return flags;
+	}
+
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/MeasuredValuesHelper.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/MeasuredValuesHelper.java
new file mode 100644
index 0000000..eb12338
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/MeasuredValuesHelper.java
@@ -0,0 +1,514 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.control;
+
+import java.time.LocalDateTime;
+import java.util.Arrays;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.eclipse.mdm.api.base.model.AxisType;
+import org.eclipse.mdm.api.base.model.DoubleComplex;
+import org.eclipse.mdm.api.base.model.FileLink;
+import org.eclipse.mdm.api.base.model.FloatComplex;
+import org.eclipse.mdm.api.base.model.MeasuredValues;
+import org.eclipse.mdm.api.base.model.MeasuredValues.ValueIterator;
+import org.eclipse.mdm.api.base.model.ScalarType;
+import org.eclipse.mdm.api.base.model.SequenceRepresentation;
+
+/**
+ * Helper class for measured values operations
+ * 
+ * @author Alexander Knoblauch
+ *
+ */
+public class MeasuredValuesHelper {
+
+	/**
+	 * Map measurement values to given unit
+	 * 
+	 * @param measuredValues
+	 * @param unitNew
+	 * @return
+	 */
+	public static MeasuredValues mapUnitOfMeasuredValues(MeasuredValues measuredValues, String unitNew) {
+
+		ScalarType scalarType = measuredValues.getScalarType();
+
+		MeasuredValuesDTO values = null;
+
+		if (scalarType.isString()) {
+			values = getStringValues(measuredValues);
+		} else if (scalarType.isDate()) {
+			values = getDateValues(measuredValues);
+		} else if (scalarType.isBoolean()) {
+			values = getBooleanValues(measuredValues);
+		} else if (scalarType.isByte()) {
+			values = getByteValues(measuredValues);
+		} else if (scalarType.isShort()) {
+			values = getShortValues(measuredValues);
+		} else if (scalarType.isInteger()) {
+			values = getIntegerValues(measuredValues);
+		} else if (scalarType.isLong()) {
+			values = getLongValues(measuredValues);
+		} else if (scalarType.isFloat()) {
+			values = getFloatValues(measuredValues);
+		} else if (scalarType.isDouble()) {
+			values = getDoubleValues(measuredValues);
+		} else if (scalarType.isByteStream()) {
+			values = getByteStreamValues(measuredValues);
+		} else if (scalarType.isFloatComplex()) {
+			values = getFloatComplexValues(measuredValues);
+		} else if (scalarType.isDoubleComplex()) {
+			values = getDoubleComplexValues(measuredValues);
+		} else if (scalarType.isFileLink()) {
+			values = getFileLinkValues(measuredValues);
+		} else if (scalarType.isBlob()) {
+			values = getBlobValues(measuredValues);
+		} else {
+			throw new IllegalStateException(
+					String.format("Unsupported ScalarType %s in MeasuredValues!", scalarType.name()));
+		}
+
+		return scalarType.createMeasuredValues(measuredValues.getName(), unitNew,
+				measuredValues.getSequenceRepresentation(), measuredValues.getGenerationParameters(),
+				measuredValues.isIndependent(), measuredValues.getAxisType(), values.getValues(), values.getFlags());
+
+	}
+
+	/**
+	 * appending two measured values
+	 * 
+	 * @param measuredValues1
+	 * @param measuredValues2
+	 * @return appended measured values
+	 * @throws ApiCopyException if the {@link ScalarType}s or units are different
+	 */
+	public static MeasuredValues appenMeasuredValues(MeasuredValues measuredValues1, MeasuredValues measuredValues2) {
+		ScalarType scalarType = measuredValues1.getScalarType();
+
+		if (!scalarType.equals(measuredValues2.getScalarType())) {
+			throw new ApiCopyException("Error at appending measured values, ScalarType is different!");
+		}
+
+		if (!measuredValues1.getUnit().equals(measuredValues2.getUnit())) {
+			throw new ApiCopyException("Error at appending measured values, Unit is different!");
+		}
+
+		Object valuesNew = null;
+		boolean[] flagsNew = new boolean[0];
+
+		if (scalarType.isString()) {
+			MeasuredValuesDTO values1 = getStringValues(measuredValues1);
+			MeasuredValuesDTO values2 = getStringValues(measuredValues2);
+
+			valuesNew = ArrayUtils.addAll((String[]) values1.getValues(), (String[]) values2.getValues());
+			flagsNew = ArrayUtils.addAll(values1.getFlags(), values2.getFlags());
+		} else if (scalarType.isDate()) {
+			MeasuredValuesDTO values1 = getDateValues(measuredValues1);
+			MeasuredValuesDTO values2 = getDateValues(measuredValues2);
+
+			valuesNew = ArrayUtils.addAll((LocalDateTime[]) values1.getValues(), (LocalDateTime[]) values2.getValues());
+			flagsNew = ArrayUtils.addAll(values1.getFlags(), values2.getFlags());
+		} else if (scalarType.isBoolean()) {
+			MeasuredValuesDTO values1 = getBooleanValues(measuredValues1);
+			MeasuredValuesDTO values2 = getBooleanValues(measuredValues2);
+
+			valuesNew = ArrayUtils.addAll((boolean[]) values1.getValues(), (boolean[]) values2.getValues());
+			flagsNew = ArrayUtils.addAll(values1.getFlags(), values2.getFlags());
+		} else if (scalarType.isByte()) {
+			MeasuredValuesDTO values1 = getByteValues(measuredValues1);
+			MeasuredValuesDTO values2 = getByteValues(measuredValues2);
+
+			valuesNew = ArrayUtils.addAll((byte[]) values1.getValues(), (byte[]) values2.getValues());
+			flagsNew = ArrayUtils.addAll(values1.getFlags(), values2.getFlags());
+		} else if (scalarType.isShort()) {
+			MeasuredValuesDTO values1 = getShortValues(measuredValues1);
+			MeasuredValuesDTO values2 = getShortValues(measuredValues2);
+
+			valuesNew = ArrayUtils.addAll((short[]) values1.getValues(), (short[]) values2.getValues());
+			flagsNew = ArrayUtils.addAll(values1.getFlags(), values2.getFlags());
+		} else if (scalarType.isInteger()) {
+			MeasuredValuesDTO values1 = getIntegerValues(measuredValues1);
+			MeasuredValuesDTO values2 = getIntegerValues(measuredValues2);
+
+			valuesNew = ArrayUtils.addAll((int[]) values1.getValues(), (int[]) values2.getValues());
+			flagsNew = ArrayUtils.addAll(values1.getFlags(), values2.getFlags());
+		} else if (scalarType.isLong()) {
+			MeasuredValuesDTO values1 = getLongValues(measuredValues1);
+			MeasuredValuesDTO values2 = getLongValues(measuredValues2);
+
+			valuesNew = ArrayUtils.addAll((long[]) values1.getValues(), (long[]) values2.getValues());
+			flagsNew = ArrayUtils.addAll(values1.getFlags(), values2.getFlags());
+		} else if (scalarType.isFloat()) {
+			MeasuredValuesDTO values1 = getFloatValues(measuredValues1);
+			MeasuredValuesDTO values2 = getFloatValues(measuredValues2);
+
+			valuesNew = ArrayUtils.addAll((float[]) values1.getValues(), (float[]) values2.getValues());
+			flagsNew = ArrayUtils.addAll(values1.getFlags(), values2.getFlags());
+		} else if (scalarType.isDouble()) {
+			MeasuredValuesDTO values1 = getDoubleValues(measuredValues1);
+			MeasuredValuesDTO values2 = getDoubleValues(measuredValues2);
+
+			valuesNew = ArrayUtils.addAll((double[]) values1.getValues(), (double[]) values2.getValues());
+			flagsNew = ArrayUtils.addAll(values1.getFlags(), values2.getFlags());
+		} else if (scalarType.isByteStream()) {
+			MeasuredValuesDTO values1 = getByteStreamValues(measuredValues1);
+			MeasuredValuesDTO values2 = getByteStreamValues(measuredValues2);
+
+			valuesNew = ArrayUtils.addAll((byte[][]) values1.getValues(), (byte[][]) values2.getValues());
+			flagsNew = ArrayUtils.addAll(values1.getFlags(), values2.getFlags());
+		} else if (scalarType.isFloatComplex()) {
+			MeasuredValuesDTO values1 = getFloatComplexValues(measuredValues1);
+			MeasuredValuesDTO values2 = getFloatComplexValues(measuredValues2);
+
+			valuesNew = ArrayUtils.addAll((FloatComplex[]) values1.getValues(), (FloatComplex[]) values2.getValues());
+			flagsNew = ArrayUtils.addAll(values1.getFlags(), values2.getFlags());
+		} else if (scalarType.isDoubleComplex()) {
+			MeasuredValuesDTO values1 = getDoubleComplexValues(measuredValues1);
+			MeasuredValuesDTO values2 = getDoubleComplexValues(measuredValues2);
+
+			valuesNew = ArrayUtils.addAll((DoubleComplex[]) values1.getValues(), (DoubleComplex[]) values2.getValues());
+			flagsNew = ArrayUtils.addAll(values1.getFlags(), values2.getFlags());
+		} else if (scalarType.isFileLink()) {
+			MeasuredValuesDTO values1 = getFileLinkValues(measuredValues1);
+			MeasuredValuesDTO values2 = getFileLinkValues(measuredValues2);
+
+			valuesNew = ArrayUtils.addAll((FileLink[]) values1.getValues(), (FileLink[]) values2.getValues());
+			flagsNew = ArrayUtils.addAll(values1.getFlags(), values2.getFlags());
+		} else {
+			throw new IllegalStateException(
+					String.format("Unsupported ScalarType %s in MeasuredValues!", scalarType.name()));
+		}
+
+		return scalarType.createMeasuredValues(measuredValues1.getName(), measuredValues1.getUnit(),
+				measuredValues1.getSequenceRepresentation(), measuredValues1.getGenerationParameters(),
+				measuredValues1.isIndependent(), measuredValues1.getAxisType(), valuesNew, flagsNew);
+	}
+
+	/**
+	 * Creating MeasueredValues with only invalid values
+	 * 
+	 * @param name                   of the column
+	 * @param scalarType             the {@link ScalarType}
+	 * @param unit                   of the values
+	 * @param sequenceRepresentation the {@link SequenceRepresentation}
+	 * @param generationParameters
+	 * @param independent
+	 * @param axisType               the {@link AxisType}
+	 * @param numberOfValues         the number of the measured values
+	 * @return {@link MeasuredValues} object, which includes only invalid values
+	 */
+	public static MeasuredValues createEmptyValues(String name, ScalarType scalarType, String unit,
+			SequenceRepresentation sequenceRepresentation, double[] generationParameters, boolean independent,
+			AxisType axisType, int numberOfValues) {
+		boolean[] flags = new boolean[numberOfValues];
+		Arrays.fill(flags, false);
+
+		Object values = null;
+
+		if (scalarType.isString()) {
+			values = new String[numberOfValues];
+		} else if (scalarType.isDate()) {
+			values = new LocalDateTime[numberOfValues];
+		} else if (scalarType.isBoolean()) {
+			values = new boolean[numberOfValues];
+		} else if (scalarType.isByte()) {
+			values = new byte[numberOfValues];
+		} else if (scalarType.isShort()) {
+			values = new short[numberOfValues];
+		} else if (scalarType.isInteger()) {
+			values = new int[numberOfValues];
+		} else if (scalarType.isLong()) {
+			values = new long[numberOfValues];
+		} else if (scalarType.isFloat()) {
+			values = new float[numberOfValues];
+		} else if (scalarType.isDouble()) {
+			values = new double[numberOfValues];
+		} else if (scalarType.isByteStream()) {
+			values = new byte[numberOfValues][];
+		} else if (scalarType.isFloatComplex()) {
+			values = new FloatComplex[numberOfValues];
+		} else if (scalarType.isDoubleComplex()) {
+			values = new DoubleComplex[numberOfValues];
+		} else if (scalarType.isFileLink()) {
+			values = new FileLink[numberOfValues];
+		} else {
+			throw new IllegalStateException(
+					String.format("Unsupported ScalarType %s in MeasuredValues!", scalarType.name()));
+		}
+
+		return scalarType.createMeasuredValues(name, unit, sequenceRepresentation, generationParameters, independent,
+				axisType, values, flags);
+	}
+
+	/**
+	 * 
+	 * @param measuredValues
+	 * @return {@link MeasuredValuesDTO} values is an array of DataType
+	 *         {@link String}
+	 */
+	private static MeasuredValuesDTO getStringValues(MeasuredValues measuredValues) {
+		int length = measuredValues.getLength();
+		String[] values = new String[length];
+		boolean[] flags = new boolean[length];
+
+		ValueIterator<String> iter = measuredValues.iterator();
+		int count = 0;
+		while (iter.hasNext()) {
+			flags[count] = iter.isValid();
+			values[count++] = iter.next();
+		}
+		return new MeasuredValuesDTO(values, flags);
+	}
+
+	/**
+	 * 
+	 * @param measuredValues
+	 * @return {@link MeasuredValuesDTO} values is an array of DataType
+	 *         {@link LocalDateTime}
+	 */
+	private static MeasuredValuesDTO getDateValues(MeasuredValues measuredValues) {
+		int length = measuredValues.getLength();
+		LocalDateTime[] values = new LocalDateTime[length];
+		boolean[] flags = new boolean[length];
+		ValueIterator<LocalDateTime> iter = measuredValues.iterator();
+		int count = 0;
+		while (iter.hasNext()) {
+			flags[count] = iter.isValid();
+			values[count++] = iter.next();
+		}
+		return new MeasuredValuesDTO(values, flags);
+	}
+
+	/**
+	 * 
+	 * @param measuredValues
+	 * @return {@link MeasuredValuesDTO} values is an array of DataType boolean
+	 */
+	private static MeasuredValuesDTO getBooleanValues(MeasuredValues measuredValues) {
+		int length = measuredValues.getLength();
+		boolean[] values = new boolean[length];
+		boolean[] flags = new boolean[length];
+		ValueIterator<Boolean> iter = measuredValues.iterator();
+		int count = 0;
+		while (iter.hasNext()) {
+			flags[count] = iter.isValid();
+			values[count++] = iter.next();
+		}
+		return new MeasuredValuesDTO(values, flags);
+	}
+
+	/**
+	 * 
+	 * @param measuredValues
+	 * @return {@link MeasuredValuesDTO} values is an array of DataType byte
+	 */
+	private static MeasuredValuesDTO getByteValues(MeasuredValues measuredValues) {
+		int length = measuredValues.getLength();
+		byte[] values = new byte[length];
+		boolean[] flags = new boolean[length];
+		ValueIterator<Byte> iter = measuredValues.iterator();
+		int count = 0;
+		while (iter.hasNext()) {
+			flags[count] = iter.isValid();
+			values[count++] = iter.next();
+		}
+		return new MeasuredValuesDTO(values, flags);
+	}
+
+	/**
+	 * 
+	 * @param measuredValues
+	 * @return {@link MeasuredValuesDTO} values is an array of DataType short
+	 */
+	private static MeasuredValuesDTO getShortValues(MeasuredValues measuredValues) {
+		int length = measuredValues.getLength();
+		short[] values = new short[length];
+		boolean[] flags = new boolean[length];
+		ValueIterator<Short> iter = measuredValues.iterator();
+		int count = 0;
+		while (iter.hasNext()) {
+			flags[count] = iter.isValid();
+			values[count++] = iter.next();
+		}
+		return new MeasuredValuesDTO(values, flags);
+	}
+
+	/**
+	 * 
+	 * @param measuredValues
+	 * @return {@link MeasuredValuesDTO} values is an array of DataType long
+	 */
+	private static MeasuredValuesDTO getLongValues(MeasuredValues measuredValues) {
+		int length = measuredValues.getLength();
+		long[] values = new long[length];
+		boolean[] flags = new boolean[length];
+		ValueIterator<Long> iter = measuredValues.iterator();
+		int count = 0;
+		while (iter.hasNext()) {
+			flags[count] = iter.isValid();
+			values[count++] = iter.next();
+		}
+		return new MeasuredValuesDTO(values, flags);
+	}
+
+	/**
+	 * 
+	 * @param measuredValues
+	 * @return {@link MeasuredValuesDTO} values is an array of DataType float
+	 */
+	private static MeasuredValuesDTO getFloatValues(MeasuredValues measuredValues) {
+		int length = measuredValues.getLength();
+		float[] values = new float[length];
+		boolean[] flags = new boolean[length];
+		ValueIterator<Float> iter = measuredValues.iterator();
+		int count = 0;
+		while (iter.hasNext()) {
+			flags[count] = iter.isValid();
+			values[count++] = iter.next();
+		}
+		return new MeasuredValuesDTO(values, flags);
+	}
+
+	/**
+	 * 
+	 * @param measuredValues
+	 * @return {@link MeasuredValuesDTO} values is an array of DataType int
+	 */
+	private static MeasuredValuesDTO getIntegerValues(MeasuredValues measuredValues) {
+		int length = measuredValues.getLength();
+		int[] values = new int[length];
+		boolean[] flags = new boolean[length];
+		ValueIterator<Integer> iter = measuredValues.iterator();
+		int count = 0;
+		while (iter.hasNext()) {
+			flags[count] = iter.isValid();
+			values[count++] = iter.next();
+		}
+		return new MeasuredValuesDTO(values, flags);
+	}
+
+	/**
+	 * 
+	 * @param measuredValues
+	 * @return {@link MeasuredValuesDTO} values is an array of DataType double
+	 */
+	private static MeasuredValuesDTO getDoubleValues(MeasuredValues measuredValues) {
+		int length = measuredValues.getLength();
+		double[] values = new double[length];
+		boolean[] flags = new boolean[length];
+		ValueIterator<Double> iter = measuredValues.iterator();
+		int count = 0;
+		while (iter.hasNext()) {
+			flags[count] = iter.isValid();
+			values[count++] = iter.next();
+		}
+		return new MeasuredValuesDTO(values, flags);
+	}
+
+	/**
+	 * 
+	 * @param measuredValues
+	 * @return {@link MeasuredValuesDTO} values is an array of DataType byte[]
+	 */
+	private static MeasuredValuesDTO getByteStreamValues(MeasuredValues measuredValues) {
+		int length = measuredValues.getLength();
+		byte[][] values = new byte[length][];
+		boolean[] flags = new boolean[length];
+		ValueIterator<byte[]> iter = measuredValues.iterator();
+		int count = 0;
+		while (iter.hasNext()) {
+			flags[count] = iter.isValid();
+			values[count++] = iter.next();
+		}
+
+		return new MeasuredValuesDTO(values, flags);
+	}
+
+	/**
+	 * 
+	 * @param measuredValues
+	 * @return {@link MeasuredValuesDTO} values is an array of DataType
+	 *         {@link FloatComplex}
+	 */
+	private static MeasuredValuesDTO getFloatComplexValues(MeasuredValues measuredValues) {
+		int length = measuredValues.getLength();
+		boolean[] flags = new boolean[length];
+		FloatComplex[] values = new FloatComplex[length];
+
+		ValueIterator<FloatComplex> iter = measuredValues.iterator();
+		int count = 0;
+		while (iter.hasNext()) {
+			flags[count] = iter.isValid();
+			values[count++] = iter.next();
+		}
+
+		return new MeasuredValuesDTO(values, flags);
+	}
+
+	/**
+	 * 
+	 * @param measuredValues
+	 * @return {@link MeasuredValuesDTO} values is an array of DataType
+	 *         {@link DoubleComplex}
+	 */
+	private static MeasuredValuesDTO getDoubleComplexValues(MeasuredValues measuredValues) {
+		int length = measuredValues.getLength();
+		boolean[] flags = new boolean[length];
+		DoubleComplex[] values = new DoubleComplex[length];
+
+		ValueIterator<DoubleComplex> iter = measuredValues.iterator();
+		int count = 0;
+		while (iter.hasNext()) {
+			flags[count] = iter.isValid();
+			values[count++] = iter.next();
+		}
+
+		return new MeasuredValuesDTO(values, flags);
+	}
+
+	/**
+	 * 
+	 * @param measuredValues
+	 * @return {@link MeasuredValuesDTO} values is an array of DataType
+	 *         {@link FileLink}
+	 */
+	private static MeasuredValuesDTO getFileLinkValues(MeasuredValues measuredValues) {
+		int length = measuredValues.getLength();
+		boolean[] flags = new boolean[length];
+		FileLink[] values = new FileLink[length];
+
+		ValueIterator<FileLink> iter = measuredValues.iterator();
+		int count = 0;
+		while (iter.hasNext()) {
+			flags[count] = iter.isValid();
+			values[count++] = iter.next();
+		}
+
+		return new MeasuredValuesDTO(values, flags);
+	}
+
+	private static MeasuredValuesDTO getBlobValues(MeasuredValues measuredValues) {
+		int length = measuredValues.getLength();
+		boolean[] flags = new boolean[length];
+		ValueIterator<Object> iter = measuredValues.iterator();
+		Object values = null;
+		while (iter.hasNext()) {
+			values = iter.next();
+		}
+
+		return new MeasuredValuesDTO(values, flags);
+	}
+
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/TemplateManager.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/TemplateManager.java
new file mode 100644
index 0000000..913167b
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/TemplateManager.java
@@ -0,0 +1,47 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.control;
+
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+
+/**
+ * Resolves the test template and test step template name, which will be used for creating the test an test step
+ *
+ */
+public interface TemplateManager {
+
+	/**
+	 * 
+	 * @param testSrc the source test
+	 * @return the name of the template for the test
+	 * @throws ApiCopyException
+	 */
+	String getTemplateTestName(Test testSrc) throws ApiCopyException;
+
+	/**
+	 * 
+	 * @param testStepSrc the source test step
+	 * @return the name of the template of the teststep
+	 * @throws ApiCopyException
+	 */
+	String getTemplateTestStepName(TestStep testStepSrc) throws ApiCopyException;
+
+	/**
+	 * 
+	 * @param source the {@link ApplicationContext} of the apicopy source
+	 */
+	void setSourceContext(ApplicationContext source) throws ApiCopyException;
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/TransferBase.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/TransferBase.java
new file mode 100644
index 0000000..d4f0b1e
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/TransferBase.java
@@ -0,0 +1,545 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.control;
+
+import java.io.IOException;
+import java.nio.file.Path;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.eclipse.mdm.api.base.ServiceNotProvidedException;
+import org.eclipse.mdm.api.base.Transaction;
+import org.eclipse.mdm.api.base.adapter.ModelManager;
+import org.eclipse.mdm.api.base.file.FileService;
+import org.eclipse.mdm.api.base.massdata.AnyTypeValuesBuilder;
+import org.eclipse.mdm.api.base.massdata.ComplexNumericalValuesBuilder;
+import org.eclipse.mdm.api.base.massdata.NumericalValuesBuilder;
+import org.eclipse.mdm.api.base.massdata.WriteRequest;
+import org.eclipse.mdm.api.base.massdata.WriteRequestBuilder;
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.DoubleComplex;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.FileLink;
+import org.eclipse.mdm.api.base.model.FloatComplex;
+import org.eclipse.mdm.api.base.model.MeasuredValues;
+import org.eclipse.mdm.api.base.model.MeasuredValues.ValueIterator;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.ScalarType;
+import org.eclipse.mdm.api.base.model.SequenceRepresentation;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.api.base.query.Filter;
+import org.eclipse.mdm.api.base.search.SearchService;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.EntityFactory;
+import org.eclipse.mdm.api.dflt.model.Pool;
+import org.eclipse.mdm.api.dflt.model.Project;
+
+import com.google.common.base.Strings;
+import com.google.common.collect.LinkedListMultimap;
+import com.google.common.collect.ListMultimap;
+import com.google.common.collect.Lists;
+import com.google.common.io.Files;
+
+public abstract class TransferBase {
+	List<Class<? extends Entity>> supportedRootEntities = Arrays.asList(Project.class, Pool.class, Test.class,
+			TestStep.class, Measurement.class);
+
+	ApplicationContext contextSrc;
+	EntityManager entityManagerSrc;
+
+	ApplicationContext contextDst;
+	EntityManager entityManagerDst;
+	EntityFactory entityFactoryDst;
+	ModelManager modelManagerDst;
+	FileService fileServiceDst;
+	FileService fileServiceSrc;
+
+	Map<EntityHolder, EntityHolder> mapSrcDstEntities = new HashMap<>();
+	Map<Entity, List<FileLink>> mapFileLinksReplaced = new HashMap<>();
+	Map<Entity, List<FileLink>> mapFileLinksUploaded = new HashMap<>();
+
+	public TransferBase(ApplicationContext src, ApplicationContext dst) {
+		contextSrc = src;
+		entityManagerSrc = contextSrc.getEntityManager()
+				.orElseThrow(() -> new ServiceNotProvidedException(EntityManager.class));
+
+		contextDst = dst;
+		entityManagerDst = contextDst.getEntityManager()
+				.orElseThrow(() -> new ServiceNotProvidedException(EntityManager.class));
+		entityFactoryDst = contextDst.getEntityFactory()
+				.orElseThrow(() -> new ServiceNotProvidedException(EntityFactory.class));
+		modelManagerDst = contextDst.getModelManager()
+				.orElseThrow(() -> new ServiceNotProvidedException(ModelManager.class));
+
+		if (contextDst.getFileService().isPresent()) {
+			fileServiceDst = contextDst.getFileService().get();
+		}
+
+		if (contextSrc.getFileService().isPresent()) {
+			fileServiceSrc = contextSrc.getFileService().get();
+		}
+
+	}
+
+	ListMultimap<Class<? extends Entity>, Entity> loadParents(List<? extends Entity> entities) {
+		List<Entity> list = entities.stream().filter(e -> !isSupported(e)).collect(Collectors.toList());
+		if (!list.isEmpty()) {
+			throw new ApiCopyException("Entity " + list + " not supported!");
+		}
+		LinkedListMultimap<Class<? extends Entity>, Entity> byType = LinkedListMultimap.create();
+		entities.forEach(e -> byType.put(e.getClass(), e));
+
+		byType.get(Measurement.class)
+				.forEach(e -> byType.put(TestStep.class, entityManagerSrc.loadParent(e, TestStep.class).get()));
+		byType.get(TestStep.class)
+				.forEach(e -> byType.put(Test.class, entityManagerSrc.loadParent(e, Test.class).get()));
+		byType.get(Test.class).forEach(e -> byType.put(Pool.class, entityManagerSrc.loadParent(e, Pool.class).get()));
+		byType.get(Pool.class)
+				.forEach(e -> byType.put(Project.class, entityManagerSrc.loadParent(e, Project.class).get()));
+
+		entities.forEach(e -> byType.remove(e.getClass(), e));
+		return byType;
+	}
+
+	boolean isSupported(Entity e) {
+		return supportedRootEntities.contains(e.getClass());
+	}
+
+	<T extends Entity> Optional<T> fetchOne(SearchService searchService, Class<T> entityClass, Filter filter) {
+		List<T> results = searchService.fetch(entityClass, filter);
+
+		if (results.isEmpty()) {
+			return Optional.empty();
+		} else if (results.size() == 1) {
+			return Optional.of(results.get(0));
+		} else {
+			throw new IllegalStateException(String.format("Expected at most one instance of %s, but found %s!",
+					entityClass.getName(), results.size()));
+		}
+	}
+
+	<T extends Entity> Optional<T> fetchOne(EntityManager entityManager, Class<T> entityClass, String name) {
+		List<T> results = entityManager.loadAll(entityClass).stream().filter(entity -> entity.getName().equals(name))
+				.collect(Collectors.toList());
+
+		if (results.isEmpty()) {
+			return Optional.empty();
+		} else if (results.size() == 1) {
+			return Optional.of(results.get(0));
+		} else {
+			throw new IllegalStateException(String.format("Expected at most one instance of %s, but found %s!",
+					entityClass.getName(), results.size()));
+		}
+	}
+
+	boolean isNewEntity(Entity entity) {
+		return (Strings.isNullOrEmpty(entity.getID()) || Long.valueOf(entity.getID()) <= 0);
+	}
+
+	void persist(Transaction transaction, Entity entity) {
+		if (isNewEntity(entity)) {
+			transaction.create(Lists.newArrayList(entity));
+		} else {
+			transaction.update(Lists.newArrayList(entity));
+		}
+	}
+
+	void persist(Transaction transaction, List<? extends Entity> entities) {
+		List<Entity> newEntities = new ArrayList<>();
+		List<Entity> updateEntities = new ArrayList<>();
+		for (Entity entity : entities) {
+			if (isNewEntity(entity)) {
+				newEntities.add(entity);
+			} else {
+				updateEntities.add(entity);
+			}
+		}
+		transaction.create(newEntities);
+		transaction.update(updateEntities);
+	}
+
+	void copyValues(Entity srcEntity, Entity dstEntity, List<String> ignoredAttributes, boolean replaceFileLinks) {
+		copyValues(srcEntity, dstEntity, ignoredAttributes, false, replaceFileLinks);
+	}
+
+	void copyValues(Entity srcEntity, Entity dstEntity, List<String> ignoredAttributes, boolean onlyValid,
+			boolean replaceFileLinks) {
+		Set<String> valueNamesDst = dstEntity.getValues().keySet();
+		for (Map.Entry<String, Value> me : srcEntity.getValues().entrySet()) {
+			String key = me.getKey();
+			if (!ignoredAttributes.contains(key) && valueNamesDst.contains(key)) {
+				Value valueSrc = me.getValue();
+
+				if (onlyValid && !valueSrc.isValid()) {
+					continue;
+				}
+				Value value = dstEntity.getValue(me.getKey());
+
+				if (isFileLinkDataType(valueSrc.getValueType())) {
+					collectReplacedFileLinks(dstEntity, value, replaceFileLinks);
+
+					uploadFiles(srcEntity, dstEntity, valueSrc);
+
+					if (ValueType.FILE_LINK_SEQUENCE.equals(valueSrc.getValueType()) && !replaceFileLinks) {
+						FileLink[] existingFileLinks = value.extract(ValueType.FILE_LINK_SEQUENCE);
+						FileLink[] newFileLinks = valueSrc.extract(ValueType.FILE_LINK_SEQUENCE);
+						valueSrc.set(ArrayUtils.addAll(existingFileLinks, newFileLinks));
+					}
+
+				}
+
+				try {
+					value.set(valueSrc.extract());
+				} catch (IllegalArgumentException e) {
+					throw new ApiCopyException(
+							"Cannot set value for " + dstEntity.getName() + "." + me.getKey() + ": " + e.getMessage(),
+							e);
+				}
+				value.setValid(valueSrc.isValid());
+			}
+		}
+
+	}
+
+	private void collectReplacedFileLinks(Entity dstEntity, Value value, boolean replaceFileLinks) {
+		if (ValueType.FILE_LINK.equals(value.getValueType()) && value.isValid()) {
+			FileLink fileToDelete = value.extract();
+			mapFileLinksReplaced.put(dstEntity, Collections.singletonList(fileToDelete));
+		} else if (ValueType.FILE_LINK_SEQUENCE.equals(value.getValueType()) && replaceFileLinks) {
+			FileLink[] fileLinksToDelete = value.extract();
+			mapFileLinksReplaced.put(dstEntity, Arrays.asList(fileLinksToDelete));
+		}
+	}
+
+	/**
+	 * 
+	 * @param valueType
+	 * @return
+	 */
+	private boolean isFileLinkDataType(ValueType<?> valueType) {
+		boolean isFileDataType = false;
+
+		if (ValueType.FILE_LINK_SEQUENCE.equals(valueType) || ValueType.FILE_LINK.equals(valueType)) {
+			isFileDataType = true;
+		}
+		return isFileDataType;
+	}
+
+	/**
+	 * Uploading file of srcEntity and set the filelink to the dstEntity. Collect
+	 * additionally the uploaded FileLinks in a map
+	 * 
+	 * @param srcEntity
+	 * @param dstEntity
+	 * @param valueSrc
+	 */
+	private void uploadFiles(Entity srcEntity, Entity dstEntity, Value valueSrc) {
+		try {
+			if (fileServiceSrc != null && fileServiceDst != null) {
+
+				if (ValueType.FILE_LINK_SEQUENCE.equals(valueSrc.getValueType())) {
+
+					List<FileLink> fileLinkList = downloadSourceFiles(srcEntity,
+							Arrays.asList(valueSrc.extract(ValueType.FILE_LINK_SEQUENCE)));
+					fileServiceDst.uploadSequential(dstEntity, fileLinkList, null);
+					valueSrc.set(fileLinkList.toArray(new FileLink[fileLinkList.size()]));
+					mapFileLinksUploaded.put(dstEntity, fileLinkList);
+				} else if (ValueType.FILE_LINK.equals(valueSrc.getValueType())) {
+					FileLink fileLink = downloadSourceFile(srcEntity, valueSrc.extract(ValueType.FILE_LINK));
+					fileServiceDst.uploadSequential(dstEntity, Collections.singletonList(fileLink), null);
+					valueSrc.set(fileLink);
+					mapFileLinksUploaded.put(dstEntity, Collections.singletonList(fileLink));
+				}
+			}
+
+		} catch (IOException e) {
+			throw new ApiCopyException(e.getLocalizedMessage(), e);
+		}
+
+	}
+
+	private List<FileLink> downloadSourceFiles(Entity srcEntity, List<FileLink> fileLinkList) throws IOException {
+		List<FileLink> returnList = new ArrayList<FileLink>();
+
+		for (FileLink fileLink : fileLinkList) {
+			returnList.add(downloadSourceFile(srcEntity, fileLink));
+		}
+
+		return returnList;
+	}
+
+	private FileLink downloadSourceFile(Entity srcEntity, FileLink fileLinkSrc) throws IOException {
+		Path targetPath = Files.createTempDir().toPath();
+		Path filePathAbsolute = targetPath.resolve(fileLinkSrc.getFileName());
+		fileServiceSrc.download(srcEntity, targetPath, fileLinkSrc);
+		return FileLink.newLocal(filePathAbsolute);
+	}
+
+	WriteRequest createWriteRequest(ChannelGroup channelGroupDst, Channel channelDst, MeasuredValues measuredValues) {
+		WriteRequestBuilder wrb = WriteRequest.create(channelGroupDst, channelDst, measuredValues.getAxisType());
+		NumericalValuesBuilder builder = null;
+		SequenceRepresentation seqRep = measuredValues.getSequenceRepresentation();
+		ScalarType scalarType = measuredValues.getScalarType();
+		boolean independent = measuredValues.isIndependent();
+		double[] generationParameters = measuredValues.getGenerationParameters();
+
+		if (SequenceRepresentation.EXPLICIT.equals(seqRep) || SequenceRepresentation.EXPLICIT_EXTERNAL.equals(seqRep)) {
+			builder = wrb.explicit();
+		} else if (SequenceRepresentation.IMPLICIT_CONSTANT.equals(seqRep)) {
+			checkGenerationParameters(generationParameters, 1);
+
+			return wrb.implicitConstant(scalarType, generationParameters[0]).build();
+		} else if (SequenceRepresentation.IMPLICIT_LINEAR.equals(seqRep)) {
+			checkGenerationParameters(generationParameters, 2);
+
+			return wrb.implicitLinear(scalarType, generationParameters[0], generationParameters[1])
+					.independent(independent).build();
+		} else if (SequenceRepresentation.IMPLICIT_SAW.equals(seqRep)) {
+			checkGenerationParameters(generationParameters, 3);
+
+			return wrb
+					.implicitSaw(scalarType, generationParameters[0], generationParameters[1], generationParameters[2])
+					.build();
+		} else if (SequenceRepresentation.RAW_LINEAR.equals(seqRep)
+				|| SequenceRepresentation.RAW_LINEAR_EXTERNAL.equals(seqRep)) {
+			checkGenerationParameters(generationParameters, 2);
+
+			builder = wrb.rawLinear(generationParameters[0], generationParameters[1]);
+		} else if (SequenceRepresentation.RAW_LINEAR_CALIBRATED.equals(seqRep)
+				|| SequenceRepresentation.RAW_LINEAR_CALIBRATED_EXTERNAL.equals(seqRep)) {
+			checkGenerationParameters(generationParameters, 3);
+
+			builder = wrb.rawLinearCalibrated(generationParameters[0], generationParameters[1],
+					generationParameters[2]);
+		} else if (SequenceRepresentation.RAW_POLYNOMIAL.equals(seqRep)
+				|| SequenceRepresentation.RAW_POLYNOMIAL_EXTERNAL.equals(seqRep)) {
+			builder = wrb.rawPolynomial(generationParameters);
+		}
+
+		if (scalarType.isString()) {
+			String[] values = new String[measuredValues.getLength()];
+			boolean[] flags = new boolean[values.length];
+			ValueIterator<String> iter = measuredValues.iterator();
+			int count = 0;
+			while (iter.hasNext()) {
+				flags[count] = iter.isValid();
+				values[count++] = iter.next();
+			}
+
+			return castBuilder(builder, AnyTypeValuesBuilder.class).stringValues(values, flags).build();
+		} else if (scalarType.isDate()) {
+			LocalDateTime[] values = new LocalDateTime[measuredValues.getLength()];
+			boolean[] flags = new boolean[values.length];
+			ValueIterator<LocalDateTime> iter = measuredValues.iterator();
+			int count = 0;
+			while (iter.hasNext()) {
+				flags[count] = iter.isValid();
+				values[count++] = iter.next();
+			}
+
+			return castBuilder(builder, AnyTypeValuesBuilder.class).dateValues(values, flags).independent(independent)
+					.build();
+		} else if (scalarType.isBoolean()) {
+			boolean[] values = new boolean[measuredValues.getLength()];
+			boolean[] flags = new boolean[values.length];
+			ValueIterator<Boolean> iter = measuredValues.iterator();
+			int count = 0;
+			while (iter.hasNext()) {
+				flags[count] = iter.isValid();
+				values[count++] = iter.next();
+			}
+
+			return castBuilder(builder, AnyTypeValuesBuilder.class).booleanValues(values, flags).build();
+		} else if (scalarType.isByte()) {
+			byte[] values = new byte[measuredValues.getLength()];
+			boolean[] flags = new boolean[values.length];
+			ValueIterator<Byte> iter = measuredValues.iterator();
+			int count = 0;
+			while (iter.hasNext()) {
+				flags[count] = iter.isValid();
+				values[count++] = iter.next();
+			}
+
+			return builder.byteValues(values, flags).independent(independent).build();
+		} else if (scalarType.isShort()) {
+			short[] values = new short[measuredValues.getLength()];
+			boolean[] flags = new boolean[values.length];
+			ValueIterator<Short> iter = measuredValues.iterator();
+			int count = 0;
+			while (iter.hasNext()) {
+				flags[count] = iter.isValid();
+				values[count++] = iter.next();
+			}
+
+			return builder.shortValues(values, flags).independent(independent).build();
+		} else if (scalarType.isInteger()) {
+			int[] values = new int[measuredValues.getLength()];
+			boolean[] flags = new boolean[values.length];
+			ValueIterator<Integer> iter = measuredValues.iterator();
+			int count = 0;
+			while (iter.hasNext()) {
+				flags[count] = iter.isValid();
+				values[count++] = iter.next();
+			}
+
+			return builder.integerValues(values, flags).independent(independent).build();
+		} else if (scalarType.isLong()) {
+			long[] values = new long[measuredValues.getLength()];
+			boolean[] flags = new boolean[values.length];
+			ValueIterator<Long> iter = measuredValues.iterator();
+			int count = 0;
+			while (iter.hasNext()) {
+				flags[count] = iter.isValid();
+				values[count++] = iter.next();
+			}
+
+			return builder.longValues(values, flags).independent(independent).build();
+		} else if (scalarType.isFloat()) {
+			float[] values = new float[measuredValues.getLength()];
+			boolean[] flags = new boolean[values.length];
+			ValueIterator<Float> iter = measuredValues.iterator();
+			int count = 0;
+			while (iter.hasNext()) {
+				flags[count] = iter.isValid();
+				values[count++] = iter.next();
+			}
+
+			return builder.floatValues(values, flags).independent(independent).build();
+		} else if (scalarType.isDouble()) {
+			double[] values = new double[measuredValues.getLength()];
+			boolean[] flags = new boolean[values.length];
+			ValueIterator<Double> iter = measuredValues.iterator();
+			int count = 0;
+			while (iter.hasNext()) {
+				flags[count] = iter.isValid();
+				values[count++] = iter.next();
+			}
+
+			return builder.doubleValues(values, flags).independent(independent).build();
+		} else if (scalarType.isByteStream()) {
+			byte[][] values = new byte[measuredValues.getLength()][];
+			boolean[] flags = new boolean[values.length];
+			ValueIterator<byte[]> iter = measuredValues.iterator();
+			int count = 0;
+			while (iter.hasNext()) {
+				flags[count] = iter.isValid();
+				values[count++] = iter.next();
+			}
+
+			return castBuilder(builder, AnyTypeValuesBuilder.class).byteStreamValues(values, flags).build();
+		} else if (scalarType.isFloatComplex()) {
+			FloatComplex[] values = new FloatComplex[measuredValues.getLength()];
+			boolean[] flags = new boolean[values.length];
+			ValueIterator<FloatComplex> iter = measuredValues.iterator();
+			int count = 0;
+			while (iter.hasNext()) {
+				flags[count] = iter.isValid();
+				values[count++] = iter.next();
+			}
+
+			return castBuilder(builder, ComplexNumericalValuesBuilder.class).floatComplexValues(values, flags).build();
+		} else if (scalarType.isDoubleComplex()) {
+			DoubleComplex[] values = new DoubleComplex[measuredValues.getLength()];
+			boolean[] flags = new boolean[values.length];
+			ValueIterator<DoubleComplex> iter = measuredValues.iterator();
+			int count = 0;
+			while (iter.hasNext()) {
+				flags[count] = iter.isValid();
+				values[count++] = iter.next();
+			}
+
+			return castBuilder(builder, ComplexNumericalValuesBuilder.class).doubleComplexValues(values, flags).build();
+		} else if (scalarType.isFileLink()) {
+			FileLink[] values = new FileLink[measuredValues.getLength()];
+			boolean[] flags = new boolean[values.length];
+			ValueIterator<FileLink> iter = measuredValues.iterator();
+			int count = 0;
+			while (iter.hasNext()) {
+				flags[count] = iter.isValid();
+				values[count++] = iter.next();
+			}
+
+			return castBuilder(builder, AnyTypeValuesBuilder.class).fileLinkValues(values, flags).build();
+		} else if (scalarType.isBlob()) {
+			Object value = null;
+			ValueIterator<Object> iter = measuredValues.iterator();
+			while (iter.hasNext()) {
+				value = iter.next();
+			}
+
+			return castBuilder(builder, AnyTypeValuesBuilder.class).blobValue(value).build();
+		} else {
+			throw new IllegalStateException(
+					String.format("Unsupported ScalarType %s in MeasuredValues!", scalarType.name()));
+		}
+	}
+
+	void checkGenerationParameters(double[] generationParameters, int expectedLength) {
+		if (null == generationParameters || generationParameters.length < expectedLength) {
+			throw new IllegalStateException(String.format("Number of generation parameters is %d, expected %d!",
+					(null == generationParameters ? 0 : generationParameters.length), expectedLength));
+		}
+	}
+
+	<T extends NumericalValuesBuilder> T castBuilder(NumericalValuesBuilder builder, Class<T> cls) {
+		if (!cls.isInstance(builder)) {
+			throw new IllegalStateException(String.format(
+					"Error creating the write values builder, expected class is %s, actual class is %s (likely column data type and sequence representation mismatch)!",
+					cls.getName(), (null == builder ? "???" : builder.getClass().getName())));
+		}
+
+		return cls.cast(builder);
+	}
+
+	/**
+	 * Delete all replaced file links
+	 */
+	void deleteFilesOfReplacedFileLinks() {
+		mapFileLinksReplaced.forEach((entity, fileLinkList) -> {
+			fileServiceDst.delete(entity, fileLinkList);
+		});
+	}
+
+	void clearReplacedFileLinkCache() {
+		mapFileLinksReplaced.clear();
+	}
+
+	/**
+	 * Delete all uploaded files, is necessary if the Import will be canceled
+	 */
+	void deleteFilesOfUploadedFileLinks() {
+		mapFileLinksUploaded.forEach((entity, fileLinkList) -> {
+			fileServiceDst.delete(entity, fileLinkList);
+		});
+	}
+
+	void clearUploadedFileLinkCache() {
+		mapFileLinksUploaded.clear();
+	}
+
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/entity/ApiCopyExceptionMapper.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/entity/ApiCopyExceptionMapper.java
new file mode 100644
index 0000000..27b7280
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/entity/ApiCopyExceptionMapper.java
@@ -0,0 +1,44 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.entity;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+import javax.ws.rs.ext.Provider;
+
+import org.eclipse.mdm.apicopy.control.ApiCopyException;
+import org.eclipse.mdm.apicopy.entity.CopyStatusResponse.State;
+
+import com.google.common.base.Throwables;
+
+/**
+ * Maps {@link ApiCopyException} to a HTTP BAD Request and provides
+ * {@link CopyStatusResponse} in the payload.
+ */
+@Provider
+public class ApiCopyExceptionMapper implements javax.ws.rs.ext.ExceptionMapper<ApiCopyException> {
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public Response toResponse(ApiCopyException e) {
+		CopyStatusResponse status = new CopyStatusResponse();
+		status.setState(State.FAILED);
+		status.setMessage(e.getMessage());
+		status.setStacktrace(Throwables.getStackTraceAsString(e));
+		return Response.status(Status.BAD_REQUEST).entity(status).build();
+	}
+
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/entity/CopyStatusResponse.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/entity/CopyStatusResponse.java
new file mode 100644
index 0000000..1dfdc39
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/entity/CopyStatusResponse.java
@@ -0,0 +1,80 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.entity;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ * DTO for encapsulating the result of an api copy request.
+ *
+ */
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class CopyStatusResponse {
+
+	public enum State {
+		OK, FAILED,
+	}
+
+	private State state;
+	private String message;
+	private String stacktrace;
+
+	public CopyStatusResponse() {
+	}
+
+	/**
+	 * @param state
+	 */
+	public void setState(State state) {
+		this.state = state;
+	}
+
+	/**
+	 * @param message
+	 */
+	public void setMessage(String message) {
+		this.message = message;
+	}
+
+	/**
+	 * @param stacktrace
+	 */
+	public void setStacktrace(String stacktrace) {
+		this.stacktrace = stacktrace;
+	}
+
+	/**
+	 * @return the state
+	 */
+	public State getState() {
+		return state;
+	}
+
+	/**
+	 * @return
+	 */
+	public String getMessage() {
+		return message;
+	}
+
+	/**
+	 * @return
+	 */
+	public String getStacktrace() {
+		return stacktrace;
+	}
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/entity/DiscoverableMultiPartFeature.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/entity/DiscoverableMultiPartFeature.java
new file mode 100644
index 0000000..161965b
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/entity/DiscoverableMultiPartFeature.java
@@ -0,0 +1,33 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.entity;
+
+import javax.ws.rs.core.Feature;
+import javax.ws.rs.core.FeatureContext;
+import javax.ws.rs.ext.Provider;
+
+import org.glassfish.jersey.media.multipart.MultiPartFeature;
+
+/**
+ * Enable MultiPart feature.
+ *
+ */
+@Provider
+public class DiscoverableMultiPartFeature implements Feature {
+	@Override
+	public boolean configure(FeatureContext context) {
+		context.register(MultiPartFeature.class);
+		return true;
+	}
+}
diff --git a/org.eclipse.mdm.apicopy/src/main/resources/emptyAtfx.xml b/org.eclipse.mdm.apicopy/src/main/resources/emptyAtfx.xml
new file mode 100644
index 0000000..77ac5b5
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/main/resources/emptyAtfx.xml
@@ -0,0 +1,4380 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<atfx_file version="atfx_file: V1.1.0"
+	xmlns="http://www.asam.net/ODS/5.2/Schema"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://www.asam.net/ODS/5.2/Schema http://www.asam.net/ODS/5.2/Schema.xsd">
+	<!-- *************************************************************************************************************** 
+		* Based on ODS Base Model version * *************************************************************************************************************** -->
+	<base_model_version>asam30</base_model_version>
+	<!-- *************************************************************************************************************** 
+		* declare application model meta data * *************************************************************************************************************** -->
+
+	<application_model>
+		<!-- *************************************************************************************************************** 
+			* declare enumeration definitions * *************************************************************************************************************** -->
+		<application_enumeration>
+			<name>valid_enum</name>
+			<item>
+				<name>editing</name>
+				<value>0</value>
+			</item>
+			<item>
+				<name>valid</name>
+				<value>1</value>
+			</item>
+			<item>
+				<name>archive</name>
+				<value>2</value>
+			</item>
+		</application_enumeration>
+		<application_enumeration>
+			<name>axistype</name>
+			<item>
+				<name>Xaxis</name>
+				<value>0</value>
+			</item>
+			<item>
+				<name>Yaxis</name>
+				<value>1</value>
+			</item>
+			<item>
+				<name>Both</name>
+				<value>2</value>
+			</item>
+		</application_enumeration>
+
+		<application_element>
+			<name>Environment</name>
+			<basetype>AoEnvironment</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DateCreated</name>
+				<base_attribute>version_date</base_attribute>
+				<datatype>DT_DATE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Max_test_level</name>
+				<base_attribute>max_test_level</base_attribute>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Base_model_version</name>
+				<base_attribute>base_model_version</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>AppModelType</name>
+				<base_attribute>application_model_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>100</length>
+			</application_attribute>
+			<application_attribute>
+				<name>AppModelVersion</name>
+				<base_attribute>application_model_version</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>20</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Timezone</name>
+				<base_attribute>timezone</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>20</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MeaningOfAliases</name>
+				<base_attribute>meaning_of_aliases</base_attribute>
+				<datatype>DS_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>20</length>
+			</application_attribute>
+		</application_element>
+		<application_element>
+			<name>CatSensor</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DateCreated</name>
+				<base_attribute>version_date</base_attribute>
+				<datatype>DT_DATE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>CatTestEquipmentComp</name>
+				<ref_to>CatTestEquipmentComp</ref_to>
+				<base_relation>parent</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>CatSensor</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>CatSensorAttr</name>
+				<ref_to>CatSensorAttr</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>CatSensor</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplSensor</name>
+				<ref_to>TplSensor</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>CatSensor</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>CatSensorAttr</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValueListRef</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValueCopyable</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ActionRequestClassname</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>150</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ActionRequestParameter</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>150</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Sortindex</name>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>CatSensor</name>
+				<ref_to>CatSensor</ref_to>
+				<base_relation>parent</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>CatSensorAttr</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplSensorAttr</name>
+				<ref_to>TplSensorAttr</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>CatSensorAttr</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>CatTestEquipmentComp</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DateCreated</name>
+				<base_attribute>version_date</base_attribute>
+				<datatype>DT_DATE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValidFlag</name>
+				<datatype>DT_ENUM</datatype>
+				<enumeration_type>valid_enum</enumeration_type>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>CatTestEquipmentAttr</name>
+				<ref_to>CatTestEquipmentAttr</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>CatTestEquipmentComp</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTestEquipmentComp</name>
+				<ref_to>TplTestEquipmentComp</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>CatTestEquipmentComp</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>CatSensor</name>
+				<ref_to>CatSensor</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>CatTestEquipmentComp</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>CatTestEquipmentAttr</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValueListRef</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValueCopyable</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ActionRequestClassname</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>150</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ActionRequestParameter</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>150</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Sortindex</name>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>CatTestEquipmentComp</name>
+				<ref_to>CatTestEquipmentComp</ref_to>
+				<base_relation>parent</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>CatTestEquipmentAttr</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTestEquipmentAttr</name>
+				<ref_to>TplTestEquipmentAttr</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>CatTestEquipmentAttr</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>CatTestSequenceComp</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DateCreated</name>
+				<base_attribute>version_date</base_attribute>
+				<datatype>DT_DATE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValidFlag</name>
+				<datatype>DT_ENUM</datatype>
+				<enumeration_type>valid_enum</enumeration_type>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>CatTestSequenceAttr</name>
+				<ref_to>CatTestSequenceAttr</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>CatTestSequenceComp</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTestSequenceComp</name>
+				<ref_to>TplTestSequenceComp</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>CatTestSequenceComp</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>CatTestSequenceAttr</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValueListRef</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValueCopyable</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ActionRequestClassname</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>150</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ActionRequestParameter</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>150</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Sortindex</name>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>CatTestSequenceComp</name>
+				<ref_to>CatTestSequenceComp</ref_to>
+				<base_relation>parent</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>CatTestSequenceAttr</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTestSequenceAttr</name>
+				<ref_to>TplTestSequenceAttr</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>CatTestSequenceAttr</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>CatUnitUnderTestComp</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DateCreated</name>
+				<base_attribute>version_date</base_attribute>
+				<datatype>DT_DATE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValidFlag</name>
+				<datatype>DT_ENUM</datatype>
+				<enumeration_type>valid_enum</enumeration_type>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>CatUnitUnderTestAttr</name>
+				<ref_to>CatUnitUnderTestAttr</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>CatUnitUnderTestComp</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplUnitUnderTestComp</name>
+				<ref_to>TplUnitUnderTestComp</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>CatUnitUnderTestComp</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>CatUnitUnderTestAttr</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValueListRef</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValueCopyable</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ActionRequestClassname</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>150</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ActionRequestParameter</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>150</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Sortindex</name>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>CatUnitUnderTestComp</name>
+				<ref_to>CatUnitUnderTestComp</ref_to>
+				<base_relation>parent</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>CatUnitUnderTestAttr</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplUnitUnderTestAttr</name>
+				<ref_to>TplUnitUnderTestAttr</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>CatUnitUnderTestAttr</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TplGroup</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplGroupParent</name>
+				<ref_to>TplGroup</ref_to>
+				<base_relation>parent</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplGroupChild</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplGroupChild</name>
+				<ref_to>TplGroup</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplGroupParent</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplUnitUnderTestRoot</name>
+				<ref_to>TplUnitUnderTestRoot</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplGroup</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTestSequenceRoot</name>
+				<ref_to>TplTestSequenceRoot</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplGroup</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTestEquipmentRoot</name>
+				<ref_to>TplTestEquipmentRoot</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplGroup</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTestStep</name>
+				<ref_to>TplTestStep</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplGroup</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTest</name>
+				<ref_to>TplTest</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplGroup</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplMeaResult</name>
+				<ref_to>TplMeaResult</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplGroup</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TplMeaResult</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>150</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Version</name>
+				<base_attribute>version</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>20</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DateCreated</name>
+				<base_attribute>version_date</base_attribute>
+				<datatype>DT_DATE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValidFlag</name>
+				<datatype>DT_ENUM</datatype>
+				<enumeration_type>valid_enum</enumeration_type>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DefaultMimeType</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DefaultName</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplSubMatrix</name>
+				<ref_to>TplSubMatrix</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplMeaResult</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplGroup</name>
+				<ref_to>TplGroup</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplMeaResult</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplParameterSet</name>
+				<ref_to>TplParameterSet</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplMeaResult</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>MeaResult</name>
+				<ref_to>MeaResult</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplMeaResult</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTestStep</name>
+				<ref_to>TplTestStep</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplMeaResult</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TplSensor</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Optional</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DefaultActive</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Sortindex</name>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplTestEquipmentComp</name>
+				<ref_to>TplTestEquipmentComp</ref_to>
+				<base_relation>parent</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplSensor</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>CatSensor</name>
+				<ref_to>CatSensor</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplSensor</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>Quantity</name>
+				<ref_to>Quantity</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplSensor</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplSensorAttr</name>
+				<ref_to>TplSensorAttr</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplSensor</inverse_name>
+			</relation_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MeaQuantityValuesEditable</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MeaQuantityIndependent</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MeaQuantityAxisType</name>
+				<datatype>DT_ENUM</datatype>
+				<enumeration_type>axistype</enumeration_type>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MeaQuantityEditorPlugin</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplParameterSet</name>
+				<ref_to>TplParameterSet</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplSensor</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TplSensorAttr</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DefaultValue</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValueReadonly</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Obligatory</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplSensor</name>
+				<ref_to>TplSensor</ref_to>
+				<base_relation>parent</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplSensorAttr</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>CatSensorAttr</name>
+				<ref_to>CatSensorAttr</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplSensorAttr</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TplSubMatrix</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>150</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MinNoRows</name>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MaxNoRows</name>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplMeaResult</name>
+				<ref_to>TplMeaResult</ref_to>
+				<base_relation>parent</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplSubMatrix</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>SubMatrix</name>
+				<ref_to>SubMatrix</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplSubMatrix</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TplTest</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>100</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Version</name>
+				<base_attribute>version</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>20</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DateCreated</name>
+				<base_attribute>version_date</base_attribute>
+				<datatype>DT_DATE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>NameHelperClassname</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DataSourcePluginClassnames</name>
+				<datatype>DS_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>TestOrderActionClassnames</name>
+				<datatype>DS_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValidFlag</name>
+				<datatype>DT_ENUM</datatype>
+				<enumeration_type>valid_enum</enumeration_type>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>Tests</name>
+				<ref_to>Test</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplTest</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTestStepUsage</name>
+				<ref_to>TplTestStepUsage</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplTest</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplGroup</name>
+				<ref_to>TplGroup</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplTest</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TplTestEquipmentAttr</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DefaultValue</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValueReadonly</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Obligatory</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplTestEquipmentComp</name>
+				<ref_to>TplTestEquipmentComp</ref_to>
+				<base_relation>parent</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplTestEquipmentAttr</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>CatTestEquipmentAttr</name>
+				<ref_to>CatTestEquipmentAttr</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplTestEquipmentAttr</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TplTestEquipmentRoot</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>100</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Version</name>
+				<base_attribute>version</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>20</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DateCreated</name>
+				<base_attribute>version_date</base_attribute>
+				<datatype>DT_DATE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValidFlag</name>
+				<datatype>DT_ENUM</datatype>
+				<enumeration_type>valid_enum</enumeration_type>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplTestEquipmentComp</name>
+				<ref_to>TplTestEquipmentComp</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplTestEquipmentRoot</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTestStep</name>
+				<ref_to>TplTestStep</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplTestEquipmentRoot</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TestEquipment</name>
+				<ref_to>TestEquipment</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplTestEquipmentRoot</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplGroup</name>
+				<ref_to>TplGroup</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplTestEquipmentRoot</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TplTestEquipmentComp</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Optional</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DefaultActive</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>TestStepSeriesVariable</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Sortindex</name>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplTestEquipmentRoot</name>
+				<ref_to>TplTestEquipmentRoot</ref_to>
+				<base_relation>parent</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplTestEquipmentComp</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplCompParent</name>
+				<ref_to>TplTestEquipmentComp</ref_to>
+				<base_relation>parent</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplCompChildren</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>CatTestEquipmentComp</name>
+				<ref_to>CatTestEquipmentComp</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplTestEquipmentComp</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplCompChildren</name>
+				<ref_to>TplTestEquipmentComp</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplCompParent</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTestEquipmentAttr</name>
+				<ref_to>TplTestEquipmentAttr</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplTestEquipmentComp</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplSensor</name>
+				<ref_to>TplSensor</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplTestEquipmentComp</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TplTestSequenceAttr</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DefaultValue</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValueReadonly</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Obligatory</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplTestSequenceComp</name>
+				<ref_to>TplTestSequenceComp</ref_to>
+				<base_relation>parent</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplTestSequenceAttr</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>CatTestSequenceAttr</name>
+				<ref_to>CatTestSequenceAttr</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplTestSequenceAttr</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TplTestSequenceRoot</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>100</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Version</name>
+				<base_attribute>version</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>20</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DateCreated</name>
+				<base_attribute>version_date</base_attribute>
+				<datatype>DT_DATE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValidFlag</name>
+				<datatype>DT_ENUM</datatype>
+				<enumeration_type>valid_enum</enumeration_type>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplTestSequenceComp</name>
+				<ref_to>TplTestSequenceComp</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplTestSequenceRoot</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTestStep</name>
+				<ref_to>TplTestStep</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplTestSequenceRoot</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TestSequence</name>
+				<ref_to>TestSequence</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplTestSequenceRoot</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplGroup</name>
+				<ref_to>TplGroup</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplTestSequenceRoot</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TplTestSequenceComp</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Optional</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DefaultActive</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>TestStepSeriesVariable</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Sortindex</name>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplTestSequenceRoot</name>
+				<ref_to>TplTestSequenceRoot</ref_to>
+				<base_relation>parent</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplTestSequenceComp</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplCompParent</name>
+				<ref_to>TplTestSequenceComp</ref_to>
+				<base_relation>parent</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplCompChildren</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>CatTestSequenceComp</name>
+				<ref_to>CatTestSequenceComp</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplTestSequenceComp</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplCompChildren</name>
+				<ref_to>TplTestSequenceComp</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplCompParent</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTestSequenceAttr</name>
+				<ref_to>TplTestSequenceAttr</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplTestSequenceComp</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TplTestStepUsage</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DefaultActive</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Optional</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Sortindex</name>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplTest</name>
+				<ref_to>TplTest</ref_to>
+				<base_relation>parent</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplTestStepUsage</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTestStep</name>
+				<ref_to>TplTestStep</ref_to>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplTestStepUsage</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TplUnitUnderTestAttr</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DefaultValue</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValueReadonly</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Obligatory</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplUnitUnderTestComp</name>
+				<ref_to>TplUnitUnderTestComp</ref_to>
+				<base_relation>parent</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplUnitUnderTestAttr</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>CatUnitUnderTestAttr</name>
+				<ref_to>CatUnitUnderTestAttr</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplUnitUnderTestAttr</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TplUnitUnderTestRoot</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>100</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Version</name>
+				<base_attribute>version</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>20</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DateCreated</name>
+				<base_attribute>version_date</base_attribute>
+				<datatype>DT_DATE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValidFlag</name>
+				<datatype>DT_ENUM</datatype>
+				<enumeration_type>valid_enum</enumeration_type>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplUnitUnderTestComp</name>
+				<ref_to>TplUnitUnderTestComp</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplUnitUnderTestRoot</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTestStep</name>
+				<ref_to>TplTestStep</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplUnitUnderTestRoot</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>UnitUnderTest</name>
+				<ref_to>UnitUnderTest</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplUnitUnderTestRoot</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplGroup</name>
+				<ref_to>TplGroup</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplUnitUnderTestRoot</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TplTestStep</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>100</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Version</name>
+				<base_attribute>version</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>20</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DateCreated</name>
+				<base_attribute>version_date</base_attribute>
+				<datatype>DT_DATE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValidFlag</name>
+				<datatype>DT_ENUM</datatype>
+				<enumeration_type>valid_enum</enumeration_type>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplUnitUnderTestRoot</name>
+				<ref_to>TplUnitUnderTestRoot</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplTestStep</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTestEquipmentRoot</name>
+				<ref_to>TplTestEquipmentRoot</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplTestStep</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTestSequenceRoot</name>
+				<ref_to>TplTestSequenceRoot</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplTestStep</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TestSteps</name>
+				<ref_to>TestStep</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplTestStep</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTestStepUsage</name>
+				<ref_to>TplTestStepUsage</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplTestStep</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplGroup</name>
+				<ref_to>TplGroup</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplTestStep</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplMeaResult</name>
+				<ref_to>TplMeaResult</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplTestStep</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TplUnitUnderTestComp</name>
+			<basetype>AoAny</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Optional</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DefaultActive</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>TestStepSeriesVariable</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Sortindex</name>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplUnitUnderTestRoot</name>
+				<ref_to>TplUnitUnderTestRoot</ref_to>
+				<base_relation>parent</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplUnitUnderTestComp</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplCompParent</name>
+				<ref_to>TplUnitUnderTestComp</ref_to>
+				<base_relation>parent</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplCompChildren</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>CatUnitUnderTestComp</name>
+				<ref_to>CatUnitUnderTestComp</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplUnitUnderTestComp</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplCompChildren</name>
+				<ref_to>TplUnitUnderTestComp</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplCompParent</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplUnitUnderTestAttr</name>
+				<ref_to>TplUnitUnderTestAttr</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplUnitUnderTestComp</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>PhysDimension</name>
+			<basetype>AoPhysicalDimension</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Length</name>
+				<base_attribute>length_exp</base_attribute>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Mass</name>
+				<base_attribute>mass_exp</base_attribute>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Time</name>
+				<base_attribute>time_exp</base_attribute>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Current</name>
+				<base_attribute>current_exp</base_attribute>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Temperature</name>
+				<base_attribute>temperature_exp</base_attribute>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MolarAmount</name>
+				<base_attribute>molar_amount_exp</base_attribute>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>LuminousIntensity</name>
+				<base_attribute>luminous_intensity_exp</base_attribute>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>angle</name>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>Units</name>
+				<ref_to>Unit</ref_to>
+				<base_relation>units</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>PhysDimension</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>Project</name>
+			<basetype>AoTest</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>StructureLevel</name>
+				<ref_to>StructureLevel</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>Project</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>ResultParameterSet</name>
+			<basetype>AoParameterSet</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Version</name>
+				<base_attribute>version</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>MeaResult</name>
+				<ref_to>MeaResult</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>ResultParameterSet</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>MeaQuantity</name>
+				<ref_to>MeaQuantity</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>ResultParameterSet</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>ResultParameter</name>
+				<ref_to>ResultParameter</ref_to>
+				<base_relation>parameters</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>ResultParameterSet</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>Role</name>
+			<basetype>AoUserGroup</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>SuperuserFlag</name>
+				<base_attribute>superuser_flag</base_attribute>
+				<datatype>DT_SHORT</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>groups2users</name>
+				<ref_to>User</ref_to>
+				<base_relation>users</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>users2groups</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TestEquipment</name>
+			<basetype>AoTestEquipment</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>100</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Version</name>
+				<base_attribute>version</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>20</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplTestEquipmentRoot</name>
+				<ref_to>TplTestEquipmentRoot</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TestEquipment</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TestSteps</name>
+				<ref_to>TestStep</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TestEquipment</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>MeaResults</name>
+				<ref_to>MeaResult</ref_to>
+				<base_relation>measurement</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TestEquipment</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TestSequence</name>
+			<basetype>AoTestSequence</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>100</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Version</name>
+				<base_attribute>version</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>20</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplTestSequenceRoot</name>
+				<ref_to>TplTestSequenceRoot</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TestSequence</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TestSteps</name>
+				<ref_to>TestStep</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TestSequence</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>MeaResults</name>
+				<ref_to>MeaResult</ref_to>
+				<base_relation>measurement</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TestSequence</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TplParameterSet</name>
+			<basetype>AoParameterSet</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Version</name>
+				<base_attribute>version</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplMeaResult</name>
+				<ref_to>TplMeaResult</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplParameterSet</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplParameter</name>
+				<ref_to>TplParameter</ref_to>
+				<base_relation>parameters</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TplParameterSet</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplSensor</name>
+				<ref_to>TplSensor</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplParameterSet</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>Unit</name>
+			<basetype>AoUnit</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DateCreated</name>
+				<base_attribute>version_date</base_attribute>
+				<datatype>DT_DATE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Factor</name>
+				<base_attribute>factor</base_attribute>
+				<datatype>DT_DOUBLE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Offset</name>
+				<base_attribute>offset</base_attribute>
+				<datatype>DT_DOUBLE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>dB</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>dB_reference_factor</name>
+				<datatype>DT_FLOAT</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>PhysDimension</name>
+				<ref_to>PhysDimension</ref_to>
+				<base_relation>phys_dimension</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>Units</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>Quantities</name>
+				<ref_to>Quantity</ref_to>
+				<base_relation>quantities</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>Unit</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>MeaQuantities</name>
+				<ref_to>MeaQuantity</ref_to>
+				<base_relation>measurement_quantities</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>Unit</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>ResultParameter</name>
+				<ref_to>ResultParameter</ref_to>
+				<base_relation>parameters</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>Unit</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplParameter</name>
+				<ref_to>TplParameter</ref_to>
+				<base_relation>parameters</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>Unit</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>Quantity</name>
+			<basetype>AoQuantity</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>150</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Version</name>
+				<base_attribute>version</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>20</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DateCreated</name>
+				<base_attribute>version_date</base_attribute>
+				<datatype>DT_DATE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DefaultRank</name>
+				<base_attribute>default_rank</base_attribute>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DefDimension</name>
+				<base_attribute>default_dimension</base_attribute>
+				<datatype>DS_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DefTypeSize</name>
+				<base_attribute>default_type_size</base_attribute>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DefMQName</name>
+				<base_attribute>default_mq_name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DefDataType</name>
+				<base_attribute>default_datatype</base_attribute>
+				<datatype>DT_ENUM</datatype>
+				<enumeration_type>datatype_enum</enumeration_type>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValidFlag</name>
+				<datatype>DT_ENUM</datatype>
+				<enumeration_type>valid_enum</enumeration_type>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>Unit</name>
+				<ref_to>Unit</ref_to>
+				<base_relation>default_unit</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>Quantities</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>MeaQuantities</name>
+				<ref_to>MeaQuantity</ref_to>
+				<base_relation>measurement_quantities</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>Quantity</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplSensor</name>
+				<ref_to>TplSensor</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>Quantity</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>UnitUnderTest</name>
+			<basetype>AoUnitUnderTest</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>100</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Version</name>
+				<base_attribute>version</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>20</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplUnitUnderTestRoot</name>
+				<ref_to>TplUnitUnderTestRoot</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>UnitUnderTest</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TestSteps</name>
+				<ref_to>TestStep</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>UnitUnderTest</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>MeaResults</name>
+				<ref_to>MeaResult</ref_to>
+				<base_relation>measurement</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>UnitUnderTest</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>User</name>
+			<basetype>AoUser</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Password</name>
+				<base_attribute>password</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>GivenName</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Surname</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Department</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Telephone</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>E-Mail</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>Tests</name>
+				<ref_to>Test</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>ResponsiblePerson</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>users2groups</name>
+				<ref_to>Role</ref_to>
+				<base_relation>groups</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>groups2users</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>ResultParameter</name>
+			<basetype>AoParameter</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DataType</name>
+				<base_attribute>parameter_datatype</base_attribute>
+				<datatype>DT_ENUM</datatype>
+				<enumeration_type>datatype_enum</enumeration_type>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Value</name>
+				<base_attribute>pvalue</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>ResultParameterSet</name>
+				<ref_to>ResultParameterSet</ref_to>
+				<base_relation>parameter_set</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>ResultParameter</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>SubMatrix</name>
+				<ref_to>SubMatrix</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>ResultParameter</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>Unit</name>
+				<ref_to>Unit</ref_to>
+				<base_relation>unit</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>ResultParameter</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>StructureLevel</name>
+			<basetype>AoSubTest</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>Project</name>
+				<ref_to>Project</ref_to>
+				<base_relation>parent_test</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>StructureLevel</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>Tests</name>
+				<ref_to>Test</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>StructureLevel</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TplParameter</name>
+			<basetype>AoParameter</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>50</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DefaultDataType</name>
+				<base_attribute>parameter_datatype</base_attribute>
+				<datatype>DT_ENUM</datatype>
+				<enumeration_type>datatype_enum</enumeration_type>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DefaultValue</name>
+				<base_attribute>pvalue</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>254</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TplParameterSet</name>
+				<ref_to>TplParameterSet</ref_to>
+				<base_relation>parameter_set</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplParameter</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>Unit</name>
+				<ref_to>Unit</ref_to>
+				<base_relation>unit</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TplParameter</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>Test</name>
+			<basetype>AoSubTest</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>100</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DateCreated</name>
+				<base_attribute>version_date</base_attribute>
+				<datatype>DT_DATE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DateClosed</name>
+				<datatype>DT_DATE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MDMLinks</name>
+				<base_attribute>external_references</base_attribute>
+				<datatype>DS_EXTERNALREFERENCE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>254</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>StructureLevel</name>
+				<ref_to>StructureLevel</ref_to>
+				<base_relation>parent_test</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>Tests</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>ResponsiblePerson</name>
+				<ref_to>User</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>Tests</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTest</name>
+				<ref_to>TplTest</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>Tests</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TestSteps</name>
+				<ref_to>TestStep</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>Test</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>TestStep</name>
+			<basetype>AoSubTest</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>100</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DateCreated</name>
+				<base_attribute>version_date</base_attribute>
+				<datatype>DT_DATE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Optional</name>
+				<datatype>DT_BOOLEAN</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Sortindex</name>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MDMLinks</name>
+				<base_attribute>external_references</base_attribute>
+				<datatype>DS_EXTERNALREFERENCE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>254</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>Test</name>
+				<ref_to>Test</ref_to>
+				<base_relation>parent_test</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TestSteps</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplTestStep</name>
+				<ref_to>TplTestStep</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TestSteps</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TestEquipment</name>
+				<ref_to>TestEquipment</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TestSteps</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>UnitUnderTest</name>
+				<ref_to>UnitUnderTest</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TestSteps</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TestSequence</name>
+				<ref_to>TestSequence</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>TestSteps</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>MeaResults</name>
+				<ref_to>MeaResult</ref_to>
+				<base_relation>children</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>TestStep</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>MeaResult</name>
+			<basetype>AoMeasurement</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>100</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DateCreated</name>
+				<base_attribute>version_date</base_attribute>
+				<datatype>DT_DATE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MeasurementBegin</name>
+				<base_attribute>measurement_begin</base_attribute>
+				<datatype>DT_DATE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MeasurementEnd</name>
+				<base_attribute>measurement_end</base_attribute>
+				<datatype>DT_DATE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>30</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MDMLinks</name>
+				<base_attribute>external_references</base_attribute>
+				<datatype>DS_EXTERNALREFERENCE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>254</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>TestStep</name>
+				<ref_to>TestStep</ref_to>
+				<base_relation>test</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>MeaResults</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TestEquipment</name>
+				<ref_to>TestEquipment</ref_to>
+				<base_relation>equipments</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>MeaResults</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>UnitUnderTest</name>
+				<ref_to>UnitUnderTest</ref_to>
+				<base_relation>units_under_test</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>MeaResults</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TestSequence</name>
+				<ref_to>TestSequence</ref_to>
+				<base_relation>sequences</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>MeaResults</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>MeaQuantities</name>
+				<ref_to>MeaQuantity</ref_to>
+				<base_relation>measurement_quantities</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>MeaResult</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>SubMatrices</name>
+				<ref_to>SubMatrix</ref_to>
+				<base_relation>submatrices</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>MeaResult</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>ResultParameterSet</name>
+				<ref_to>ResultParameterSet</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>MeaResult</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplMeaResult</name>
+				<ref_to>TplMeaResult</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>MeaResult</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>MeaQuantity</name>
+			<basetype>AoMeasurementQuantity</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>150</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Description</name>
+				<base_attribute>description</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>500</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Interpolation</name>
+				<base_attribute>interpolation</base_attribute>
+				<datatype>DT_ENUM</datatype>
+				<enumeration_type>interpolation_enum</enumeration_type>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>DataType</name>
+				<base_attribute>datatype</base_attribute>
+				<datatype>DT_ENUM</datatype>
+				<enumeration_type>datatype_enum</enumeration_type>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Rank</name>
+				<base_attribute>rank</base_attribute>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Dimension</name>
+				<base_attribute>dimension</base_attribute>
+				<datatype>DS_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>TypeSize</name>
+				<base_attribute>type_size</base_attribute>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Minimum</name>
+				<base_attribute>minimum</base_attribute>
+				<datatype>DT_DOUBLE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Maximum</name>
+				<base_attribute>maximum</base_attribute>
+				<datatype>DT_DOUBLE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Average</name>
+				<base_attribute>average</base_attribute>
+				<datatype>DT_DOUBLE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Deviation</name>
+				<base_attribute>standard_deviation</base_attribute>
+				<datatype>DT_DOUBLE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>non_reference_channel_name</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>128</length>
+			</application_attribute>
+			<application_attribute>
+				<name>reference_channel_name</name>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>128</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>MeaResult</name>
+				<ref_to>MeaResult</ref_to>
+				<base_relation>measurement</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>MeaQuantities</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>Quantity</name>
+				<ref_to>Quantity</ref_to>
+				<base_relation>quantity</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>MeaQuantities</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>Unit</name>
+				<ref_to>Unit</ref_to>
+				<base_relation>unit</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>MeaQuantities</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>LocalColumns</name>
+				<ref_to>LocalColumn</ref_to>
+				<base_relation>local_columns</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>MeaQuantity</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>ResultParameterSet</name>
+				<ref_to>ResultParameterSet</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>MeaQuantity</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>SubMatrix</name>
+			<basetype>AoSubmatrix</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>150</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>SubMatrixNoRows</name>
+				<base_attribute>number_of_rows</base_attribute>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>MeaResult</name>
+				<ref_to>MeaResult</ref_to>
+				<base_relation>measurement</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>SubMatrices</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>x-axis-for-y-axis</name>
+				<ref_to>SubMatrix</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>y-axis-for-x-axis</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>z-axis-for-y-axis</name>
+				<ref_to>SubMatrix</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>y-axis-for-z-axis</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>y-axis-for-x-axis</name>
+				<ref_to>SubMatrix</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>x-axis-for-y-axis</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>y-axis-for-z-axis</name>
+				<ref_to>SubMatrix</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>z-axis-for-y-axis</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>ResultParameter</name>
+				<ref_to>ResultParameter</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>SubMatrix</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>LocalColumns</name>
+				<ref_to>LocalColumn</ref_to>
+				<base_relation>local_columns</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>SubMatrix</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>TplSubMatrix</name>
+				<ref_to>TplSubMatrix</ref_to>
+				<min_occurs>0</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>SubMatrix</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>LocalColumn</name>
+			<basetype>AoLocalColumn</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>150</length>
+			</application_attribute>
+			<application_attribute>
+				<name>MimeType</name>
+				<base_attribute>mime_type</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>IndependentFlag</name>
+				<base_attribute>independent</base_attribute>
+				<datatype>DT_SHORT</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>SequenceRepresentation</name>
+				<base_attribute>sequence_representation</base_attribute>
+				<datatype>DT_ENUM</datatype>
+				<enumeration_type>seq_rep_enum</enumeration_type>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>GlobalFlag</name>
+				<base_attribute>global_flag</base_attribute>
+				<datatype>DT_SHORT</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Values</name>
+				<base_attribute>values</base_attribute>
+			</application_attribute>
+			<application_attribute>
+				<name>Flags</name>
+				<base_attribute>flags</base_attribute>
+			</application_attribute>
+			<application_attribute>
+				<name>GenerationParameters</name>
+				<base_attribute>generation_parameters</base_attribute>
+				<datatype>DS_DOUBLE</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>RawDatatype</name>
+				<base_attribute>raw_datatype</base_attribute>
+				<datatype>DT_ENUM</datatype>
+				<enumeration_type>datatype_enum</enumeration_type>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>axistype</name>
+				<datatype>DT_ENUM</datatype>
+				<enumeration_type>axistype</enumeration_type>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>SubMatrix</name>
+				<ref_to>SubMatrix</ref_to>
+				<base_relation>submatrix</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>LocalColumns</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>MeaQuantity</name>
+				<ref_to>MeaQuantity</ref_to>
+				<base_relation>measurement_quantity</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>LocalColumns</inverse_name>
+			</relation_attribute>
+			<relation_attribute>
+				<name>ExternalComponent</name>
+				<ref_to>ExternalComponent</ref_to>
+				<base_relation>external_component</base_relation>
+				<min_occurs>0</min_occurs>
+				<max_occurs>Many</max_occurs>
+				<inverse_name>LocalColumn</inverse_name>
+			</relation_attribute>
+		</application_element>
+		<application_element>
+			<name>ExternalComponent</name>
+			<basetype>AoExternalComponent</basetype>
+			<application_attribute>
+				<name>Id</name>
+				<base_attribute>id</base_attribute>
+				<datatype>DT_LONGLONG</datatype>
+				<autogenerate>true</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>true</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Name</name>
+				<base_attribute>name</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>150</length>
+			</application_attribute>
+			<application_attribute>
+				<name>OrdinalNumber</name>
+				<base_attribute>ordinal_number</base_attribute>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>TypeSpecification</name>
+				<base_attribute>value_type</base_attribute>
+				<datatype>DT_ENUM</datatype>
+				<enumeration_type>typespec_enum</enumeration_type>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Length</name>
+				<base_attribute>component_length</base_attribute>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>StartOffset</name>
+				<base_attribute>start_offset</base_attribute>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>Blocksize</name>
+				<base_attribute>block_size</base_attribute>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValuesPerBlock</name>
+				<base_attribute>valuesperblock</base_attribute>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>ValueOffset</name>
+				<base_attribute>value_offset</base_attribute>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<application_attribute>
+				<name>FilenameURL</name>
+				<base_attribute>filename_url</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>true</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>FlagsFilenameURL</name>
+				<base_attribute>flags_filename_url</base_attribute>
+				<datatype>DT_STRING</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>256</length>
+			</application_attribute>
+			<application_attribute>
+				<name>FlagsStartOffset</name>
+				<base_attribute>flags_start_offset</base_attribute>
+				<datatype>DT_LONG</datatype>
+				<autogenerate>false</autogenerate>
+				<obligatory>false</obligatory>
+				<unique>false</unique>
+				<length>1</length>
+			</application_attribute>
+			<relation_attribute>
+				<name>LocalColumn</name>
+				<ref_to>LocalColumn</ref_to>
+				<base_relation>local_column</base_relation>
+				<min_occurs>1</min_occurs>
+				<max_occurs>1</max_occurs>
+				<inverse_name>ExternalComponent</inverse_name>
+			</relation_attribute>
+		</application_element>
+	</application_model>
+	<!-- *************************************************************************************************************** 
+		* end application model meta data * *************************************************************************************************************** -->
+	<!-- *************************************************************************************************************** 
+		* Instance Data is NOT validated with Base Schema * *************************************************************************************************************** -->
+
+	<instance_data>
+		<Environment>
+			<Id>1</Id>
+			<Name>MDM</Name>
+			<MimeType>application/x-asam.aoenvironment</MimeType>
+			<Description>MDM Environment</Description>
+			<DateCreated>20120214120000</DateCreated>
+			<Max_test_level>4</Max_test_level>
+			<Base_model_version>asam30</Base_model_version>
+			<AppModelType>ASAM_SECURITY,ASAM_NVH,ASAM_WORKFLOW,MDM</AppModelType>
+			<AppModelVersion>4.4.1</AppModelVersion>
+			<Timezone>GMT</Timezone>
+			<MeaningOfAliases>
+				<s>,language=en</s>
+				<s>,language=de</s>
+			</MeaningOfAliases>
+		</Environment>
+	</instance_data>
+</atfx_file>
\ No newline at end of file
diff --git a/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/FileUtils.java b/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/FileUtils.java
new file mode 100644
index 0000000..18dc44e
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/FileUtils.java
@@ -0,0 +1,54 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.apicopy;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Comparator;
+
+public class FileUtils {
+	/**
+	 * Writes inputstream to file
+	 * 
+	 * @param file
+	 * @param inputstream
+	 * @throws IOException
+	 */
+	public static void writeToFile(Path file, InputStream inputstream) throws IOException {
+		try (OutputStream out = new FileOutputStream(file.toFile())) {
+			int read = 0;
+			byte[] bytes = new byte[1024];
+
+			while ((read = inputstream.read(bytes)) != -1) {
+				out.write(bytes, 0, read);
+			}
+		}
+	}
+
+	/**
+	 * Deletes a directory.
+	 * 
+	 * @param pathToBeDeleted directory to delete
+	 * @throws IOException
+	 */
+	public static void deleteDirectory(java.nio.file.Path pathToBeDeleted) throws IOException {
+		Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
+	}
+}
diff --git a/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/boundary/ExportResourceTest.java b/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/boundary/ExportResourceTest.java
new file mode 100644
index 0000000..6a58488
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/boundary/ExportResourceTest.java
@@ -0,0 +1,175 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.boundary;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Arrays;
+
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.core.Application;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.apicopy.entity.ApiCopyExceptionMapper;
+import org.eclipse.mdm.shoppingbasket.entity.BasketItem;
+import org.eclipse.mdm.shoppingbasket.entity.ShoppingBasket;
+import org.glassfish.hk2.utilities.binding.AbstractBinder;
+import org.glassfish.jersey.media.multipart.MultiPartFeature;
+import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.test.JerseyTest;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+public class ExportResourceTest extends JerseyTest {
+
+	@Mock
+	private ExportService mockedExportService;
+
+	private static final String EXPORT_RESOURCE = "export";
+
+	@Override
+	public Application configure() {
+		MockitoAnnotations.initMocks(this);
+
+		return new ResourceConfig().register(new ExportResource(mockedExportService)).register(MultiPartFeature.class)
+				.register(ApiCopyExceptionMapper.class).register(new AbstractBinder() {
+					@Override
+					protected void configure() {
+						bind(mockedExportService).to(ExportService.class);
+					}
+				});
+	}
+
+	@Test
+	public void testExport() throws IOException {
+		Path exportFolder = Files.createTempDirectory("exportAtfx");
+		Path exportAtfx = exportFolder.resolve("export.atfx");
+		Files.write(exportAtfx, "test".getBytes());
+
+		when(mockedExportService.exportAtfx(any())).thenReturn(exportFolder);
+
+		BasketItem item = new BasketItem();
+		item.setSource("ENV");
+		item.setRestURI(URI.create("environments/ENV/tests/10"));
+		ShoppingBasket basket = new ShoppingBasket();
+		basket.setItems(Arrays.asList(item));
+
+		Response r = getClient().target(getBaseUri()).path(EXPORT_RESOURCE).request()
+				.post(Entity.entity(basket, MediaType.APPLICATION_XML_TYPE));
+
+		try {
+			assertThat(exportAtfx.toFile()).doesNotExist();
+			assertThat(r.readEntity(String.class)).isEqualTo("test");
+			assertThat(r.getStatus()).isEqualTo(Status.OK.getStatusCode());
+			assertThat(r.getMediaType().toString()).isEqualTo(MediaType.APPLICATION_XML);
+		} finally {
+			r.close();
+		}
+	}
+
+	@Test
+	public void testExportMultipleFiles() throws IOException, InterruptedException {
+		Path exportFolder = Files.createTempDirectory("exportAtfx");
+		Path exportAtfx = exportFolder.resolve("export.atfx");
+		Files.write(exportAtfx, "test".getBytes());
+		Path exportBin = exportFolder.resolve("export.bin");
+		Files.write(exportBin, "test".getBytes());
+
+		when(mockedExportService.exportAtfx(any())).thenReturn(exportFolder);
+
+		BasketItem item = new BasketItem();
+		item.setSource("ENV");
+		item.setRestURI(URI.create("environments/ENV/tests/10"));
+		ShoppingBasket basket = new ShoppingBasket();
+		basket.setItems(Arrays.asList(item));
+
+		Response r = getClient().target(getBaseUri()).path(EXPORT_RESOURCE).request()
+				.post(Entity.entity(basket, MediaType.APPLICATION_XML_TYPE));
+
+		try {
+			assertThat(r.readEntity(String.class)).isNotEmpty();
+
+			assertThat(r.getStatus()).isEqualTo(Status.OK.getStatusCode());
+			assertThat(r.getMediaType().toString()).isEqualTo("application/zip");
+		} finally {
+			r.close();
+		}
+		Thread.sleep(500L);
+		assertThat(exportAtfx.toFile()).doesNotExist();
+		assertThat(exportBin.toFile()).doesNotExist();
+	}
+
+	@Test
+	public void testExportAtfxFile() throws IOException {
+		Path exportFolder = Files.createTempDirectory("exportAtfx");
+		Path exportAtfx = exportFolder.resolve("export.atfx");
+		Files.write(exportAtfx, "test".getBytes());
+
+		when(mockedExportService.exportAtfx(any())).thenReturn(exportFolder);
+
+		BasketItem item = new BasketItem();
+		item.setSource("ENV");
+		item.setRestURI(URI.create("environments/ENV/tests/10"));
+		ShoppingBasket basket = new ShoppingBasket();
+		basket.setItems(Arrays.asList(item));
+
+		Response r = getClient().target(getBaseUri()).path(EXPORT_RESOURCE).request()
+				.post(Entity.entity(basket, MediaType.APPLICATION_XML_TYPE));
+
+		try {
+			assertThat(r.readEntity(String.class)).isEqualTo("test");
+
+			assertThat(r.getStatus()).isEqualTo(Status.OK.getStatusCode());
+			assertThat(r.getMediaType().toString()).isEqualTo(MediaType.APPLICATION_XML);
+			assertThat(exportAtfx.toFile()).doesNotExist();
+		} finally {
+			r.close();
+		}
+	}
+
+//	@Test
+//	public void testExportMixedSources() throws IOException {
+//		when(mockedExportService.exportAtfx(any())).thenReturn(Paths.get("exportAtfx"));
+//
+//		BasketItem item1 = new BasketItem();
+//		item1.setSource("ENV");
+//		BasketItem item2 = new BasketItem();
+//		item2.setSource("ENV2");
+//		ShoppingBasket basket = new ShoppingBasket();
+//		basket.setItems(Arrays.asList(item1, item2));
+//
+//		Response r = getClient().target(getBaseUri()).path(EXPORT_RESOURCE)
+//				.request()
+//				.post(Entity.entity(basket, MediaType.APPLICATION_XML_TYPE));
+//
+//		try {
+//			assertThat(r.getStatus()).isEqualTo(Status.BAD_REQUEST.getStatusCode());
+//			assertThat(r.readEntity(CopyStatusResponse.class))
+//				.hasFieldOrPropertyWithValue("state", "failed")
+//				.hasFieldOrPropertyWithValue("message", "Cannot export from multiple sources.")
+//				.hasFieldOrProperty("stacktrace");
+//		} finally {
+//			r.close();
+//		}
+//	}
+}
diff --git a/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/boundary/ImportResourceTest.java b/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/boundary/ImportResourceTest.java
new file mode 100644
index 0000000..2344bee
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/boundary/ImportResourceTest.java
@@ -0,0 +1,180 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.apicopy.boundary;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.core.Application;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.apicopy.control.ApiCopyException;
+import org.eclipse.mdm.apicopy.entity.ApiCopyExceptionMapper;
+import org.eclipse.mdm.apicopy.entity.CopyStatusResponse;
+import org.eclipse.mdm.apicopy.entity.CopyStatusResponse.State;
+import org.glassfish.hk2.utilities.binding.AbstractBinder;
+import org.glassfish.jersey.media.multipart.FormDataMultiPart;
+import org.glassfish.jersey.media.multipart.MultiPartFeature;
+import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.test.JerseyTest;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+public class ImportResourceTest extends JerseyTest {
+
+	@Mock
+	private ImportService mockedImportService;
+
+	private static final String IMPORT_RESOURCE = "environments/ENV/import";
+
+	private final Path resources = Paths.get("src/test/resources/");
+	private final Path atfxFile = resources.resolve("example.atfx");
+	private final Path binFile = resources.resolve("example_1.bin");
+
+	@Override
+	public Application configure() {
+		MockitoAnnotations.initMocks(this);
+
+		return new ResourceConfig().register(new ImportResource(mockedImportService)).register(MultiPartFeature.class)
+				.register(ApiCopyExceptionMapper.class).register(new AbstractBinder() {
+					@Override
+					protected void configure() {
+						bind(mockedImportService).to(ImportService.class);
+					}
+				});
+	}
+
+	@Test
+	public void testImportFile() throws IOException {
+		when(mockedImportService.importAtfx(any(), any())).thenReturn(Response.ok().build());
+
+		Response r = getClient().register(MultiPartFeature.class).target(getBaseUri()).path(IMPORT_RESOURCE).request()
+				.post(Entity.entity(new FileInputStream(atfxFile.toFile()), MediaType.APPLICATION_XML_TYPE));
+		try {
+			assertThat(r.getStatus()).isEqualTo(Status.OK.getStatusCode());
+			verify(mockedImportService, times(1)).importAtfx(any(), eq("ENV"));
+		} finally {
+			r.close();
+		}
+	}
+
+	@Test
+	public void testImportMultiPart() throws IOException {
+		when(mockedImportService.importAtfx(any(), any())).thenReturn(Response.ok().build());
+
+		try (final FormDataMultiPart multiPartEntity = new FormDataMultiPart()) {
+			multiPartEntity.field(atfxFile.getFileName().toString(), new FileInputStream(atfxFile.toFile()),
+					MediaType.APPLICATION_XML_TYPE).field(binFile.getFileName().toString(),
+							new FileInputStream(binFile.toFile()), MediaType.APPLICATION_OCTET_STREAM_TYPE);
+
+			Response r = getClient().register(MultiPartFeature.class).target(getBaseUri()).path(IMPORT_RESOURCE)
+					.request().post(Entity.entity(multiPartEntity, multiPartEntity.getMediaType()));
+			try {
+				assertThat(r.getStatus()).isEqualTo(Status.OK.getStatusCode());
+				verify(mockedImportService, times(1)).importAtfx(any(), eq("ENV"));
+			} finally {
+				r.close();
+			}
+		}
+	}
+
+	@Test
+	public void testImportZip() throws IOException {
+		when(mockedImportService.importAtfx(any(), any())).thenReturn(Response.ok().build());
+
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+
+		ZipOutputStream zipOut = new ZipOutputStream(out);
+
+		zipOut.putNextEntry(new ZipEntry(atfxFile.getFileName().toString()));
+		writeFileToStream(atfxFile, zipOut);
+
+		zipOut.putNextEntry(new ZipEntry(binFile.getFileName().toString()));
+		writeFileToStream(binFile, zipOut);
+		zipOut.close();
+
+		Response r = getClient().register(MultiPartFeature.class).target(getBaseUri()).path(IMPORT_RESOURCE).request()
+				.post(Entity.entity(out.toByteArray(), "application/zip"));
+		try {
+			assertThat(r.getStatus()).isEqualTo(Status.OK.getStatusCode());
+			verify(mockedImportService, times(1)).importAtfx(any(), eq("ENV"));
+		} finally {
+			r.close();
+		}
+	}
+
+	@Test
+	public void testFailedImport() throws IOException {
+		when(mockedImportService.importAtfx(any(), any())).thenThrow(new ApiCopyException("JUnit test fail"));
+
+		try (final FormDataMultiPart multiPartEntity = new FormDataMultiPart()) {
+			multiPartEntity.field(atfxFile.getFileName().toString(), new FileInputStream(atfxFile.toFile()),
+					MediaType.APPLICATION_XML_TYPE);
+			Response r = getClient().register(MultiPartFeature.class).target(getBaseUri()).path(IMPORT_RESOURCE)
+					.request().post(Entity.entity(multiPartEntity, multiPartEntity.getMediaType()));
+			try {
+				assertThat(r.getStatus()).isEqualTo(Status.BAD_REQUEST.getStatusCode());
+				assertThat(r.readEntity(CopyStatusResponse.class)).hasFieldOrPropertyWithValue("state", State.FAILED)
+						.hasFieldOrPropertyWithValue("message", "JUnit test fail").hasFieldOrProperty("stacktrace");
+			} finally {
+				r.close();
+			}
+		}
+	}
+
+	@Test
+	@Ignore
+	public void testExport() {
+		when(mockedImportService.importAtfx(any(), any())).thenReturn(Response.ok().build());
+
+		Response r = getClient().target(getBaseUri()).path("environments/mdm/export").request().get();
+		try {
+			assertThat(r.getStatus()).isEqualTo(Status.OK.getStatusCode());
+			assertThat(r.getMediaType().toString()).isEqualTo(MediaType.APPLICATION_XML);
+		} finally {
+			r.close();
+		}
+	}
+
+	private void writeFileToStream(Path atfxFile, OutputStream out) throws FileNotFoundException, IOException {
+		try (FileInputStream in = new FileInputStream(atfxFile.toFile())) {
+			int read = 0;
+			byte[] bytes = new byte[1024];
+
+			while ((read = in.read(bytes)) != -1) {
+				out.write(bytes, 0, read);
+			}
+		}
+	}
+
+}
diff --git a/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/control/ExportTaskTest.java b/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/control/ExportTaskTest.java
new file mode 100644
index 0000000..12a6991
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/control/ExportTaskTest.java
@@ -0,0 +1,120 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.apicopy.control;
+
+import static org.eclipse.mdm.api.odsadapter.ODSContextFactory.PARAM_NAMESERVICE;
+import static org.eclipse.mdm.api.odsadapter.ODSContextFactory.PARAM_PASSWORD;
+import static org.eclipse.mdm.api.odsadapter.ODSContextFactory.PARAM_SERVICENAME;
+import static org.eclipse.mdm.api.odsadapter.ODSContextFactory.PARAM_USER;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.mdm.api.atfxadapter.ATFXContextFactory;
+import org.eclipse.mdm.api.base.ConnectionException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.model.Project;
+import org.eclipse.mdm.api.odsadapter.ODSContextFactory;
+import org.eclipse.mdm.apicopy.control.ExportTask;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.io.Files;
+
+@Ignore
+//FIXME 03.07.2019: this test needs a running ODS Server, that is not suitable for continous build in Jenkins.
+//Comment this in for local tests only.
+public class ExportTaskTest {
+	public static final String ATFX_FILE = "src/main/resources/emptyAtfx.xml";
+
+	public static ApplicationContext contextDst;
+	public static ApplicationContext contextSrc;
+
+	private static File f;
+
+	@ClassRule
+	public static TemporaryFolder tmpFolder = new TemporaryFolder();
+
+	private static final String NAME_SERVICE = "corbaloc::1.2@%s:%s/NameService";
+
+	private static final String USER = "sa";
+	private static final String PASSWORD = "sa";
+
+	@BeforeClass
+	public static void init() throws ConnectionException, IOException {
+
+		// Source context
+		String nameServiceHost = System.getProperty("host");
+		String nameServicePort = System.getProperty("port");
+		String serviceName = System.getProperty("service");
+
+		if (nameServiceHost == null || nameServiceHost.isEmpty()) {
+			throw new IllegalArgumentException("name service host is unknown: define system property 'host'");
+		}
+
+		nameServicePort = nameServicePort == null || nameServicePort.isEmpty() ? String.valueOf(2809) : nameServicePort;
+		if (nameServicePort == null || nameServicePort.isEmpty()) {
+			throw new IllegalArgumentException("name service port is unknown: define system property 'port'");
+		}
+
+		if (serviceName == null || serviceName.isEmpty()) {
+			throw new IllegalArgumentException("service name is unknown: define system property 'service'");
+		}
+
+		Map<String, String> connectionParameters = new HashMap<>();
+		connectionParameters.put(PARAM_NAMESERVICE, String.format(NAME_SERVICE, nameServiceHost, nameServicePort));
+		connectionParameters.put(PARAM_SERVICENAME, serviceName + ".ASAM-ODS");
+		connectionParameters.put(PARAM_USER, USER);
+		connectionParameters.put(PARAM_PASSWORD, PASSWORD);
+
+		contextSrc = new ODSContextFactory().connect(connectionParameters);
+
+		// target context
+		f = tmpFolder.newFile("open.atfx");
+		Files.copy(new File(ATFX_FILE), f);
+
+		Map<String, String> map = ImmutableMap.of("atfxfile", f.getAbsolutePath(), "freetext.active", "false",
+				"includeCatalog", "true");
+
+		contextDst = new ATFXContextFactory().connect(map);
+	}
+
+	@AfterClass
+	public static void teardown() throws ConnectionException {
+		contextDst.close();
+		contextSrc.close();
+	}
+
+	@Test
+	public void test() throws ConnectionException {
+		ExportTask task = new ExportTask(contextSrc, contextDst);
+		task.copyCatalog();
+		contextDst.close();
+
+		Map<String, String> map = ImmutableMap.of("atfxfile", f.getAbsolutePath(), "freetext.active", "false");
+		contextDst = new ATFXContextFactory().connect(map);
+
+		task = new ExportTask(contextSrc, contextDst);
+		task.copy(Arrays.asList(contextSrc.getEntityManager().get().load(Project.class, "1")));
+	}
+}
diff --git a/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/control/ImportTaskTest.java b/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/control/ImportTaskTest.java
new file mode 100644
index 0000000..bed39c4
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/control/ImportTaskTest.java
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+package org.eclipse.mdm.apicopy.control;
+
+import static org.eclipse.mdm.api.odsadapter.ODSContextFactory.PARAM_NAMESERVICE;
+import static org.eclipse.mdm.api.odsadapter.ODSContextFactory.PARAM_PASSWORD;
+import static org.eclipse.mdm.api.odsadapter.ODSContextFactory.PARAM_SERVICENAME;
+import static org.eclipse.mdm.api.odsadapter.ODSContextFactory.PARAM_USER;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.mdm.api.atfxadapter.ATFXContextFactory;
+import org.eclipse.mdm.api.base.ConnectionException;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.model.Project;
+import org.eclipse.mdm.api.odsadapter.ODSContextFactory;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableMap;
+
+@Ignore
+//FIXME 22.11.2019: this test needs a running ODS Server, that is not suitable for continous build in Jenkins.
+//Comment this in for local tests only.
+public class ImportTaskTest {
+	public static final String ATFX_FILE = "src/test/resources/importtasktest.atfx";
+
+	public static ApplicationContext contextDst;
+	public static ApplicationContext contextSrc;
+
+	private static final String NAME_SERVICE = "corbaloc::1.2@%s:%s/NameService";
+
+	private static final String USER = "sa";
+	private static final String PASSWORD = "sa";
+
+	@BeforeClass
+	public static void init() throws ConnectionException, IOException {
+
+		// Source context
+		String nameServiceHost = System.getProperty("host");
+		String nameServicePort = System.getProperty("port");
+		String serviceName = System.getProperty("service");
+
+		if (nameServiceHost == null || nameServiceHost.isEmpty()) {
+			throw new IllegalArgumentException("name service host is unknown: define system property 'host'");
+		}
+
+		nameServicePort = nameServicePort == null || nameServicePort.isEmpty() ? String.valueOf(2809) : nameServicePort;
+		if (nameServicePort == null || nameServicePort.isEmpty()) {
+			throw new IllegalArgumentException("name service port is unknown: define system property 'port'");
+		}
+
+		if (serviceName == null || serviceName.isEmpty()) {
+			throw new IllegalArgumentException("service name is unknown: define system property 'service'");
+		}
+
+		Map<String, String> connectionParameters = new HashMap<>();
+		connectionParameters.put(PARAM_NAMESERVICE, String.format(NAME_SERVICE, nameServiceHost, nameServicePort));
+		connectionParameters.put(PARAM_SERVICENAME, serviceName + ".ASAM-ODS");
+		connectionParameters.put(PARAM_USER, USER);
+		connectionParameters.put(PARAM_PASSWORD, PASSWORD);
+
+		contextDst = new ODSContextFactory().connect(connectionParameters);
+
+		// source context
+		File f = new File(ATFX_FILE);
+
+		Map<String, String> map = ImmutableMap.of("atfxfile", f.getAbsolutePath(), "freetext.active", "false");
+
+		contextSrc = new ATFXContextFactory().connect(map);
+	}
+
+	@AfterClass
+	public static void teardown() throws ConnectionException {
+		contextDst.close();
+		contextSrc.close();
+	}
+
+	@Test
+	public void testImport() throws ConnectionException {
+		ImportTask task = new ImportTask(contextSrc, contextDst, new TemplateManager() {
+
+			@Override
+			public void setSourceContext(ApplicationContext source) throws ApiCopyException {
+			}
+
+			@Override
+			public String getTemplateTestStepName(TestStep testStepSrc) throws ApiCopyException {
+				return "PBN_UNECE_R51_RUN";
+			}
+
+			@Override
+			public String getTemplateTestName(org.eclipse.mdm.api.base.model.Test testSrc) throws ApiCopyException {
+				return "PBN_UNECE_R51";
+			}
+		});
+
+		task.copy(Arrays.asList(contextSrc.getEntityManager().get().load(Project.class, "1")));
+	}
+}
diff --git a/org.eclipse.mdm.apicopy/src/test/resources/example.atfx b/org.eclipse.mdm.apicopy/src/test/resources/example.atfx
new file mode 100644
index 0000000..2def4d2
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/test/resources/example.atfx
@@ -0,0 +1,3544 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<atfx_file version="atfx_file: V1.2.0" xmlns="http://www.asam.net/ODS/5.2.0/Schema">
+  <documentation>
+    <exported_by>openATFX</exported_by>
+    <exporter>openATFX</exporter>
+    <export_date_time>20140317155010</export_date_time>
+    <exporter_version>0.4.3</exporter_version>
+  </documentation>
+  <base_model_version>asam30</base_model_version>
+  <application_model>
+    <application_enumeration>
+      <name>valid_enum</name>
+      <item>
+        <name>editing</name>
+        <value>0</value>
+      </item>
+      <item>
+        <name>valid</name>
+        <value>1</value>
+      </item>
+      <item>
+        <name>archive</name>
+        <value>2</value>
+      </item>
+    </application_enumeration>
+    <application_enumeration>
+      <name>axistype</name>
+      <item>
+        <name>Xaxis</name>
+        <value>0</value>
+      </item>
+      <item>
+        <name>Yaxis</name>
+        <value>1</value>
+      </item>
+      <item>
+        <name>Both</name>
+        <value>2</value>
+      </item>
+    </application_enumeration>
+    <application_element>
+      <name>Environment</name>
+      <basetype>AoEnvironment</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <obligatory>true</obligatory>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Max_test_level</name>
+        <base_attribute>max_test_level</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Base_model_version</name>
+        <base_attribute>base_model_version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>AppModelType</name>
+        <base_attribute>application_model_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>AppModelVersion</name>
+        <base_attribute>application_model_version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Timezone</name>
+        <base_attribute>timezone</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MeaningOfAliases</name>
+        <base_attribute>meaning_of_aliases</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+    </application_element>
+    <application_element>
+      <name>Project</name>
+      <basetype>AoTest</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>StructureLevel</name>
+        <ref_to>StructureLevel</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Project</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>StructureLevel</name>
+      <basetype>AoSubTest</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>Tests</name>
+        <ref_to>Test</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>StructureLevel</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Project</name>
+        <ref_to>Project</ref_to>
+        <base_relation>parent_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>StructureLevel</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>Test</name>
+      <basetype>AoSubTest</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateClosed</name>
+        <datatype>DT_DATE</datatype>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MDMLinks</name>
+        <base_attribute>external_references</base_attribute>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>StructureLevel</name>
+        <ref_to>StructureLevel</ref_to>
+        <base_relation>parent_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>Tests</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSteps</name>
+        <ref_to>TestStep</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Test</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ResponsiblePerson</name>
+        <ref_to>User</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>Tests</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TestStep</name>
+      <basetype>AoSubTest</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Optional</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>Sortindex</name>
+        <datatype>DT_LONG</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MDMLinks</name>
+        <base_attribute>external_references</base_attribute>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>Test</name>
+        <ref_to>Test</ref_to>
+        <base_relation>parent_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TestSteps</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResults</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestStep</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestEquipment</name>
+        <ref_to>TestEquipment</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TestSteps</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TestSteps</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSequence</name>
+        <ref_to>TestSequence</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TestSteps</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>MeaResult</name>
+      <basetype>AoMeasurement</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MeasurementBegin</name>
+        <base_attribute>measurement_begin</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MeasurementEnd</name>
+        <base_attribute>measurement_end</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MDMLinks</name>
+        <base_attribute>external_references</base_attribute>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TestEquipment</name>
+        <ref_to>TestEquipment</ref_to>
+        <base_relation>equipments</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaResults</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>units_under_test</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaResults</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSequence</name>
+        <ref_to>TestSequence</ref_to>
+        <base_relation>sequences</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaResults</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantities</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>MeaResult</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestStep</name>
+        <ref_to>TestStep</ref_to>
+        <base_relation>test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaResults</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>SubMatrices</name>
+        <ref_to>SubMatrix</ref_to>
+        <base_relation>submatrices</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>MeaResult</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ResultParameterSet</name>
+        <ref_to>ResultParameterSet</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>MeaResult</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>UnitUnderTest</name>
+      <basetype>AoUnitUnderTest</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>engine</name>
+        <ref_to>engine</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>gearbox</name>
+        <ref_to>gearbox</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>tyre</name>
+        <ref_to>tyre</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>noise_reduction_system</name>
+        <ref_to>noise_reduction_system</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>vehicle</name>
+        <ref_to>vehicle</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>exhaust_piping</name>
+        <ref_to>exhaust_piping</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>expansion_chamber</name>
+        <ref_to>expansion_chamber</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>air_filter</name>
+        <ref_to>air_filter</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResults</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>measurement</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSteps</name>
+        <ref_to>TestStep</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>silencer</name>
+        <ref_to>silencer</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>engine</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>power</name>
+        <datatype>DT_SHORT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>type</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>model</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>engine</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>gearbox</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>no_forward_gears</name>
+        <datatype>DT_SHORT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>transmission</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>gearbox</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>noise_reduction_system</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>design_family</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>noise_reduction_system</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>tyre</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>axle</name>
+        <datatype>DT_SHORT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>side</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>size</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>tread_depth</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>tyre</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>air_filter</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>min_bulk_material_density</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>air_filter</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>expansion_chamber</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>volume</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>expansion_chamber</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>exhaust_piping</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>material</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>length</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>exhaust_piping</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>vehicle</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>maximum_authorized_mass</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>vehicle_type</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>vehicle_category</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>model</name>
+        <datatype>DT_STRING</datatype>
+        <obligatory>true</obligatory>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>length</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>reference_point</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>mass_in_running_order</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>vehicle</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>silencer</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>location</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>model</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>type</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>fibre_type</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>silencer</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TestEquipment</name>
+      <basetype>AoTestEquipment</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>vehicle_measurement</name>
+        <ref_to>vehicle_measurement</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestEquipment</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>meteorological_measurement</name>
+        <ref_to>meteorological_measurement</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestEquipment</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>sound_measurement</name>
+        <ref_to>sound_measurement</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestEquipment</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResults</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>measurement</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestEquipment</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSteps</name>
+        <ref_to>TestStep</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestEquipment</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>vehicle_measurement</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>speed</name>
+        <ref_to>speed</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>vehicle_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestEquipment</name>
+        <ref_to>TestEquipment</ref_to>
+        <base_relation>parent_equipment</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>vehicle_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>rotational_speed</name>
+        <ref_to>rotational_speed</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>vehicle_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>acceleration</name>
+        <ref_to>acceleration</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>vehicle_measurement</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>speed</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>direction</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>vehicle_measurement</name>
+        <ref_to>vehicle_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>speed</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>speed</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>rotational_speed</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>vehicle_measurement</name>
+        <ref_to>vehicle_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>rotational_speed</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>rotational_speed</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>acceleration</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>type_code</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>last_calibration</name>
+        <datatype>DT_DATE</datatype>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>location</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>direction</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>vehicle_measurement</name>
+        <ref_to>vehicle_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>acceleration</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>acceleration</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>meteorological_measurement</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>temperature</name>
+        <ref_to>temperature</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>meteorological_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>barometric_pressure</name>
+        <ref_to>barometric_pressure</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>meteorological_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestEquipment</name>
+        <ref_to>TestEquipment</ref_to>
+        <base_relation>parent_equipment</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>meteorological_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>relative_humidity</name>
+        <ref_to>relative_humidity</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>meteorological_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>wind_speed</name>
+        <ref_to>wind_speed</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>meteorological_measurement</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>barometric_pressure</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>type_code</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>last_calibration</name>
+        <datatype>DT_DATE</datatype>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>height_above_ground</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>meteorological_measurement</name>
+        <ref_to>meteorological_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>barometric_pressure</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>barometric_pressure</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>temperature</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>meteorological_measurement</name>
+        <ref_to>meteorological_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>temperature</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>temperature</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>relative_humidity</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>meteorological_measurement</name>
+        <ref_to>meteorological_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>relative_humidity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>relative_humidity</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>wind_speed</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>wind_direction</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>meteorological_measurement</name>
+        <ref_to>meteorological_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>wind_speed</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>wind_speed</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>sound_measurement</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>microphone</name>
+        <ref_to>microphone</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>sound_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestEquipment</name>
+        <ref_to>TestEquipment</ref_to>
+        <base_relation>parent_equipment</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>sound_measurement</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>microphone</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>type_code</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>height_above_ground</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>last_calibration</name>
+        <datatype>DT_DATE</datatype>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>distance_from_target</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>windscreen_applied</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>sound_measurement</name>
+        <ref_to>sound_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>microphone</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>microphone</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>MeaQuantity</name>
+      <basetype>AoMeasurementQuantity</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DataType</name>
+        <base_attribute>datatype</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Interpolation</name>
+        <base_attribute>interpolation</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Rank</name>
+        <base_attribute>rank</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Dimension</name>
+        <base_attribute>dimension</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>TypeSize</name>
+        <base_attribute>type_size</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Minimum</name>
+        <base_attribute>minimum</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Maximum</name>
+        <base_attribute>maximum</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Average</name>
+        <base_attribute>average</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Deviation</name>
+        <base_attribute>standard_deviation</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>non_reference_channel_name</name>
+        <datatype>DT_STRING</datatype>
+        <length>128</length>
+      </application_attribute>
+      <application_attribute>
+        <name>reference_channel_name</name>
+        <datatype>DT_STRING</datatype>
+        <length>128</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>meq-for-ref-user-window-fct</name>
+        <ref_to>MeaQuantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>reference-user-window-function</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>speed</name>
+        <ref_to>speed</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>meq-forequalization-
+filter</name>
+        <ref_to>MeaQuantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>equalization-filter</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>barometric_pressure</name>
+        <ref_to>barometric_pressure</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Unit</name>
+        <ref_to>Unit</ref_to>
+        <base_relation>unit</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantities</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>relative_humidity</name>
+        <ref_to>relative_humidity</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>non_reference_channel_quantity</name>
+        <ref_to>Quantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>meq-for-non_ref_chan_quantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>equalization-filter</name>
+        <ref_to>MeaQuantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>meq-forequalization-
+filter</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>wind_speed</name>
+        <ref_to>wind_speed</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ResultParameterSet</name>
+        <ref_to>ResultParameterSet</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResult</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>measurement</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantities</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>user-window-function</name>
+        <ref_to>MeaQuantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>meq-for-user-window-fct</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>temperature</name>
+        <ref_to>temperature</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>microphone</name>
+        <ref_to>microphone</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>LocalColumns</name>
+        <ref_to>LocalColumn</ref_to>
+        <base_relation>local_columns</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>rotational_speed</name>
+        <ref_to>rotational_speed</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>reference-user-window-function</name>
+        <ref_to>MeaQuantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>meq-for-ref-user-window-fct</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>meq-for-user-window-fct</name>
+        <ref_to>MeaQuantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>user-window-function</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>reference_channel_quantity</name>
+        <ref_to>Quantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>meq-for-ref_chan_quantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Quantity</name>
+        <ref_to>Quantity</ref_to>
+        <base_relation>quantity</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantities</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>acceleration</name>
+        <ref_to>acceleration</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>Unit</name>
+      <basetype>AoUnit</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Factor</name>
+        <base_attribute>factor</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Offset</name>
+        <base_attribute>offset</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>dB</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>dB_reference_factor</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>Quantities</name>
+        <ref_to>Quantity</ref_to>
+        <base_relation>quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Unit</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>PhysDimension</name>
+        <ref_to>PhysDimension</ref_to>
+        <base_relation>phys_dimension</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>Units</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ResultParameter</name>
+        <ref_to>ResultParameter</ref_to>
+        <base_relation>parameters</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Unit</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantities</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Unit</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>PhysDimension</name>
+      <basetype>AoPhysicalDimension</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Length</name>
+        <base_attribute>length_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Mass</name>
+        <base_attribute>mass_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Time</name>
+        <base_attribute>time_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Current</name>
+        <base_attribute>current_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Temperature</name>
+        <base_attribute>temperature_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MolarAmount</name>
+        <base_attribute>molar_amount_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>LuminousIntensity</name>
+        <base_attribute>luminous_intensity_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>angle</name>
+        <datatype>DT_LONG</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>Units</name>
+        <ref_to>Unit</ref_to>
+        <base_relation>units</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>PhysDimension</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>Quantity</name>
+      <basetype>AoQuantity</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DefaultRank</name>
+        <base_attribute>default_rank</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>DefDimension</name>
+        <base_attribute>default_dimension</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>DefTypeSize</name>
+        <base_attribute>default_type_size</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>DefMQName</name>
+        <base_attribute>default_mq_name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DefDataType</name>
+        <base_attribute>default_datatype</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>ValidFlag</name>
+        <datatype>DT_ENUM</datatype>
+        <enumeration_type>valid_enum</enumeration_type>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>Unit</name>
+        <ref_to>Unit</ref_to>
+        <base_relation>default_unit</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>Quantities</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>meq-for-non_ref_chan_quantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>non_reference_channel_quantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>meq-for-ref_chan_quantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>reference_channel_quantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantities</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Quantity</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>ResultParameterSet</name>
+      <basetype>AoParameterSet</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>ResultParameter</name>
+        <ref_to>ResultParameter</ref_to>
+        <base_relation>parameters</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>ResultParameterSet</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ResultParameterSet</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResult</name>
+        <ref_to>MeaResult</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ResultParameterSet</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>ResultParameter</name>
+      <basetype>AoParameter</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DataType</name>
+        <base_attribute>parameter_datatype</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Value</name>
+        <base_attribute>pvalue</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>Unit</name>
+        <ref_to>Unit</ref_to>
+        <base_relation>unit</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ResultParameter</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ResultParameterSet</name>
+        <ref_to>ResultParameterSet</ref_to>
+        <base_relation>parameter_set</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ResultParameter</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>LocalColumn</name>
+      <basetype>AoLocalColumn</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>IndependentFlag</name>
+        <base_attribute>independent</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>SequenceRepresentation</name>
+        <base_attribute>sequence_representation</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>GlobalFlag</name>
+        <base_attribute>global_flag</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Values</name>
+        <base_attribute>values</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Flags</name>
+        <base_attribute>flags</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>GenerationParameters</name>
+        <base_attribute>generation_parameters</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>RawDatatype</name>
+        <base_attribute>raw_datatype</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>axistype</name>
+        <datatype>DT_ENUM</datatype>
+        <enumeration_type>axistype</enumeration_type>
+      </application_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantity</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>LocalColumns</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>SubMatrix</name>
+        <ref_to>SubMatrix</ref_to>
+        <base_relation>submatrix</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>LocalColumns</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ExternalComponent</name>
+        <ref_to>ExternalComponent</ref_to>
+        <base_relation>external_component</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>LocalColumn</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>SubMatrix</name>
+      <basetype>AoSubmatrix</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>SubMatrixNoRows</name>
+        <base_attribute>number_of_rows</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>y-axis-for-z-axis</name>
+        <ref_to>SubMatrix</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>z-axis-for-y-axis</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>y-axis-for-x-axis</name>
+        <ref_to>SubMatrix</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>x-axis-for-y-axis</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>LocalColumns</name>
+        <ref_to>LocalColumn</ref_to>
+        <base_relation>local_columns</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>SubMatrix</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>z-axis-for-y-axis</name>
+        <ref_to>SubMatrix</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>y-axis-for-z-axis</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResult</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>measurement</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>SubMatrices</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>x-axis-for-y-axis</name>
+        <ref_to>SubMatrix</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>y-axis-for-x-axis</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>ExternalComponent</name>
+      <basetype>AoExternalComponent</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>FilenameURL</name>
+        <base_attribute>filename_url</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>TypeSpecification</name>
+        <base_attribute>value_type</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Length</name>
+        <base_attribute>component_length</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>StartOffset</name>
+        <base_attribute>start_offset</base_attribute>
+        <datatype>DT_LONG</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Blocksize</name>
+        <base_attribute>block_size</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>ValuesPerBlock</name>
+        <base_attribute>valuesperblock</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>ValueOffset</name>
+        <base_attribute>value_offset</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>OrdinalNumber</name>
+        <base_attribute>ordinal_number</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>FlagsFilenameURL</name>
+        <base_attribute>flags_filename_url</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>FlagsStartOffset</name>
+        <base_attribute>flags_start_offset</base_attribute>
+        <datatype>DT_LONG</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>LocalColumn</name>
+        <ref_to>LocalColumn</ref_to>
+        <base_relation>local_column</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ExternalComponent</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TestSequence</name>
+      <basetype>AoTestSequence</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>PBN_test_conduction</name>
+        <ref_to>PBN_test_conduction</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestSequence</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>track</name>
+        <ref_to>track</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestSequence</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>SVN_test_conduction</name>
+        <ref_to>SVN_test_conduction</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestSequence</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>testsite</name>
+        <ref_to>testsite</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestSequence</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResults</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>measurement</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestSequence</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSteps</name>
+        <ref_to>TestStep</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestSequence</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>PBN_test_conduction</name>
+      <basetype>AoTestSequencePart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>v_test</name>
+        <datatype>DT_FLOAT</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>PMR</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>accelerated</name>
+        <datatype>DT_BOOLEAN</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>tested_vehicle_side</name>
+        <datatype>DT_STRING</datatype>
+        <obligatory>true</obligatory>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TestSequence</name>
+        <ref_to>TestSequence</ref_to>
+        <base_relation>parent_sequence</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>PBN_test_conduction</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>track</name>
+      <basetype>AoTestSequencePart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>residual_voids_content</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>sound_absorption_coefficient</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>texture_depth</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>surface_homogeneity</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>last_check_texture_depth</name>
+        <datatype>DT_DATE</datatype>
+        <length>30</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TestSequence</name>
+        <ref_to>TestSequence</ref_to>
+        <base_relation>parent_sequence</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>track</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>SVN_test_conduction</name>
+      <basetype>AoTestSequencePart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TestSequence</name>
+        <ref_to>TestSequence</ref_to>
+        <base_relation>parent_sequence</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>SVN_test_conduction</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>testsite</name>
+      <basetype>AoTestSequencePart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>track_id</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TestSequence</name>
+        <ref_to>TestSequence</ref_to>
+        <base_relation>parent_sequence</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>testsite</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>User</name>
+      <basetype>AoUser</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <unique>true</unique>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Password</name>
+        <base_attribute>password</base_attribute>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>GivenName</name>
+        <datatype>DT_STRING</datatype>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Surname</name>
+        <datatype>DT_STRING</datatype>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Department</name>
+        <datatype>DT_STRING</datatype>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Telephone</name>
+        <datatype>DT_STRING</datatype>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>E-Mail</name>
+        <datatype>DT_STRING</datatype>
+        <length>50</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>Tests</name>
+        <ref_to>Test</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>ResponsiblePerson</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>users2groups</name>
+        <ref_to>Role</ref_to>
+        <base_relation>groups</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>groups2users</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>Role</name>
+      <basetype>AoUserGroup</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <unique>true</unique>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>SuperuserFlag</name>
+        <base_attribute>superuser_flag</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>groups2users</name>
+        <ref_to>User</ref_to>
+        <base_relation>users</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>users2groups</inverse_name>
+      </relation_attribute>
+    </application_element>
+  </application_model>
+  <instance_data>
+    <Environment>
+      <Id>1</Id>
+      <Name>MDM</Name>
+      <MimeType>application/x-asam.aoenvironment</MimeType>
+      <Description>MDM Environment</Description>
+      <DateCreated>20120214120000</DateCreated>
+      <Max_test_level>4</Max_test_level>
+      <Base_model_version>asam30</Base_model_version>
+      <AppModelType>ASAM_SECURITY,ASAM_NVH,ASAM_WORKFLOW,MDM</AppModelType>
+      <AppModelVersion>4.4.1</AppModelVersion>
+      <Timezone>GMT</Timezone>
+      <MeaningOfAliases>
+        <s>,language=en</s>
+        <s>,language=de</s>
+      </MeaningOfAliases>
+    </Environment>
+    <Project>
+      <Id>1</Id>
+      <Name>PMV Model P</Name>
+      <MimeType>application/x-asam.aotest</MimeType>
+      <StructureLevel>1</StructureLevel>
+    </Project>
+    <StructureLevel>
+      <Id>1</Id>
+      <Name>PBN Measurements</Name>
+      <MimeType>application/x-asam.aosubtest.structurelevel</MimeType>
+      <Tests>1</Tests>
+      <Project>1</Project>
+    </StructureLevel>
+    <Test>
+      <Id>1</Id>
+      <Name>PBN_UNECE_R51_20140314170907</Name>
+      <MimeType>application/x-asam.aosubtest.test</MimeType>
+      <DateCreated>20140314170907</DateCreated>
+      <DateClosed>20140314170908</DateClosed>
+      <StructureLevel>1</StructureLevel>
+      <TestSteps>1</TestSteps>
+      <ResponsiblePerson>1</ResponsiblePerson>
+    </Test>
+    <TestStep>
+      <Id>1</Id>
+      <Name>PBN_UNECE_R51_Right_Acc_70</Name>
+      <MimeType>application/x-asam.aosubtest.teststep</MimeType>
+      <DateCreated>20140314170908</DateCreated>
+      <Optional>true</Optional>
+      <Sortindex>40</Sortindex>
+      <Test>1</Test>
+      <MeaResults>1</MeaResults>
+      <UnitUnderTest>1</UnitUnderTest>
+      <TestSequence>1</TestSequence>
+      <TestEquipment>1</TestEquipment>
+    </TestStep>
+    <MeaResult>
+      <Id>1</Id>
+      <Name>Channel</Name>
+      <MimeType>application/x-asam.aomeasurement</MimeType>
+      <DateCreated>20140317154822</DateCreated>
+      <MeaQuantities>1 2 3 4 5 6 7 8 9 10 11</MeaQuantities>
+      <TestStep>1</TestStep>
+      <SubMatrices>1</SubMatrices>
+      <UnitUnderTest>1</UnitUnderTest>
+      <TestSequence>1</TestSequence>
+      <TestEquipment>1</TestEquipment>
+    </MeaResult>
+    <UnitUnderTest>
+      <Id>1</Id>
+      <Name>PBN_vehicle</Name>
+      <Version>57</Version>
+      <MimeType>application/x-asam.aounitundertest.unitundertest</MimeType>
+      <engine>1</engine>
+      <gearbox>1</gearbox>
+      <tyre>1 2 3 4</tyre>
+      <noise_reduction_system>1</noise_reduction_system>
+      <vehicle>1</vehicle>
+      <exhaust_piping>1</exhaust_piping>
+      <expansion_chamber>1</expansion_chamber>
+      <air_filter>1</air_filter>
+      <MeaResults>1</MeaResults>
+      <silencer>1 2</silencer>
+    </UnitUnderTest>
+    <engine>
+      <Id>1</Id>
+      <Name>engine</Name>
+      <MimeType>application/x-asam.aounitundertestpart.engine.engine</MimeType>
+      <power>167</power>
+      <manufacturer>Peak Motors Ltd.</manufacturer>
+      <type>Compression-ignition</type>
+      <model>Peak Turbo V16</model>
+      <UnitUnderTest>1</UnitUnderTest>
+    </engine>
+    <gearbox>
+      <Id>1</Id>
+      <Name>gearbox</Name>
+      <MimeType>application/x-asam.aounitundertestpart.gearbox.gearbox</MimeType>
+      <no_forward_gears>6</no_forward_gears>
+      <transmission>Automatic</transmission>
+      <UnitUnderTest>1</UnitUnderTest>
+    </gearbox>
+    <noise_reduction_system>
+      <Id>1</Id>
+      <Name>noise_reduction_system</Name>
+      <MimeType>application/x-asam.aounitundertestpart.noise_reduction_system.noise_reduction_system</MimeType>
+      <design_family>Whisper</design_family>
+      <UnitUnderTest>1</UnitUnderTest>
+    </noise_reduction_system>
+    <tyre>
+      <Id>1</Id>
+      <Name>FL_tyre</Name>
+      <MimeType>application/x-asam.aounitundertestpart.tyre.fl_tyre</MimeType>
+      <axle>1</axle>
+      <side>Left</side>
+      <size>75R15</size>
+      <manufacturer>Tunnelsand</manufacturer>
+      <tread_depth>2.2</tread_depth>
+      <UnitUnderTest>1</UnitUnderTest>
+    </tyre>
+    <tyre>
+      <Id>2</Id>
+      <Name>FR_tyre</Name>
+      <MimeType>application/x-asam.aounitundertestpart.tyre.fr_tyre</MimeType>
+      <axle>1</axle>
+      <side>Right</side>
+      <size>75R15</size>
+      <manufacturer>Tunnelsand</manufacturer>
+      <tread_depth>2.3</tread_depth>
+      <UnitUnderTest>1</UnitUnderTest>
+    </tyre>
+    <tyre>
+      <Id>3</Id>
+      <Name>RL_tyre</Name>
+      <MimeType>application/x-asam.aounitundertestpart.tyre.rl_tyre</MimeType>
+      <axle>2</axle>
+      <side>Left</side>
+      <size>75R15</size>
+      <manufacturer>Tunnelsand</manufacturer>
+	  <tread_depth>2.1</tread_depth>
+      <UnitUnderTest>1</UnitUnderTest>
+    </tyre>
+    <tyre>
+      <Id>4</Id>
+      <Name>RR_tyre</Name>
+      <MimeType>application/x-asam.aounitundertestpart.tyre.rr_tyre</MimeType>
+      <axle>2</axle>
+      <side>Right</side>
+      <size>75R15</size>
+      <manufacturer>Tunnelsand</manufacturer>
+      <tread_depth>2.2</tread_depth>
+      <UnitUnderTest>1</UnitUnderTest>
+    </tyre>
+    <air_filter>
+      <Id>1</Id>
+      <Name>air_filter</Name>
+      <MimeType>application/x-asam.aounitundertestpart.air_filter.air_filter</MimeType>
+      <min_bulk_material_density>0.83</min_bulk_material_density>
+      <UnitUnderTest>1</UnitUnderTest>
+    </air_filter>
+    <expansion_chamber>
+      <Id>1</Id>
+      <Name>expansion_chamber</Name>
+      <MimeType>application/x-asam.aounitundertestpart.expansion_chamber.expansion_chamber</MimeType>
+      <volume>0.53</volume>
+      <UnitUnderTest>1</UnitUnderTest>
+    </expansion_chamber>
+    <exhaust_piping>
+      <Id>1</Id>
+      <Name>exhaust_piping</Name>
+      <MimeType>application/x-asam.aounitundertestpart.exhaust_piping.exhaust_piping</MimeType>
+      <material>Stainless steel</material>
+      <length>3.79</length>
+      <UnitUnderTest>1</UnitUnderTest>
+    </exhaust_piping>
+    <vehicle>
+      <Id>1</Id>
+      <Name>vehicle</Name>
+      <MimeType>application/x-asam.aounitundertestpart.vehicle.vehicle</MimeType>
+      <maximum_authorized_mass>1950.0</maximum_authorized_mass>
+      <vehicle_type>Cabrio</vehicle_type>
+      <vehicle_category>Passenger transport</vehicle_category>
+      <manufacturer>Peak Motor Vehicles</manufacturer>
+      <model>Model P</model>
+      <length>3.96</length>
+      <reference_point>Rear end</reference_point>
+      <mass_in_running_order>1463.0</mass_in_running_order>
+      <UnitUnderTest>1</UnitUnderTest>
+    </vehicle>
+    <silencer>
+      <Id>1</Id>
+      <Name>exhaust_silencer</Name>
+      <MimeType>application/x-asam.aounitundertestpart.silencer.exhaust_silencer</MimeType>
+      <location>exhaust</location>
+      <manufacturer>Peak Silencers Ltd.</manufacturer>
+      <model>Lion's Roar 2013</model>
+      <type>Quadruple pipe</type>
+      <fibre_type>Biosil wool</fibre_type>
+      <UnitUnderTest>1</UnitUnderTest>
+    </silencer>
+    <silencer>
+      <Id>2</Id>
+      <Name>intake_silencer</Name>
+      <MimeType>application/x-asam.aounitundertestpart.silencer.intake_silencer</MimeType>
+      <location>intake</location>
+      <manufacturer>Peak Silencers Ltd.</manufacturer>
+      <model>Snake's Hiss 2013</model>
+      <fibre_type>Etype wool</fibre_type>
+      <UnitUnderTest>1</UnitUnderTest>
+    </silencer>
+    <TestEquipment>
+      <Id>1</Id>
+      <Name>PBN_setup</Name>
+      <Version>56</Version>
+      <MimeType>application/x-asam.aotestequipment.testequipment</MimeType>
+      <vehicle_measurement>1</vehicle_measurement>
+      <meteorological_measurement>1</meteorological_measurement>
+      <sound_measurement>1</sound_measurement>
+      <MeaResults>1</MeaResults>
+    </TestEquipment>
+    <vehicle_measurement>
+      <Id>1</Id>
+      <Name>vehicle_measurement</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.vehicle_measurement.vehicle_measurement</MimeType>
+      <speed>1</speed>
+      <TestEquipment>1</TestEquipment>
+      <rotational_speed>1</rotational_speed>
+      <acceleration>1</acceleration>
+    </vehicle_measurement>
+    <speed>
+      <Id>1</Id>
+      <Name>vehicle_speed</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.speed</MimeType>
+      <vehicle_measurement>1</vehicle_measurement>
+    </speed>
+    <rotational_speed>
+      <Id>1</Id>
+      <Name>rotational_speed</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.rotational_speed</MimeType>
+      <vehicle_measurement>1</vehicle_measurement>
+    </rotational_speed>
+    <acceleration>
+      <Id>1</Id>
+      <Name>vehicle_acceleration</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.acceleration</MimeType>
+      <vehicle_measurement>1</vehicle_measurement>
+    </acceleration>
+    <meteorological_measurement>
+      <Id>1</Id>
+      <Name>meteorological_measurement</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.meteorological_measurement.meteorological_measurement</MimeType>
+      <temperature>1 2</temperature>
+      <barometric_pressure>1</barometric_pressure>
+      <TestEquipment>1</TestEquipment>
+      <relative_humidity>1</relative_humidity>
+      <wind_speed>1</wind_speed>
+    </meteorological_measurement>
+    <barometric_pressure>
+      <Id>1</Id>
+      <Name>atmospheric_pressure</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.barometric_pressure</MimeType>
+      <meteorological_measurement>1</meteorological_measurement>
+    </barometric_pressure>
+    <temperature>
+      <Id>1</Id>
+      <Name>ambient_air_temperature</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.temperature</MimeType>
+      <meteorological_measurement>1</meteorological_measurement>
+    </temperature>
+    <temperature>
+      <Id>2</Id>
+      <Name>track_surface_temperature</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.temperature</MimeType>
+      <meteorological_measurement>1</meteorological_measurement>
+    </temperature>
+    <relative_humidity>
+      <Id>1</Id>
+      <Name>humidity</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.relative_humidity</MimeType>
+      <meteorological_measurement>1</meteorological_measurement>
+    </relative_humidity>
+    <wind_speed>
+      <Id>1</Id>
+      <Name>wind_speed</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.wind_speed</MimeType>
+      <meteorological_measurement>1</meteorological_measurement>
+    </wind_speed>
+    <sound_measurement>
+      <Id>1</Id>
+      <Name>sound_measurement</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.sound_measurement.sound_measurement</MimeType>
+      <microphone>1 2</microphone>
+      <TestEquipment>1</TestEquipment>
+    </sound_measurement>
+    <microphone>
+      <Id>1</Id>
+      <Name>background_noise</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.microphone</MimeType>
+      <sound_measurement>1</sound_measurement>
+    </microphone>
+    <microphone>
+      <Id>2</Id>
+      <Name>vehicle_noise</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.microphone</MimeType>
+      <sound_measurement>1</sound_measurement>
+    </microphone>
+    <MeaQuantity>
+      <Id>1</Id>
+      <Name>CHANNEL05</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>1</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8136</LocalColumns>
+      <Quantity>1</Quantity>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>2</Id>
+      <Name>CHANNEL08</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>1</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8137</LocalColumns>
+      <Quantity>1</Quantity>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>3</Id>
+      <Name>CHANNEL03</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>1</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8138</LocalColumns>
+      <Quantity>1</Quantity>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>4</Id>
+      <Name>CHANNEL01</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>1</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8139</LocalColumns>
+      <Quantity>1</Quantity>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>5</Id>
+      <Name>CHANNEL06</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>1</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8140</LocalColumns>
+      <Quantity>1</Quantity>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>6</Id>
+      <Name>CHANNEL04</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>1</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8141</LocalColumns>
+      <Quantity>1</Quantity>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>7</Id>
+      <Name>CHANNEL07</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>1</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8142</LocalColumns>
+      <Quantity>1</Quantity>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>8</Id>
+      <Name>CHANNEL02</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>1</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8143</LocalColumns>
+      <Quantity>1</Quantity>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>9</Id>
+      <Name>CHANNEL09</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>1</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8144</LocalColumns>
+      <Quantity>1</Quantity>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>10</Id>
+      <Name>CHANNEL10</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>1</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8145</LocalColumns>
+      <Quantity>1</Quantity>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>11</Id>
+      <Name>X-Axis</Name>
+      <DataType>DT_LONG</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Unit>2</Unit>
+      <MeaResult>1</MeaResult>
+      <LocalColumns>8146</LocalColumns>
+      <Quantity>2</Quantity>
+    </MeaQuantity>
+    <Unit>
+      <Id>1</Id>
+      <Name>Pa</Name>
+      <Factor>1.0</Factor>
+      <Offset>0.0</Offset>
+      <MimeType>application/x-asam.aounit</MimeType>
+      <dB>false</dB>
+      <Quantities>1</Quantities>
+      <PhysDimension>1</PhysDimension>
+      <MeaQuantities>1 2 3 4 5 6 7 8 9 10</MeaQuantities>
+    </Unit>
+    <Unit>
+      <Id>2</Id>
+      <Name>s</Name>
+      <Factor>1.0</Factor>
+      <Offset>0.0</Offset>
+      <MimeType>application/x-asam.aounit</MimeType>
+      <dB>false</dB>
+      <Quantities>2</Quantities>
+      <PhysDimension>2</PhysDimension>
+      <MeaQuantities>11</MeaQuantities>
+    </Unit>
+    <PhysDimension>
+      <Id>1</Id>
+      <Name>pressure</Name>
+      <Length>-1</Length>
+      <Mass>1</Mass>
+      <Time>-2</Time>
+      <Current>0</Current>
+      <Temperature>0</Temperature>
+      <MolarAmount>0</MolarAmount>
+      <LuminousIntensity>0</LuminousIntensity>
+      <MimeType>application/x-asam.aophysicaldimension</MimeType>
+      <Description>unit: pascal</Description>
+      <angle>0</angle>
+      <Units>1</Units>
+    </PhysDimension>
+    <PhysDimension>
+      <Id>2</Id>
+      <Name>time</Name>
+      <Length>0</Length>
+      <Mass>0</Mass>
+      <Time>1</Time>
+      <Current>0</Current>
+      <Temperature>0</Temperature>
+      <MolarAmount>0</MolarAmount>
+      <LuminousIntensity>0</LuminousIntensity>
+      <MimeType>application/x-asam.aophysicaldimension</MimeType>
+      <angle>0</angle>
+      <Units>2</Units>
+    </PhysDimension>
+    <Quantity>
+      <Id>1</Id>
+      <Name>Noise</Name>
+      <Version>1</Version>
+      <MimeType>application/x-asam.aoquantity</MimeType>
+      <DateCreated>20140211133954</DateCreated>
+      <DefaultRank>1</DefaultRank>
+      <DefDimension>0</DefDimension>
+      <DefTypeSize>1</DefTypeSize>
+      <DefMQName>Noise</DefMQName>
+      <DefDataType>DT_FLOAT</DefDataType>
+      <ValidFlag>valid</ValidFlag>
+      <Unit>1</Unit>
+      <MeaQuantities>1 2 3 4 5 6 7 8 9 10</MeaQuantities>
+    </Quantity>
+    <Quantity>
+      <Id>2</Id>
+      <Name>Time</Name>
+      <Version>1</Version>
+      <MimeType>application/x-asam.aoquantity</MimeType>
+      <DateCreated>20140303190409</DateCreated>
+      <DefaultRank>1</DefaultRank>
+      <DefDimension>0</DefDimension>
+      <DefTypeSize>1</DefTypeSize>
+      <DefMQName>Time</DefMQName>
+      <DefDataType>DT_FLOAT</DefDataType>
+      <ValidFlag>valid</ValidFlag>
+      <Unit>2</Unit>
+      <MeaQuantities>11</MeaQuantities>
+    </Quantity>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8136</Id>
+      <Name>CHANNEL05</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>1</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>1</ExternalComponent>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8137</Id>
+      <Name>CHANNEL08</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>2</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>2</ExternalComponent>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8138</Id>
+      <Name>CHANNEL03</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>3</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>3</ExternalComponent>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8139</Id>
+      <Name>CHANNEL01</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>4</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>4</ExternalComponent>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8140</Id>
+      <Name>CHANNEL06</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>5</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>5</ExternalComponent>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8141</Id>
+      <Name>CHANNEL04</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>6</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>6</ExternalComponent>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8142</Id>
+      <Name>CHANNEL07</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>7</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>7</ExternalComponent>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8143</Id>
+      <Name>CHANNEL02</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>8</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>8</ExternalComponent>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8144</Id>
+      <Name>CHANNEL09</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>9</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>9</ExternalComponent>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8145</Id>
+      <Name>CHANNEL10</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>10</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>10</ExternalComponent>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>external_component</SequenceRepresentation>
+      <Id>8146</Id>
+      <Name>X-Axis</Name>
+      <IndependentFlag>1</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <GlobalFlag>15</GlobalFlag>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <axistype>Xaxis</axistype>
+      <MeaQuantity>11</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+      <ExternalComponent>11</ExternalComponent>
+    </LocalColumn>
+    <SubMatrix>
+      <Id>1</Id>
+      <Name>Channel</Name>
+      <SubMatrixNoRows>3001</SubMatrixNoRows>
+      <MimeType>application/x-asam.aosubmatrix</MimeType>
+      <LocalColumns>8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146</LocalColumns>
+      <MeaResult>1</MeaResult>
+    </SubMatrix>
+    <ExternalComponent>
+      <Id>1</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>example_1.bin</FilenameURL>
+      <TypeSpecification>ieeefloat8</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>0</StartOffset>
+      <Blocksize>8</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8136</LocalColumn>
+    </ExternalComponent>
+    <ExternalComponent>
+      <Id>2</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>example_1.bin</FilenameURL>
+      <TypeSpecification>ieeefloat8</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>24008</StartOffset>
+      <Blocksize>8</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8137</LocalColumn>
+    </ExternalComponent>
+    <ExternalComponent>
+      <Id>3</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>example_1.bin</FilenameURL>
+      <TypeSpecification>ieeefloat8</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>48016</StartOffset>
+      <Blocksize>8</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8138</LocalColumn>
+    </ExternalComponent>
+    <ExternalComponent>
+      <Id>4</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>example_1.bin</FilenameURL>
+      <TypeSpecification>ieeefloat8</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>72024</StartOffset>
+      <Blocksize>8</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8139</LocalColumn>
+    </ExternalComponent>
+    <ExternalComponent>
+      <Id>5</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>example_1.bin</FilenameURL>
+      <TypeSpecification>ieeefloat8</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>96032</StartOffset>
+      <Blocksize>8</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8140</LocalColumn>
+    </ExternalComponent>
+    <ExternalComponent>
+      <Id>6</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>example_1.bin</FilenameURL>
+      <TypeSpecification>ieeefloat8</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>120040</StartOffset>
+      <Blocksize>8</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8141</LocalColumn>
+    </ExternalComponent>
+    <ExternalComponent>
+      <Id>7</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>example_1.bin</FilenameURL>
+      <TypeSpecification>ieeefloat8</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>144048</StartOffset>
+      <Blocksize>8</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8142</LocalColumn>
+    </ExternalComponent>
+    <ExternalComponent>
+      <Id>8</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>example_1.bin</FilenameURL>
+      <TypeSpecification>ieeefloat8</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>168056</StartOffset>
+      <Blocksize>8</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8143</LocalColumn>
+    </ExternalComponent>
+    <ExternalComponent>
+      <Id>9</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>example_1.bin</FilenameURL>
+      <TypeSpecification>ieeefloat8</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>192064</StartOffset>
+      <Blocksize>8</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8144</LocalColumn>
+    </ExternalComponent>
+    <ExternalComponent>
+      <Id>10</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>example_1.bin</FilenameURL>
+      <TypeSpecification>ieeefloat8</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>216072</StartOffset>
+      <Blocksize>8</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8145</LocalColumn>
+    </ExternalComponent>
+    <ExternalComponent>
+      <Id>11</Id>
+      <Name>ExtComp</Name>
+      <FilenameURL>example_1.bin</FilenameURL>
+      <TypeSpecification>dt_long</TypeSpecification>
+      <Length>3001</Length>
+      <StartOffset>240080</StartOffset>
+      <Blocksize>4</Blocksize>
+      <ValuesPerBlock>1</ValuesPerBlock>
+      <ValueOffset>0</ValueOffset>
+      <LocalColumn>8146</LocalColumn>
+    </ExternalComponent>
+    <TestSequence>
+      <Id>1</Id>
+      <Name>PBN_emission_testing</Name>
+      <Version>41</Version>
+      <MimeType>application/x-asam.aotestsequence.testsequence</MimeType>
+      <PBN_test_conduction>1</PBN_test_conduction>
+      <track>1</track>
+      <testsite>1</testsite>
+      <MeaResults>1</MeaResults>
+    </TestSequence>
+    <PBN_test_conduction>
+      <Id>1</Id>
+      <Name>test_conduction</Name>
+      <MimeType>application/x-asam.aotestsequencepart.pbn_test_conduction.test_conduction</MimeType>
+      <v_test>70.0</v_test>
+      <PMR>114</PMR>
+      <accelerated>true</accelerated>
+      <tested_vehicle_side>Right</tested_vehicle_side>
+      <TestSequence>1</TestSequence>
+    </PBN_test_conduction>
+    <track>
+      <Id>1</Id>
+      <Name>track</Name>
+      <MimeType>application/x-asam.aotestsequencepart.track.track</MimeType>
+      <residual_voids_content>7.8</residual_voids_content>
+      <sound_absorption_coefficient>0.093</sound_absorption_coefficient>
+      <texture_depth>0.3</texture_depth>
+      <surface_homogeneity>homogenous</surface_homogeneity>
+      <last_check_texture_depth>20140220000000</last_check_texture_depth>
+      <TestSequence>1</TestSequence>
+    </track>
+    <testsite>
+      <Id>1</Id>
+      <Name>testsite</Name>
+      <MimeType>application/x-asam.aotestsequencepart.testsite.testsite</MimeType>
+      <track_id>PBN Area 51</track_id>
+      <TestSequence>1</TestSequence>
+    </testsite>
+    <User>
+      <Id>1</Id>
+      <Name>to</Name>
+      <MimeType>application/x-asam.aouser</MimeType>
+      <GivenName>dummy</GivenName>
+      <Surname>dummy</Surname>
+      <users2groups>1</users2groups>
+      <Tests>1</Tests>
+    </User>
+    <Role>
+      <Id>1</Id>
+      <Name>TestOperator</Name>
+      <SuperuserFlag>0</SuperuserFlag>
+      <MimeType>application/x-asam.aorole</MimeType>
+      <groups2users>1</groups2users>
+    </Role>
+  </instance_data>
+</atfx_file>
\ No newline at end of file
diff --git a/org.eclipse.mdm.apicopy/src/test/resources/example_1.bin b/org.eclipse.mdm.apicopy/src/test/resources/example_1.bin
new file mode 100644
index 0000000..1cece2d
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/test/resources/example_1.bin
Binary files differ
diff --git a/org.eclipse.mdm.apicopy/src/test/resources/importtasktest.atfx b/org.eclipse.mdm.apicopy/src/test/resources/importtasktest.atfx
new file mode 100644
index 0000000..e94f8ab
--- /dev/null
+++ b/org.eclipse.mdm.apicopy/src/test/resources/importtasktest.atfx
@@ -0,0 +1,6563 @@
+<atfx_file xmlns="http://www.asam.net/ODS/5.2.0/Schema" version="atfx_file: V1.2.0">
+  <documentation>
+    <exported_by>openATFX</exported_by>
+    <exporter>openATFX</exporter>
+    <export_date_time>20191122144629</export_date_time>
+    <exporter_version>0.7.4</exporter_version>
+  </documentation>
+  <base_model_version>asam30</base_model_version>
+  <application_model>
+    <application_enumeration>
+      <name>valid_enum</name>
+      <item>
+        <name>editing</name>
+        <value>0</value>
+      </item>
+      <item>
+        <name>valid</name>
+        <value>1</value>
+      </item>
+      <item>
+        <name>archive</name>
+        <value>2</value>
+      </item>
+    </application_enumeration>
+    <application_enumeration>
+      <name>axistype</name>
+      <item>
+        <name>Xaxis</name>
+        <value>0</value>
+      </item>
+      <item>
+        <name>Yaxis</name>
+        <value>1</value>
+      </item>
+      <item>
+        <name>Both</name>
+        <value>2</value>
+      </item>
+    </application_enumeration>
+    <application_element>
+      <name>Environment</name>
+      <basetype>AoEnvironment</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <obligatory>true</obligatory>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Max_test_level</name>
+        <base_attribute>max_test_level</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Base_model_version</name>
+        <base_attribute>base_model_version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>AppModelType</name>
+        <base_attribute>application_model_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>AppModelVersion</name>
+        <base_attribute>application_model_version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Timezone</name>
+        <base_attribute>timezone</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MeaningOfAliases</name>
+        <base_attribute>meaning_of_aliases</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+    </application_element>
+    <application_element>
+      <name>CatSensor</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplSensor</name>
+        <ref_to>TplSensor</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>CatSensor</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>CatSensorAttr</name>
+        <ref_to>CatSensorAttr</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>CatSensor</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>CatTestEquipmentComp</name>
+        <ref_to>CatTestEquipmentComp</ref_to>
+        <base_relation>parent</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>CatSensor</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>CatSensorAttr</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ValueListRef</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>ValueCopyable</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>ActionRequestClassname</name>
+        <datatype>DT_STRING</datatype>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ActionRequestParameter</name>
+        <datatype>DT_STRING</datatype>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Sortindex</name>
+        <datatype>DT_LONG</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>CatSensor</name>
+        <ref_to>CatSensor</ref_to>
+        <base_relation>parent</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>CatSensorAttr</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplSensorAttr</name>
+        <ref_to>TplSensorAttr</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>CatSensorAttr</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>CatTestEquipmentComp</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ValidFlag</name>
+        <datatype>DT_ENUM</datatype>
+        <enumeration_type>valid_enum</enumeration_type>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>CatSensor</name>
+        <ref_to>CatSensor</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>CatTestEquipmentComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>CatTestEquipmentAttr</name>
+        <ref_to>CatTestEquipmentAttr</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>CatTestEquipmentComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTestEquipmentComp</name>
+        <ref_to>TplTestEquipmentComp</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>CatTestEquipmentComp</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>CatTestEquipmentAttr</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ValueListRef</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>ValueCopyable</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>ActionRequestClassname</name>
+        <datatype>DT_STRING</datatype>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ActionRequestParameter</name>
+        <datatype>DT_STRING</datatype>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Sortindex</name>
+        <datatype>DT_LONG</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplTestEquipmentAttr</name>
+        <ref_to>TplTestEquipmentAttr</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>CatTestEquipmentAttr</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>CatTestEquipmentComp</name>
+        <ref_to>CatTestEquipmentComp</ref_to>
+        <base_relation>parent</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>CatTestEquipmentAttr</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>CatTestSequenceComp</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ValidFlag</name>
+        <datatype>DT_ENUM</datatype>
+        <enumeration_type>valid_enum</enumeration_type>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>CatTestSequenceAttr</name>
+        <ref_to>CatTestSequenceAttr</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>CatTestSequenceComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTestSequenceComp</name>
+        <ref_to>TplTestSequenceComp</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>CatTestSequenceComp</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>CatTestSequenceAttr</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ValueListRef</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>ValueCopyable</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>ActionRequestClassname</name>
+        <datatype>DT_STRING</datatype>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ActionRequestParameter</name>
+        <datatype>DT_STRING</datatype>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Sortindex</name>
+        <datatype>DT_LONG</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>CatTestSequenceComp</name>
+        <ref_to>CatTestSequenceComp</ref_to>
+        <base_relation>parent</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>CatTestSequenceAttr</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTestSequenceAttr</name>
+        <ref_to>TplTestSequenceAttr</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>CatTestSequenceAttr</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>CatUnitUnderTestComp</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ValidFlag</name>
+        <datatype>DT_ENUM</datatype>
+        <enumeration_type>valid_enum</enumeration_type>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>CatUnitUnderTestAttr</name>
+        <ref_to>CatUnitUnderTestAttr</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>CatUnitUnderTestComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplUnitUnderTestComp</name>
+        <ref_to>TplUnitUnderTestComp</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>CatUnitUnderTestComp</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>CatUnitUnderTestAttr</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>1500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ValueListRef</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>ValueCopyable</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>ActionRequestClassname</name>
+        <datatype>DT_STRING</datatype>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ActionRequestParameter</name>
+        <datatype>DT_STRING</datatype>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Sortindex</name>
+        <datatype>DT_LONG</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>CatUnitUnderTestComp</name>
+        <ref_to>CatUnitUnderTestComp</ref_to>
+        <base_relation>parent</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>CatUnitUnderTestAttr</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplUnitUnderTestAttr</name>
+        <ref_to>TplUnitUnderTestAttr</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>CatUnitUnderTestAttr</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TplGroup</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplTestEquipmentRoot</name>
+        <ref_to>TplTestEquipmentRoot</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplGroup</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTest</name>
+        <ref_to>TplTest</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplGroup</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTestSequenceRoot</name>
+        <ref_to>TplTestSequenceRoot</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplGroup</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTestStep</name>
+        <ref_to>TplTestStep</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplGroup</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplGroupParent</name>
+        <ref_to>TplGroup</ref_to>
+        <base_relation>parent</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplGroupChild</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplGroupChild</name>
+        <ref_to>TplGroup</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplGroupParent</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplUnitUnderTestRoot</name>
+        <ref_to>TplUnitUnderTestRoot</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplGroup</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplMeaResult</name>
+        <ref_to>TplMeaResult</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplGroup</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TplMeaResult</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ValidFlag</name>
+        <datatype>DT_ENUM</datatype>
+        <enumeration_type>valid_enum</enumeration_type>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>DefaultMimeType</name>
+        <datatype>DT_STRING</datatype>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DefaultName</name>
+        <datatype>DT_STRING</datatype>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplSubMatrix</name>
+        <ref_to>TplSubMatrix</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplMeaResult</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTestStep</name>
+        <ref_to>TplTestStep</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplMeaResult</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplGroup</name>
+        <ref_to>TplGroup</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplMeaResult</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResult</name>
+        <ref_to>MeaResult</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplMeaResult</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplParameterSet</name>
+        <ref_to>TplParameterSet</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplMeaResult</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TplSensor</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Optional</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>DefaultActive</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>Sortindex</name>
+        <datatype>DT_LONG</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>MeaQuantityValuesEditable</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>MeaQuantityIndependent</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>MeaQuantityAxisType</name>
+        <datatype>DT_ENUM</datatype>
+        <enumeration_type>axistype</enumeration_type>
+      </application_attribute>
+      <application_attribute>
+        <name>MeaQuantityEditorPlugin</name>
+        <datatype>DT_STRING</datatype>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>CatSensor</name>
+        <ref_to>CatSensor</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplSensor</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplSensorAttr</name>
+        <ref_to>TplSensorAttr</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplSensor</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Quantity</name>
+        <ref_to>Quantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplSensor</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>barometric_pressure</name>
+        <ref_to>barometric_pressure</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplSensor</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplParameterSet</name>
+        <ref_to>TplParameterSet</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplSensor</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>speed</name>
+        <ref_to>speed</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplSensor</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>rotational_speed</name>
+        <ref_to>rotational_speed</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplSensor</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>acceleration</name>
+        <ref_to>acceleration</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplSensor</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>temperature</name>
+        <ref_to>temperature</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplSensor</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>wind_speed</name>
+        <ref_to>wind_speed</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplSensor</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTestEquipmentComp</name>
+        <ref_to>TplTestEquipmentComp</ref_to>
+        <base_relation>parent</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplSensor</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>microphone</name>
+        <ref_to>microphone</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplSensor</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>relative_humidity</name>
+        <ref_to>relative_humidity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplSensor</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TplSensorAttr</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DefaultValue</name>
+        <datatype>DT_STRING</datatype>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ValueReadonly</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>Obligatory</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplSensor</name>
+        <ref_to>TplSensor</ref_to>
+        <base_relation>parent</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplSensorAttr</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>CatSensorAttr</name>
+        <ref_to>CatSensorAttr</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplSensorAttr</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TplSubMatrix</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MinNoRows</name>
+        <datatype>DT_LONG</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>MaxNoRows</name>
+        <datatype>DT_LONG</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplMeaResult</name>
+        <ref_to>TplMeaResult</ref_to>
+        <base_relation>parent</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplSubMatrix</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>SubMatrix</name>
+        <ref_to>SubMatrix</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplSubMatrix</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TplTest</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>NameHelperClassname</name>
+        <datatype>DT_STRING</datatype>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DataSourcePluginClassnames</name>
+        <datatype>DS_STRING</datatype>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>TestOrderActionClassnames</name>
+        <datatype>DS_STRING</datatype>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ValidFlag</name>
+        <datatype>DT_ENUM</datatype>
+        <enumeration_type>valid_enum</enumeration_type>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplTestStepUsage</name>
+        <ref_to>TplTestStepUsage</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplGroup</name>
+        <ref_to>TplGroup</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Tests</name>
+        <ref_to>Test</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTest</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TplTestEquipmentAttr</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DefaultValue</name>
+        <datatype>DT_STRING</datatype>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ValueReadonly</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>Obligatory</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplTestEquipmentComp</name>
+        <ref_to>TplTestEquipmentComp</ref_to>
+        <base_relation>parent</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplTestEquipmentAttr</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>CatTestEquipmentAttr</name>
+        <ref_to>CatTestEquipmentAttr</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplTestEquipmentAttr</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TplTestEquipmentRoot</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ValidFlag</name>
+        <datatype>DT_ENUM</datatype>
+        <enumeration_type>valid_enum</enumeration_type>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplTestStep</name>
+        <ref_to>TplTestStep</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTestEquipmentRoot</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplGroup</name>
+        <ref_to>TplGroup</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplTestEquipmentRoot</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTestEquipmentComp</name>
+        <ref_to>TplTestEquipmentComp</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTestEquipmentRoot</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestEquipment</name>
+        <ref_to>TestEquipment</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTestEquipmentRoot</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TplTestEquipmentComp</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Optional</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>DefaultActive</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>TestStepSeriesVariable</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>Sortindex</name>
+        <datatype>DT_LONG</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplTestEquipmentRoot</name>
+        <ref_to>TplTestEquipmentRoot</ref_to>
+        <base_relation>parent</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplTestEquipmentComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>vehicle_measurement</name>
+        <ref_to>vehicle_measurement</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTestEquipmentComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>sound_measurement</name>
+        <ref_to>sound_measurement</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTestEquipmentComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplSensor</name>
+        <ref_to>TplSensor</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTestEquipmentComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplCompParent</name>
+        <ref_to>TplTestEquipmentComp</ref_to>
+        <base_relation>parent</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplCompChildren</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>meteorological_measurement</name>
+        <ref_to>meteorological_measurement</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTestEquipmentComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTestEquipmentAttr</name>
+        <ref_to>TplTestEquipmentAttr</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTestEquipmentComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplCompChildren</name>
+        <ref_to>TplTestEquipmentComp</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplCompParent</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>CatTestEquipmentComp</name>
+        <ref_to>CatTestEquipmentComp</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplTestEquipmentComp</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TplTestSequenceAttr</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DefaultValue</name>
+        <datatype>DT_STRING</datatype>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ValueReadonly</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>Obligatory</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>CatTestSequenceAttr</name>
+        <ref_to>CatTestSequenceAttr</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplTestSequenceAttr</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTestSequenceComp</name>
+        <ref_to>TplTestSequenceComp</ref_to>
+        <base_relation>parent</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplTestSequenceAttr</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TplTestSequenceRoot</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ValidFlag</name>
+        <datatype>DT_ENUM</datatype>
+        <enumeration_type>valid_enum</enumeration_type>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplTestStep</name>
+        <ref_to>TplTestStep</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTestSequenceRoot</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTestSequenceComp</name>
+        <ref_to>TplTestSequenceComp</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTestSequenceRoot</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplGroup</name>
+        <ref_to>TplGroup</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplTestSequenceRoot</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSequence</name>
+        <ref_to>TestSequence</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTestSequenceRoot</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TplTestSequenceComp</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Optional</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>DefaultActive</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>TestStepSeriesVariable</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>Sortindex</name>
+        <datatype>DT_LONG</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>SVN_test_conduction</name>
+        <ref_to>SVN_test_conduction</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTestSequenceComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTestSequenceRoot</name>
+        <ref_to>TplTestSequenceRoot</ref_to>
+        <base_relation>parent</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplTestSequenceComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>CatTestSequenceComp</name>
+        <ref_to>CatTestSequenceComp</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplTestSequenceComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplCompParent</name>
+        <ref_to>TplTestSequenceComp</ref_to>
+        <base_relation>parent</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplCompChildren</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>PBN_test_conduction</name>
+        <ref_to>PBN_test_conduction</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTestSequenceComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>testsite</name>
+        <ref_to>testsite</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTestSequenceComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>track</name>
+        <ref_to>track</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTestSequenceComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplCompChildren</name>
+        <ref_to>TplTestSequenceComp</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplCompParent</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTestSequenceAttr</name>
+        <ref_to>TplTestSequenceAttr</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTestSequenceComp</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TplTestStepUsage</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DefaultActive</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>Optional</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>Sortindex</name>
+        <datatype>DT_LONG</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplTest</name>
+        <ref_to>TplTest</ref_to>
+        <base_relation>parent</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplTestStepUsage</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTestStep</name>
+        <ref_to>TplTestStep</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplTestStepUsage</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TplUnitUnderTestAttr</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DefaultValue</name>
+        <datatype>DT_STRING</datatype>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ValueReadonly</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>Obligatory</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplUnitUnderTestComp</name>
+        <ref_to>TplUnitUnderTestComp</ref_to>
+        <base_relation>parent</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplUnitUnderTestAttr</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>CatUnitUnderTestAttr</name>
+        <ref_to>CatUnitUnderTestAttr</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplUnitUnderTestAttr</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TplUnitUnderTestRoot</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ValidFlag</name>
+        <datatype>DT_ENUM</datatype>
+        <enumeration_type>valid_enum</enumeration_type>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplTestStep</name>
+        <ref_to>TplTestStep</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplUnitUnderTestRoot</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplGroup</name>
+        <ref_to>TplGroup</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplUnitUnderTestRoot</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplUnitUnderTestComp</name>
+        <ref_to>TplUnitUnderTestComp</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplUnitUnderTestRoot</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplUnitUnderTestRoot</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TplTestStep</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>ValidFlag</name>
+        <datatype>DT_ENUM</datatype>
+        <enumeration_type>valid_enum</enumeration_type>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplTestEquipmentRoot</name>
+        <ref_to>TplTestEquipmentRoot</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplTestStep</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTestSequenceRoot</name>
+        <ref_to>TplTestSequenceRoot</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplTestStep</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSteps</name>
+        <ref_to>TestStep</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTestStep</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTestStepUsage</name>
+        <ref_to>TplTestStepUsage</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTestStep</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplUnitUnderTestRoot</name>
+        <ref_to>TplUnitUnderTestRoot</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplTestStep</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplGroup</name>
+        <ref_to>TplGroup</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplTestStep</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplMeaResult</name>
+        <ref_to>TplMeaResult</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplTestStep</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TplUnitUnderTestComp</name>
+      <basetype>AoAny</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Optional</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>DefaultActive</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>TestStepSeriesVariable</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>Sortindex</name>
+        <datatype>DT_LONG</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>exhaust_piping</name>
+        <ref_to>exhaust_piping</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplUnitUnderTestComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>noise_reduction_system</name>
+        <ref_to>noise_reduction_system</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplUnitUnderTestComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplCompParent</name>
+        <ref_to>TplUnitUnderTestComp</ref_to>
+        <base_relation>parent</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplCompChildren</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>air_filter</name>
+        <ref_to>air_filter</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplUnitUnderTestComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplCompChildren</name>
+        <ref_to>TplUnitUnderTestComp</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplCompParent</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>tyre</name>
+        <ref_to>tyre</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplUnitUnderTestComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>vehicle</name>
+        <ref_to>vehicle</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplUnitUnderTestComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>expansion_chamber</name>
+        <ref_to>expansion_chamber</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplUnitUnderTestComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>CatUnitUnderTestComp</name>
+        <ref_to>CatUnitUnderTestComp</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplUnitUnderTestComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>silencer</name>
+        <ref_to>silencer</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplUnitUnderTestComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>engine</name>
+        <ref_to>engine</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplUnitUnderTestComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplUnitUnderTestRoot</name>
+        <ref_to>TplUnitUnderTestRoot</ref_to>
+        <base_relation>parent</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplUnitUnderTestComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>gearbox</name>
+        <ref_to>gearbox</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplUnitUnderTestComp</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplUnitUnderTestAttr</name>
+        <ref_to>TplUnitUnderTestAttr</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplUnitUnderTestComp</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>PhysDimension</name>
+      <basetype>AoPhysicalDimension</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Length</name>
+        <base_attribute>length_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Mass</name>
+        <base_attribute>mass_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Time</name>
+        <base_attribute>time_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Current</name>
+        <base_attribute>current_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Temperature</name>
+        <base_attribute>temperature_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MolarAmount</name>
+        <base_attribute>molar_amount_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>LuminousIntensity</name>
+        <base_attribute>luminous_intensity_exp</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>angle</name>
+        <datatype>DT_LONG</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>Units</name>
+        <ref_to>Unit</ref_to>
+        <base_relation>units</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>PhysDimension</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>Project</name>
+      <basetype>AoTest</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>StructureLevel</name>
+        <ref_to>StructureLevel</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Project</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>ResultParameterSet</name>
+      <basetype>AoParameterSet</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ResultParameterSet</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ResultParameter</name>
+        <ref_to>ResultParameter</ref_to>
+        <base_relation>parameters</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>ResultParameterSet</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResult</name>
+        <ref_to>MeaResult</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ResultParameterSet</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>Role</name>
+      <basetype>AoUserGroup</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>SuperuserFlag</name>
+        <base_attribute>superuser_flag</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>groups2users</name>
+        <ref_to>User</ref_to>
+        <base_relation>users</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>users2groups</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TestEquipment</name>
+      <basetype>AoTestEquipment</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplTestEquipmentRoot</name>
+        <ref_to>TplTestEquipmentRoot</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TestEquipment</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>vehicle_measurement</name>
+        <ref_to>vehicle_measurement</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestEquipment</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResults</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>measurement</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestEquipment</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>sound_measurement</name>
+        <ref_to>sound_measurement</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestEquipment</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSteps</name>
+        <ref_to>TestStep</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestEquipment</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>meteorological_measurement</name>
+        <ref_to>meteorological_measurement</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestEquipment</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TestSequence</name>
+      <basetype>AoTestSequence</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>MeaResults</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>measurement</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestSequence</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>SVN_test_conduction</name>
+        <ref_to>SVN_test_conduction</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestSequence</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTestSequenceRoot</name>
+        <ref_to>TplTestSequenceRoot</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TestSequence</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSteps</name>
+        <ref_to>TestStep</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestSequence</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>PBN_test_conduction</name>
+        <ref_to>PBN_test_conduction</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestSequence</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>testsite</name>
+        <ref_to>testsite</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestSequence</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>track</name>
+        <ref_to>track</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestSequence</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TplParameterSet</name>
+      <basetype>AoParameterSet</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplSensor</name>
+        <ref_to>TplSensor</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplParameterSet</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplMeaResult</name>
+        <ref_to>TplMeaResult</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplParameterSet</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplParameter</name>
+        <ref_to>TplParameter</ref_to>
+        <base_relation>parameters</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TplParameterSet</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>Unit</name>
+      <basetype>AoUnit</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Factor</name>
+        <base_attribute>factor</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Offset</name>
+        <base_attribute>offset</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>dB</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>dB_reference_factor</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>ResultParameter</name>
+        <ref_to>ResultParameter</ref_to>
+        <base_relation>parameters</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Unit</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>PhysDimension</name>
+        <ref_to>PhysDimension</ref_to>
+        <base_relation>phys_dimension</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>Units</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantities</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Unit</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Quantities</name>
+        <ref_to>Quantity</ref_to>
+        <base_relation>quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Unit</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplParameter</name>
+        <ref_to>TplParameter</ref_to>
+        <base_relation>parameters</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Unit</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>Quantity</name>
+      <basetype>AoQuantity</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DefaultRank</name>
+        <base_attribute>default_rank</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>DefDimension</name>
+        <base_attribute>default_dimension</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>DefTypeSize</name>
+        <base_attribute>default_type_size</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>DefMQName</name>
+        <base_attribute>default_mq_name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DefDataType</name>
+        <base_attribute>default_datatype</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>ValidFlag</name>
+        <datatype>DT_ENUM</datatype>
+        <enumeration_type>valid_enum</enumeration_type>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplSensor</name>
+        <ref_to>TplSensor</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Quantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantities</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Quantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Unit</name>
+        <ref_to>Unit</ref_to>
+        <base_relation>default_unit</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>Quantities</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>UnitUnderTest</name>
+      <basetype>AoUnitUnderTest</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Version</name>
+        <base_attribute>version</base_attribute>
+        <obligatory>true</obligatory>
+        <length>20</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>exhaust_piping</name>
+        <ref_to>exhaust_piping</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>expansion_chamber</name>
+        <ref_to>expansion_chamber</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResults</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>measurement</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>noise_reduction_system</name>
+        <ref_to>noise_reduction_system</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>silencer</name>
+        <ref_to>silencer</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSteps</name>
+        <ref_to>TestStep</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>engine</name>
+        <ref_to>engine</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplUnitUnderTestRoot</name>
+        <ref_to>TplUnitUnderTestRoot</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>air_filter</name>
+        <ref_to>air_filter</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>gearbox</name>
+        <ref_to>gearbox</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>tyre</name>
+        <ref_to>tyre</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>vehicle</name>
+        <ref_to>vehicle</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>UnitUnderTest</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>User</name>
+      <basetype>AoUser</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Password</name>
+        <base_attribute>password</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>GivenName</name>
+        <datatype>DT_STRING</datatype>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Surname</name>
+        <datatype>DT_STRING</datatype>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Department</name>
+        <datatype>DT_STRING</datatype>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Telephone</name>
+        <datatype>DT_STRING</datatype>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>E-Mail</name>
+        <datatype>DT_STRING</datatype>
+        <length>50</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>users2groups</name>
+        <ref_to>Role</ref_to>
+        <base_relation>groups</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>groups2users</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Tests</name>
+        <ref_to>Test</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>ResponsiblePerson</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>ResultParameter</name>
+      <basetype>AoParameter</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DataType</name>
+        <base_attribute>parameter_datatype</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Value</name>
+        <base_attribute>pvalue</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>ResultParameterSet</name>
+        <ref_to>ResultParameterSet</ref_to>
+        <base_relation>parameter_set</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ResultParameter</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Unit</name>
+        <ref_to>Unit</ref_to>
+        <base_relation>unit</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ResultParameter</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>SubMatrix</name>
+        <ref_to>SubMatrix</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ResultParameter</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>StructureLevel</name>
+      <basetype>AoSubTest</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>Project</name>
+        <ref_to>Project</ref_to>
+        <base_relation>parent_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>StructureLevel</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Tests</name>
+        <ref_to>Test</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>StructureLevel</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TplParameter</name>
+      <basetype>AoParameter</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DefaultDataType</name>
+        <base_attribute>parameter_datatype</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>DefaultValue</name>
+        <base_attribute>pvalue</base_attribute>
+        <obligatory>true</obligatory>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>Unit</name>
+        <ref_to>Unit</ref_to>
+        <base_relation>unit</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplParameter</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplParameterSet</name>
+        <ref_to>TplParameterSet</ref_to>
+        <base_relation>parameter_set</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TplParameter</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>Test</name>
+      <basetype>AoSubTest</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MDMLinks</name>
+        <base_attribute>external_references</base_attribute>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateClosed</name>
+        <datatype>DT_DATE</datatype>
+        <length>30</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplTest</name>
+        <ref_to>TplTest</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>Tests</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSteps</name>
+        <ref_to>TestStep</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>Test</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ResponsiblePerson</name>
+        <ref_to>User</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>Tests</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>StructureLevel</name>
+        <ref_to>StructureLevel</ref_to>
+        <base_relation>parent_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>Tests</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>TestStep</name>
+      <basetype>AoSubTest</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MDMLinks</name>
+        <base_attribute>external_references</base_attribute>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Optional</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>Sortindex</name>
+        <datatype>DT_LONG</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <relation_attribute>
+        <name>MeaResults</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>TestStep</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTestStep</name>
+        <ref_to>TplTestStep</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TestSteps</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Test</name>
+        <ref_to>Test</ref_to>
+        <base_relation>parent_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TestSteps</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSequence</name>
+        <ref_to>TestSequence</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TestSteps</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestEquipment</name>
+        <ref_to>TestEquipment</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TestSteps</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>TestSteps</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>MeaResult</name>
+      <basetype>AoMeasurement</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>100</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DateCreated</name>
+        <base_attribute>version_date</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MeasurementBegin</name>
+        <base_attribute>measurement_begin</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MeasurementEnd</name>
+        <base_attribute>measurement_end</base_attribute>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MDMLinks</name>
+        <base_attribute>external_references</base_attribute>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TestStep</name>
+        <ref_to>TestStep</ref_to>
+        <base_relation>test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaResults</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ResultParameterSet</name>
+        <ref_to>ResultParameterSet</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>MeaResult</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>SubMatrices</name>
+        <ref_to>SubMatrix</ref_to>
+        <base_relation>submatrices</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>MeaResult</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantities</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>MeaResult</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplMeaResult</name>
+        <ref_to>TplMeaResult</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaResult</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSequence</name>
+        <ref_to>TestSequence</ref_to>
+        <base_relation>sequences</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaResults</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestEquipment</name>
+        <ref_to>TestEquipment</ref_to>
+        <base_relation>equipments</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaResults</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>units_under_test</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaResults</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>MeaQuantity</name>
+      <basetype>AoMeasurementQuantity</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>DataType</name>
+        <base_attribute>datatype</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Description</name>
+        <base_attribute>description</base_attribute>
+        <length>500</length>
+      </application_attribute>
+      <application_attribute>
+        <name>Interpolation</name>
+        <base_attribute>interpolation</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Rank</name>
+        <base_attribute>rank</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Dimension</name>
+        <base_attribute>dimension</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>TypeSize</name>
+        <base_attribute>type_size</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Minimum</name>
+        <base_attribute>minimum</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Maximum</name>
+        <base_attribute>maximum</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Average</name>
+        <base_attribute>average</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Deviation</name>
+        <base_attribute>standard_deviation</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>non_reference_channel_name</name>
+        <datatype>DT_STRING</datatype>
+        <length>128</length>
+      </application_attribute>
+      <application_attribute>
+        <name>reference_channel_name</name>
+        <datatype>DT_STRING</datatype>
+        <length>128</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>ResultParameterSet</name>
+        <ref_to>ResultParameterSet</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Quantity</name>
+        <ref_to>Quantity</ref_to>
+        <base_relation>quantity</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantities</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>barometric_pressure</name>
+        <ref_to>barometric_pressure</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>Unit</name>
+        <ref_to>Unit</ref_to>
+        <base_relation>unit</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantities</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>speed</name>
+        <ref_to>speed</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>rotational_speed</name>
+        <ref_to>rotational_speed</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>acceleration</name>
+        <ref_to>acceleration</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>temperature</name>
+        <ref_to>temperature</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>wind_speed</name>
+        <ref_to>wind_speed</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>LocalColumns</name>
+        <ref_to>LocalColumn</ref_to>
+        <base_relation>local_columns</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>microphone</name>
+        <ref_to>microphone</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>relative_humidity</name>
+        <ref_to>relative_humidity</ref_to>
+        <base_relation>channel</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResult</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>measurement</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>MeaQuantities</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>SubMatrix</name>
+      <basetype>AoSubmatrix</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>SubMatrixNoRows</name>
+        <base_attribute>number_of_rows</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>y-axis-for-x-axis</name>
+        <ref_to>SubMatrix</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>x-axis-for-y-axis</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplSubMatrix</name>
+        <ref_to>TplSubMatrix</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>SubMatrix</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ResultParameter</name>
+        <ref_to>ResultParameter</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>SubMatrix</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>y-axis-for-z-axis</name>
+        <ref_to>SubMatrix</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>z-axis-for-y-axis</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>x-axis-for-y-axis</name>
+        <ref_to>SubMatrix</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>y-axis-for-x-axis</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>LocalColumns</name>
+        <ref_to>LocalColumn</ref_to>
+        <base_relation>local_columns</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>SubMatrix</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>z-axis-for-y-axis</name>
+        <ref_to>SubMatrix</ref_to>
+        <min_occurs>0</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>y-axis-for-z-axis</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaResult</name>
+        <ref_to>MeaResult</ref_to>
+        <base_relation>measurement</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>SubMatrices</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>LocalColumn</name>
+      <basetype>AoLocalColumn</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>IndependentFlag</name>
+        <base_attribute>independent</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>SequenceRepresentation</name>
+        <base_attribute>sequence_representation</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>GlobalFlag</name>
+        <base_attribute>global_flag</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Values</name>
+        <base_attribute>values</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>Flags</name>
+        <base_attribute>flags</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>GenerationParameters</name>
+        <base_attribute>generation_parameters</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>RawDatatype</name>
+        <base_attribute>raw_datatype</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>axistype</name>
+        <datatype>DT_ENUM</datatype>
+        <enumeration_type>axistype</enumeration_type>
+      </application_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantity</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>LocalColumns</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>ExternalComponent</name>
+        <ref_to>ExternalComponent</ref_to>
+        <base_relation>external_component</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>LocalColumn</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>SubMatrix</name>
+        <ref_to>SubMatrix</ref_to>
+        <base_relation>submatrix</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>LocalColumns</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>ExternalComponent</name>
+      <basetype>AoExternalComponent</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>150</length>
+      </application_attribute>
+      <application_attribute>
+        <name>FilenameURL</name>
+        <base_attribute>filename_url</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>TypeSpecification</name>
+        <base_attribute>value_type</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Length</name>
+        <base_attribute>component_length</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>StartOffset</name>
+        <base_attribute>start_offset</base_attribute>
+        <datatype>DT_LONG</datatype>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Blocksize</name>
+        <base_attribute>block_size</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>ValuesPerBlock</name>
+        <base_attribute>valuesperblock</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>ValueOffset</name>
+        <base_attribute>value_offset</base_attribute>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>OrdinalNumber</name>
+        <base_attribute>ordinal_number</base_attribute>
+      </application_attribute>
+      <application_attribute>
+        <name>FlagsFilenameURL</name>
+        <base_attribute>flags_filename_url</base_attribute>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>FlagsStartOffset</name>
+        <base_attribute>flags_start_offset</base_attribute>
+        <datatype>DT_LONG</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>LocalColumn</name>
+        <ref_to>LocalColumn</ref_to>
+        <base_relation>local_column</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>ExternalComponent</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>air_filter</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>min_bulk_material_density</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplUnitUnderTestComp</name>
+        <ref_to>TplUnitUnderTestComp</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>air_filter</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>air_filter</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>engine</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>model</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>type</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>power</name>
+        <datatype>DT_SHORT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplUnitUnderTestComp</name>
+        <ref_to>TplUnitUnderTestComp</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>engine</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>engine</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>exhaust_piping</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>material</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>length</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplUnitUnderTestComp</name>
+        <ref_to>TplUnitUnderTestComp</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>exhaust_piping</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>exhaust_piping</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>expansion_chamber</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>volume</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplUnitUnderTestComp</name>
+        <ref_to>TplUnitUnderTestComp</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>expansion_chamber</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>expansion_chamber</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>gearbox</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>transmission</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>no_forward_gears</name>
+        <datatype>DT_SHORT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplUnitUnderTestComp</name>
+        <ref_to>TplUnitUnderTestComp</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>gearbox</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>gearbox</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>noise_reduction_system</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>design_family</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplUnitUnderTestComp</name>
+        <ref_to>TplUnitUnderTestComp</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>noise_reduction_system</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>noise_reduction_system</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>silencer</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>location</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>model</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>type</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>fibre_type</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplUnitUnderTestComp</name>
+        <ref_to>TplUnitUnderTestComp</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>silencer</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>silencer</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>tyre</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>axle</name>
+        <datatype>DT_SHORT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>side</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>size</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>tread_depth</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplUnitUnderTestComp</name>
+        <ref_to>TplUnitUnderTestComp</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>tyre</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>tyre</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>vehicle</name>
+      <basetype>AoUnitUnderTestPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>model</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>vehicle_type</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>vehicle_category</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>maximum_authorized_mass</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>length</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>reference_point</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>mass_in_running_order</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplUnitUnderTestComp</name>
+        <ref_to>TplUnitUnderTestComp</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>vehicle</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>UnitUnderTest</name>
+        <ref_to>UnitUnderTest</ref_to>
+        <base_relation>parent_unit_under_test</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>vehicle</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>PBN_test_conduction</name>
+      <basetype>AoTestSequencePart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>tested_vehicle_side</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>v_test</name>
+        <datatype>DT_LONG</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>PMR</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>accelerated</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplTestSequenceComp</name>
+        <ref_to>TplTestSequenceComp</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>PBN_test_conduction</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSequence</name>
+        <ref_to>TestSequence</ref_to>
+        <base_relation>parent_sequence</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>PBN_test_conduction</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>SVN_test_conduction</name>
+      <basetype>AoTestSequencePart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplTestSequenceComp</name>
+        <ref_to>TplTestSequenceComp</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>SVN_test_conduction</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSequence</name>
+        <ref_to>TestSequence</ref_to>
+        <base_relation>parent_sequence</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>SVN_test_conduction</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>testsite</name>
+      <basetype>AoTestSequencePart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>track_id</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplTestSequenceComp</name>
+        <ref_to>TplTestSequenceComp</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>testsite</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSequence</name>
+        <ref_to>TestSequence</ref_to>
+        <base_relation>parent_sequence</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>testsite</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>track</name>
+      <basetype>AoTestSequencePart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>residual_voids_content</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>sound_absorption_coefficient</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>texture_depth</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>surface_homogeneity</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>last_check_texture_depth</name>
+        <datatype>DT_DATE</datatype>
+        <length>30</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplTestSequenceComp</name>
+        <ref_to>TplTestSequenceComp</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>track</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestSequence</name>
+        <ref_to>TestSequence</ref_to>
+        <base_relation>parent_sequence</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>track</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>meteorological_measurement</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>temperature</name>
+        <ref_to>temperature</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>meteorological_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>barometric_pressure</name>
+        <ref_to>barometric_pressure</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>meteorological_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>wind_speed</name>
+        <ref_to>wind_speed</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>meteorological_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTestEquipmentComp</name>
+        <ref_to>TplTestEquipmentComp</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>meteorological_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>relative_humidity</name>
+        <ref_to>relative_humidity</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>meteorological_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestEquipment</name>
+        <ref_to>TestEquipment</ref_to>
+        <base_relation>parent_equipment</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>meteorological_measurement</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>sound_measurement</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>TplTestEquipmentComp</name>
+        <ref_to>TplTestEquipmentComp</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>sound_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>microphone</name>
+        <ref_to>microphone</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>sound_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestEquipment</name>
+        <ref_to>TestEquipment</ref_to>
+        <base_relation>parent_equipment</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>sound_measurement</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>vehicle_measurement</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>rotational_speed</name>
+        <ref_to>rotational_speed</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>vehicle_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>acceleration</name>
+        <ref_to>acceleration</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>vehicle_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplTestEquipmentComp</name>
+        <ref_to>TplTestEquipmentComp</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>vehicle_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TestEquipment</name>
+        <ref_to>TestEquipment</ref_to>
+        <base_relation>parent_equipment</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>vehicle_measurement</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>speed</name>
+        <ref_to>speed</ref_to>
+        <base_relation>children</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>vehicle_measurement</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>acceleration</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>direction</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>last_calibration</name>
+        <datatype>DT_DATE</datatype>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>location</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>type_code</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>vehicle_measurement</name>
+        <ref_to>vehicle_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>acceleration</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>acceleration</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplSensor</name>
+        <ref_to>TplSensor</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>acceleration</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>rotational_speed</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>vehicle_measurement</name>
+        <ref_to>vehicle_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>rotational_speed</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>rotational_speed</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplSensor</name>
+        <ref_to>TplSensor</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>rotational_speed</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>speed</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>direction</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>vehicle_measurement</name>
+        <ref_to>vehicle_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>speed</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>speed</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplSensor</name>
+        <ref_to>TplSensor</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>speed</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>microphone</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>distance_from_target</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>heigth_above_ground</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>last_calibration</name>
+        <datatype>DT_DATE</datatype>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>type_code</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>windscreen_applied</name>
+        <datatype>DT_BOOLEAN</datatype>
+      </application_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>microphone</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>sound_measurement</name>
+        <ref_to>sound_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>microphone</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplSensor</name>
+        <ref_to>TplSensor</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>microphone</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>barometric_pressure</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>height_above_ground</name>
+        <datatype>DT_FLOAT</datatype>
+      </application_attribute>
+      <application_attribute>
+        <name>last_calibration</name>
+        <datatype>DT_DATE</datatype>
+        <length>30</length>
+      </application_attribute>
+      <application_attribute>
+        <name>manufacturer</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <application_attribute>
+        <name>type_code</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>barometric_pressure</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplSensor</name>
+        <ref_to>TplSensor</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>barometric_pressure</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>meteorological_measurement</name>
+        <ref_to>meteorological_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>barometric_pressure</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>relative_humidity</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>relative_humidity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplSensor</name>
+        <ref_to>TplSensor</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>relative_humidity</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>meteorological_measurement</name>
+        <ref_to>meteorological_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>relative_humidity</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>temperature</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>temperature</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplSensor</name>
+        <ref_to>TplSensor</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>temperature</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>meteorological_measurement</name>
+        <ref_to>meteorological_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>temperature</inverse_name>
+      </relation_attribute>
+    </application_element>
+    <application_element>
+      <name>wind_speed</name>
+      <basetype>AoTestEquipmentPart</basetype>
+      <application_attribute>
+        <name>Id</name>
+        <base_attribute>id</base_attribute>
+        <autogenerate>true</autogenerate>
+        <obligatory>true</obligatory>
+      </application_attribute>
+      <application_attribute>
+        <name>Name</name>
+        <base_attribute>name</base_attribute>
+        <obligatory>true</obligatory>
+        <length>50</length>
+      </application_attribute>
+      <application_attribute>
+        <name>MimeType</name>
+        <base_attribute>mime_type</base_attribute>
+        <obligatory>true</obligatory>
+        <length>256</length>
+      </application_attribute>
+      <application_attribute>
+        <name>wind_direction</name>
+        <datatype>DT_STRING</datatype>
+        <length>254</length>
+      </application_attribute>
+      <relation_attribute>
+        <name>MeaQuantity</name>
+        <ref_to>MeaQuantity</ref_to>
+        <base_relation>measurement_quantities</base_relation>
+        <min_occurs>0</min_occurs>
+        <max_occurs>Many</max_occurs>
+        <inverse_name>wind_speed</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>TplSensor</name>
+        <ref_to>TplSensor</ref_to>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>wind_speed</inverse_name>
+      </relation_attribute>
+      <relation_attribute>
+        <name>meteorological_measurement</name>
+        <ref_to>meteorological_measurement</ref_to>
+        <base_relation>parent_equipment_part</base_relation>
+        <min_occurs>1</min_occurs>
+        <max_occurs>1</max_occurs>
+        <inverse_name>wind_speed</inverse_name>
+      </relation_attribute>
+    </application_element>
+  </application_model>
+  <instance_data>
+    <Environment>
+      <Id>1</Id>
+      <Name>MDM</Name>
+      <MimeType>application/x-asam.aoenvironment</MimeType>
+      <Description>MDM Environment</Description>
+      <DateCreated>20120214120000</DateCreated>
+      <Max_test_level>4</Max_test_level>
+      <Base_model_version>asam30</Base_model_version>
+      <AppModelType>ASAM_SECURITY,ASAM_NVH,ASAM_WORKFLOW,MDM</AppModelType>
+      <AppModelVersion>4.4.1</AppModelVersion>
+      <Timezone>GMT</Timezone>
+      <MeaningOfAliases>
+        <s>,language=en</s>
+        <s>,language=de</s>
+      </MeaningOfAliases>
+    </Environment>
+    <CatSensor>
+      <Id>1</Id>
+      <Name>barometric_pressure</Name>
+      <MimeType>application/x-asam.aoany.catsensor</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <CatSensorAttr>1 2 3 4</CatSensorAttr>
+      <CatTestEquipmentComp>1</CatTestEquipmentComp>
+    </CatSensor>
+    <CatSensor>
+      <Id>2</Id>
+      <Name>relative_humidity</Name>
+      <MimeType>application/x-asam.aoany.catsensor</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <CatTestEquipmentComp>1</CatTestEquipmentComp>
+    </CatSensor>
+    <CatSensor>
+      <Id>3</Id>
+      <Name>temperature</Name>
+      <MimeType>application/x-asam.aoany.catsensor</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <CatTestEquipmentComp>1</CatTestEquipmentComp>
+    </CatSensor>
+    <CatSensor>
+      <Id>4</Id>
+      <Name>wind_speed</Name>
+      <MimeType>application/x-asam.aoany.catsensor</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <CatSensorAttr>5</CatSensorAttr>
+      <CatTestEquipmentComp>1</CatTestEquipmentComp>
+    </CatSensor>
+    <CatSensor>
+      <Id>5</Id>
+      <Name>microphone</Name>
+      <MimeType>application/x-asam.aoany.catsensor</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <CatSensorAttr>6 7 8 9 10 11</CatSensorAttr>
+      <CatTestEquipmentComp>2</CatTestEquipmentComp>
+    </CatSensor>
+    <CatSensor>
+      <Id>6</Id>
+      <Name>acceleration</Name>
+      <MimeType>application/x-asam.aoany.catsensor</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <CatSensorAttr>12 13 14 15 16</CatSensorAttr>
+      <CatTestEquipmentComp>3</CatTestEquipmentComp>
+    </CatSensor>
+    <CatSensor>
+      <Id>7</Id>
+      <Name>rotational_speed</Name>
+      <MimeType>application/x-asam.aoany.catsensor</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <CatTestEquipmentComp>3</CatTestEquipmentComp>
+    </CatSensor>
+    <CatSensor>
+      <Id>8</Id>
+      <Name>speed</Name>
+      <MimeType>application/x-asam.aoany.catsensor</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <CatSensorAttr>17</CatSensorAttr>
+      <CatTestEquipmentComp>3</CatTestEquipmentComp>
+    </CatSensor>
+    <CatSensorAttr>
+      <Id>1</Id>
+      <Name>height_above_ground</Name>
+      <MimeType>application/x-asam.aoany.catsensorattr</MimeType>
+      <Sortindex>1</Sortindex>
+      <CatSensor>1</CatSensor>
+    </CatSensorAttr>
+    <CatSensorAttr>
+      <Id>2</Id>
+      <Name>last_calibration</Name>
+      <MimeType>application/x-asam.aoany.catsensorattr</MimeType>
+      <Sortindex>2</Sortindex>
+      <CatSensor>1</CatSensor>
+    </CatSensorAttr>
+    <CatSensorAttr>
+      <Id>3</Id>
+      <Name>manufacturer</Name>
+      <MimeType>application/x-asam.aoany.catsensorattr</MimeType>
+      <Sortindex>3</Sortindex>
+      <CatSensor>1</CatSensor>
+    </CatSensorAttr>
+    <CatSensorAttr>
+      <Id>4</Id>
+      <Name>type_code</Name>
+      <MimeType>application/x-asam.aoany.catsensorattr</MimeType>
+      <Sortindex>4</Sortindex>
+      <CatSensor>1</CatSensor>
+    </CatSensorAttr>
+    <CatSensorAttr>
+      <Id>5</Id>
+      <Name>wind_direction</Name>
+      <MimeType>application/x-asam.aoany.catsensorattr</MimeType>
+      <Sortindex>1</Sortindex>
+      <CatSensor>4</CatSensor>
+    </CatSensorAttr>
+    <CatSensorAttr>
+      <Id>6</Id>
+      <Name>distance_from_target</Name>
+      <MimeType>application/x-asam.aoany.catsensorattr</MimeType>
+      <Sortindex>1</Sortindex>
+      <CatSensor>5</CatSensor>
+    </CatSensorAttr>
+    <CatSensorAttr>
+      <Id>7</Id>
+      <Name>heigth_above_ground</Name>
+      <MimeType>application/x-asam.aoany.catsensorattr</MimeType>
+      <Sortindex>2</Sortindex>
+      <CatSensor>5</CatSensor>
+    </CatSensorAttr>
+    <CatSensorAttr>
+      <Id>8</Id>
+      <Name>last_calibration</Name>
+      <MimeType>application/x-asam.aoany.catsensorattr</MimeType>
+      <Sortindex>3</Sortindex>
+      <CatSensor>5</CatSensor>
+    </CatSensorAttr>
+    <CatSensorAttr>
+      <Id>9</Id>
+      <Name>manufacturer</Name>
+      <MimeType>application/x-asam.aoany.catsensorattr</MimeType>
+      <Sortindex>4</Sortindex>
+      <CatSensor>5</CatSensor>
+    </CatSensorAttr>
+    <CatSensorAttr>
+      <Id>10</Id>
+      <Name>type_code</Name>
+      <MimeType>application/x-asam.aoany.catsensorattr</MimeType>
+      <Sortindex>5</Sortindex>
+      <CatSensor>5</CatSensor>
+    </CatSensorAttr>
+    <CatSensorAttr>
+      <Id>11</Id>
+      <Name>windscreen_applied</Name>
+      <MimeType>application/x-asam.aoany.catsensorattr</MimeType>
+      <Sortindex>6</Sortindex>
+      <CatSensor>5</CatSensor>
+    </CatSensorAttr>
+    <CatSensorAttr>
+      <Id>12</Id>
+      <Name>direction</Name>
+      <MimeType>application/x-asam.aoany.catsensorattr</MimeType>
+      <Sortindex>1</Sortindex>
+      <CatSensor>6</CatSensor>
+    </CatSensorAttr>
+    <CatSensorAttr>
+      <Id>13</Id>
+      <Name>last_calibration</Name>
+      <MimeType>application/x-asam.aoany.catsensorattr</MimeType>
+      <Sortindex>2</Sortindex>
+      <CatSensor>6</CatSensor>
+    </CatSensorAttr>
+    <CatSensorAttr>
+      <Id>14</Id>
+      <Name>location</Name>
+      <MimeType>application/x-asam.aoany.catsensorattr</MimeType>
+      <Sortindex>3</Sortindex>
+      <CatSensor>6</CatSensor>
+    </CatSensorAttr>
+    <CatSensorAttr>
+      <Id>15</Id>
+      <Name>manufacturer</Name>
+      <MimeType>application/x-asam.aoany.catsensorattr</MimeType>
+      <Sortindex>4</Sortindex>
+      <CatSensor>6</CatSensor>
+    </CatSensorAttr>
+    <CatSensorAttr>
+      <Id>16</Id>
+      <Name>type_code</Name>
+      <MimeType>application/x-asam.aoany.catsensorattr</MimeType>
+      <Sortindex>5</Sortindex>
+      <CatSensor>6</CatSensor>
+    </CatSensorAttr>
+    <CatSensorAttr>
+      <Id>17</Id>
+      <Name>direction</Name>
+      <MimeType>application/x-asam.aoany.catsensorattr</MimeType>
+      <Sortindex>1</Sortindex>
+      <CatSensor>8</CatSensor>
+    </CatSensorAttr>
+    <CatTestEquipmentComp>
+      <Id>1</Id>
+      <Name>meteorological_measurement</Name>
+      <MimeType>application/x-asam.aoany.cattestequipmentcomp</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <ValidFlag>valid</ValidFlag>
+      <CatSensor>1 2 3 4</CatSensor>
+    </CatTestEquipmentComp>
+    <CatTestEquipmentComp>
+      <Id>2</Id>
+      <Name>sound_measurement</Name>
+      <MimeType>application/x-asam.aoany.cattestequipmentcomp</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <ValidFlag>valid</ValidFlag>
+      <CatSensor>5</CatSensor>
+    </CatTestEquipmentComp>
+    <CatTestEquipmentComp>
+      <Id>3</Id>
+      <Name>vehicle_measurement</Name>
+      <MimeType>application/x-asam.aoany.cattestequipmentcomp</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <ValidFlag>valid</ValidFlag>
+      <CatSensor>6 7 8</CatSensor>
+    </CatTestEquipmentComp>
+    <CatTestSequenceComp>
+      <Id>1</Id>
+      <Name>PBN_test_conduction</Name>
+      <MimeType>application/x-asam.aoany.cattestsequencecomp</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <ValidFlag>valid</ValidFlag>
+      <CatTestSequenceAttr>1 2 3 4</CatTestSequenceAttr>
+    </CatTestSequenceComp>
+    <CatTestSequenceComp>
+      <Id>2</Id>
+      <Name>SVN_test_conduction</Name>
+      <MimeType>application/x-asam.aoany.cattestsequencecomp</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <ValidFlag>valid</ValidFlag>
+    </CatTestSequenceComp>
+    <CatTestSequenceComp>
+      <Id>3</Id>
+      <Name>testsite</Name>
+      <MimeType>application/x-asam.aoany.cattestsequencecomp</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <ValidFlag>valid</ValidFlag>
+      <CatTestSequenceAttr>5</CatTestSequenceAttr>
+    </CatTestSequenceComp>
+    <CatTestSequenceComp>
+      <Id>4</Id>
+      <Name>track</Name>
+      <MimeType>application/x-asam.aoany.cattestsequencecomp</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <ValidFlag>valid</ValidFlag>
+      <CatTestSequenceAttr>6 7 8 9 10</CatTestSequenceAttr>
+    </CatTestSequenceComp>
+    <CatTestSequenceAttr>
+      <Id>1</Id>
+      <Name>tested_vehicle_side</Name>
+      <MimeType>application/x-asam.aoany.cattestsequenceattr</MimeType>
+      <Sortindex>1</Sortindex>
+      <CatTestSequenceComp>1</CatTestSequenceComp>
+    </CatTestSequenceAttr>
+    <CatTestSequenceAttr>
+      <Id>2</Id>
+      <Name>v_test</Name>
+      <MimeType>application/x-asam.aoany.cattestsequenceattr</MimeType>
+      <Sortindex>2</Sortindex>
+      <CatTestSequenceComp>1</CatTestSequenceComp>
+    </CatTestSequenceAttr>
+    <CatTestSequenceAttr>
+      <Id>3</Id>
+      <Name>PMR</Name>
+      <MimeType>application/x-asam.aoany.cattestsequenceattr</MimeType>
+      <Sortindex>3</Sortindex>
+      <CatTestSequenceComp>1</CatTestSequenceComp>
+    </CatTestSequenceAttr>
+    <CatTestSequenceAttr>
+      <Id>4</Id>
+      <Name>accelerated</Name>
+      <MimeType>application/x-asam.aoany.cattestsequenceattr</MimeType>
+      <Sortindex>4</Sortindex>
+      <CatTestSequenceComp>1</CatTestSequenceComp>
+    </CatTestSequenceAttr>
+    <CatTestSequenceAttr>
+      <Id>5</Id>
+      <Name>track_id</Name>
+      <MimeType>application/x-asam.aoany.cattestsequenceattr</MimeType>
+      <Sortindex>1</Sortindex>
+      <CatTestSequenceComp>3</CatTestSequenceComp>
+    </CatTestSequenceAttr>
+    <CatTestSequenceAttr>
+      <Id>6</Id>
+      <Name>residual_voids_content</Name>
+      <MimeType>application/x-asam.aoany.cattestsequenceattr</MimeType>
+      <Sortindex>1</Sortindex>
+      <CatTestSequenceComp>4</CatTestSequenceComp>
+    </CatTestSequenceAttr>
+    <CatTestSequenceAttr>
+      <Id>7</Id>
+      <Name>sound_absorption_coefficient</Name>
+      <MimeType>application/x-asam.aoany.cattestsequenceattr</MimeType>
+      <Sortindex>2</Sortindex>
+      <CatTestSequenceComp>4</CatTestSequenceComp>
+    </CatTestSequenceAttr>
+    <CatTestSequenceAttr>
+      <Id>8</Id>
+      <Name>texture_depth</Name>
+      <MimeType>application/x-asam.aoany.cattestsequenceattr</MimeType>
+      <Sortindex>3</Sortindex>
+      <CatTestSequenceComp>4</CatTestSequenceComp>
+    </CatTestSequenceAttr>
+    <CatTestSequenceAttr>
+      <Id>9</Id>
+      <Name>surface_homogeneity</Name>
+      <MimeType>application/x-asam.aoany.cattestsequenceattr</MimeType>
+      <Sortindex>4</Sortindex>
+      <CatTestSequenceComp>4</CatTestSequenceComp>
+    </CatTestSequenceAttr>
+    <CatTestSequenceAttr>
+      <Id>10</Id>
+      <Name>last_check_texture_depth</Name>
+      <MimeType>application/x-asam.aoany.cattestsequenceattr</MimeType>
+      <Sortindex>5</Sortindex>
+      <CatTestSequenceComp>4</CatTestSequenceComp>
+    </CatTestSequenceAttr>
+    <CatUnitUnderTestComp>
+      <Id>1</Id>
+      <Name>air_filter</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestcomp</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <ValidFlag>valid</ValidFlag>
+      <CatUnitUnderTestAttr>1</CatUnitUnderTestAttr>
+    </CatUnitUnderTestComp>
+    <CatUnitUnderTestComp>
+      <Id>2</Id>
+      <Name>engine</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestcomp</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <ValidFlag>valid</ValidFlag>
+      <CatUnitUnderTestAttr>2 3 4 5</CatUnitUnderTestAttr>
+    </CatUnitUnderTestComp>
+    <CatUnitUnderTestComp>
+      <Id>3</Id>
+      <Name>exhaust_piping</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestcomp</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <ValidFlag>valid</ValidFlag>
+      <CatUnitUnderTestAttr>6 7</CatUnitUnderTestAttr>
+    </CatUnitUnderTestComp>
+    <CatUnitUnderTestComp>
+      <Id>4</Id>
+      <Name>expansion_chamber</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestcomp</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <ValidFlag>valid</ValidFlag>
+      <CatUnitUnderTestAttr>8</CatUnitUnderTestAttr>
+    </CatUnitUnderTestComp>
+    <CatUnitUnderTestComp>
+      <Id>5</Id>
+      <Name>gearbox</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestcomp</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <ValidFlag>valid</ValidFlag>
+      <CatUnitUnderTestAttr>9 10</CatUnitUnderTestAttr>
+    </CatUnitUnderTestComp>
+    <CatUnitUnderTestComp>
+      <Id>6</Id>
+      <Name>noise_reduction_system</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestcomp</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <ValidFlag>valid</ValidFlag>
+      <CatUnitUnderTestAttr>11</CatUnitUnderTestAttr>
+    </CatUnitUnderTestComp>
+    <CatUnitUnderTestComp>
+      <Id>7</Id>
+      <Name>silencer</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestcomp</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <ValidFlag>valid</ValidFlag>
+      <CatUnitUnderTestAttr>12 13 14 15 16</CatUnitUnderTestAttr>
+    </CatUnitUnderTestComp>
+    <CatUnitUnderTestComp>
+      <Id>8</Id>
+      <Name>tyre</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestcomp</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <ValidFlag>valid</ValidFlag>
+      <CatUnitUnderTestAttr>17 18 19 20 21</CatUnitUnderTestAttr>
+    </CatUnitUnderTestComp>
+    <CatUnitUnderTestComp>
+      <Id>9</Id>
+      <Name>vehicle</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestcomp</MimeType>
+      <DateCreated>20191122144614</DateCreated>
+      <ValidFlag>valid</ValidFlag>
+      <CatUnitUnderTestAttr>22 23 24 25 26 27 28 29</CatUnitUnderTestAttr>
+    </CatUnitUnderTestComp>
+    <CatUnitUnderTestAttr>
+      <Id>1</Id>
+      <Name>min_bulk_material_density</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>1</Sortindex>
+      <CatUnitUnderTestComp>1</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>2</Id>
+      <Name>manufacturer</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>1</Sortindex>
+      <CatUnitUnderTestComp>2</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>3</Id>
+      <Name>model</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>2</Sortindex>
+      <CatUnitUnderTestComp>2</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>4</Id>
+      <Name>type</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>3</Sortindex>
+      <CatUnitUnderTestComp>2</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>5</Id>
+      <Name>power</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>4</Sortindex>
+      <CatUnitUnderTestComp>2</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>6</Id>
+      <Name>material</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>1</Sortindex>
+      <CatUnitUnderTestComp>3</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>7</Id>
+      <Name>length</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>2</Sortindex>
+      <CatUnitUnderTestComp>3</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>8</Id>
+      <Name>volume</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>1</Sortindex>
+      <CatUnitUnderTestComp>4</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>9</Id>
+      <Name>transmission</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>1</Sortindex>
+      <CatUnitUnderTestComp>5</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>10</Id>
+      <Name>no_forward_gears</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>2</Sortindex>
+      <CatUnitUnderTestComp>5</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>11</Id>
+      <Name>design_family</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>1</Sortindex>
+      <CatUnitUnderTestComp>6</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>12</Id>
+      <Name>location</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>1</Sortindex>
+      <CatUnitUnderTestComp>7</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>13</Id>
+      <Name>manufacturer</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>2</Sortindex>
+      <CatUnitUnderTestComp>7</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>14</Id>
+      <Name>model</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>3</Sortindex>
+      <CatUnitUnderTestComp>7</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>15</Id>
+      <Name>type</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>4</Sortindex>
+      <CatUnitUnderTestComp>7</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>16</Id>
+      <Name>fibre_type</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>5</Sortindex>
+      <CatUnitUnderTestComp>7</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>17</Id>
+      <Name>manufacturer</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>1</Sortindex>
+      <CatUnitUnderTestComp>8</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>18</Id>
+      <Name>axle</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>2</Sortindex>
+      <CatUnitUnderTestComp>8</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>19</Id>
+      <Name>side</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>3</Sortindex>
+      <CatUnitUnderTestComp>8</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>20</Id>
+      <Name>size</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>4</Sortindex>
+      <CatUnitUnderTestComp>8</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>21</Id>
+      <Name>tread_depth</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>5</Sortindex>
+      <CatUnitUnderTestComp>8</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>22</Id>
+      <Name>manufacturer</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>1</Sortindex>
+      <CatUnitUnderTestComp>9</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>23</Id>
+      <Name>model</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>2</Sortindex>
+      <CatUnitUnderTestComp>9</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>24</Id>
+      <Name>vehicle_type</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>3</Sortindex>
+      <CatUnitUnderTestComp>9</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>25</Id>
+      <Name>vehicle_category</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>4</Sortindex>
+      <CatUnitUnderTestComp>9</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>26</Id>
+      <Name>maximum_authorized_mass</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>5</Sortindex>
+      <CatUnitUnderTestComp>9</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>27</Id>
+      <Name>length</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>6</Sortindex>
+      <CatUnitUnderTestComp>9</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>28</Id>
+      <Name>reference_point</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>7</Sortindex>
+      <CatUnitUnderTestComp>9</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <CatUnitUnderTestAttr>
+      <Id>29</Id>
+      <Name>mass_in_running_order</Name>
+      <MimeType>application/x-asam.aoany.catunitundertestattr</MimeType>
+      <Sortindex>8</Sortindex>
+      <CatUnitUnderTestComp>9</CatUnitUnderTestComp>
+    </CatUnitUnderTestAttr>
+    <PhysDimension>
+      <Id>1</Id>
+      <Name>pressure</Name>
+      <Length>-1</Length>
+      <Mass>1</Mass>
+      <Time>-2</Time>
+      <Current>0</Current>
+      <Temperature>0</Temperature>
+      <MolarAmount>0</MolarAmount>
+      <LuminousIntensity>0</LuminousIntensity>
+      <MimeType>application/x-asam.aophysicaldimension</MimeType>
+      <Description>unit: pascal</Description>
+      <angle>0</angle>
+      <Units>1</Units>
+    </PhysDimension>
+    <PhysDimension>
+      <Id>2</Id>
+      <Name>time</Name>
+      <Length>0</Length>
+      <Mass>0</Mass>
+      <Time>1</Time>
+      <Current>0</Current>
+      <Temperature>0</Temperature>
+      <MolarAmount>0</MolarAmount>
+      <LuminousIntensity>0</LuminousIntensity>
+      <MimeType>application/x-asam.aophysicaldimension</MimeType>
+      <angle>0</angle>
+      <Units>2</Units>
+    </PhysDimension>
+    <Project>
+      <Id>1</Id>
+      <Name>PMV Model P</Name>
+      <MimeType>application/x-asam.aotest</MimeType>
+      <StructureLevel>1</StructureLevel>
+    </Project>
+    <TestEquipment>
+      <Id>1</Id>
+      <Name>PBN_setup</Name>
+      <Version>1</Version>
+      <MimeType>application/x-asam.aotestequipment.testequipment</MimeType>
+      <TplTestEquipmentRoot>0</TplTestEquipmentRoot>
+      <vehicle_measurement>1</vehicle_measurement>
+      <sound_measurement>1</sound_measurement>
+      <TestSteps>1</TestSteps>
+      <meteorological_measurement>1</meteorological_measurement>
+    </TestEquipment>
+    <TestEquipment>
+      <Id>2</Id>
+      <Name>PBN_setup</Name>
+      <Version>2</Version>
+      <MimeType>application/x-asam.aotestequipment.testequipment</MimeType>
+      <TplTestEquipmentRoot>0</TplTestEquipmentRoot>
+      <vehicle_measurement>2</vehicle_measurement>
+      <MeaResults>1</MeaResults>
+      <sound_measurement>2</sound_measurement>
+      <meteorological_measurement>2</meteorological_measurement>
+    </TestEquipment>
+    <TestSequence>
+      <Id>1</Id>
+      <Name>PBN_emission_testing</Name>
+      <Version>1</Version>
+      <MimeType>application/x-asam.aotestsequence.testsequence</MimeType>
+      <TplTestSequenceRoot>0</TplTestSequenceRoot>
+      <TestSteps>1</TestSteps>
+      <PBN_test_conduction>1</PBN_test_conduction>
+      <testsite>1</testsite>
+      <track>1</track>
+    </TestSequence>
+    <TestSequence>
+      <Id>2</Id>
+      <Name>PBN_emission_testing</Name>
+      <Version>2</Version>
+      <MimeType>application/x-asam.aotestsequence.testsequence</MimeType>
+      <MeaResults>1</MeaResults>
+      <TplTestSequenceRoot>0</TplTestSequenceRoot>
+      <PBN_test_conduction>2</PBN_test_conduction>
+      <testsite>2</testsite>
+      <track>2</track>
+    </TestSequence>
+    <Unit>
+      <Id>1</Id>
+      <Name>Pa</Name>
+      <Factor>1.0</Factor>
+      <Offset>0.0</Offset>
+      <MimeType>application/x-asam.aounit</MimeType>
+      <dB>false</dB>
+      <PhysDimension>1</PhysDimension>
+      <MeaQuantities>1 2 3 4 5 6 7 8 9 10</MeaQuantities>
+      <Quantities>1</Quantities>
+    </Unit>
+    <Unit>
+      <Id>2</Id>
+      <Name>s</Name>
+      <Factor>1.0</Factor>
+      <Offset>0.0</Offset>
+      <MimeType>application/x-asam.aounit</MimeType>
+      <dB>false</dB>
+      <PhysDimension>2</PhysDimension>
+      <MeaQuantities>11</MeaQuantities>
+      <Quantities>2</Quantities>
+    </Unit>
+    <Quantity>
+      <Id>1</Id>
+      <Name>Noise</Name>
+      <Version>1</Version>
+      <MimeType>application/x-asam.aoquantity</MimeType>
+      <DateCreated>20190703154539</DateCreated>
+      <DefaultRank>1</DefaultRank>
+      <DefDimension>0</DefDimension>
+      <DefTypeSize>1</DefTypeSize>
+      <DefMQName>Noise</DefMQName>
+      <DefDataType>DT_FLOAT</DefDataType>
+      <ValidFlag>valid</ValidFlag>
+      <MeaQuantities>1 2 3 4 5 6 7 8 9 10</MeaQuantities>
+      <Unit>1</Unit>
+    </Quantity>
+    <Quantity>
+      <Id>2</Id>
+      <Name>Time</Name>
+      <Version>1</Version>
+      <MimeType>application/x-asam.aoquantity</MimeType>
+      <DateCreated>20190703154557</DateCreated>
+      <DefaultRank>1</DefaultRank>
+      <DefDimension>0</DefDimension>
+      <DefTypeSize>1</DefTypeSize>
+      <DefMQName>Time</DefMQName>
+      <DefDataType>DT_FLOAT</DefDataType>
+      <ValidFlag>valid</ValidFlag>
+      <MeaQuantities>11</MeaQuantities>
+      <Unit>2</Unit>
+    </Quantity>
+    <UnitUnderTest>
+      <Id>1</Id>
+      <Name>PBN_vehicle</Name>
+      <Version>1</Version>
+      <MimeType>application/x-asam.aounitundertest.unitundertest</MimeType>
+      <exhaust_piping>1</exhaust_piping>
+      <expansion_chamber>1</expansion_chamber>
+      <noise_reduction_system>1</noise_reduction_system>
+      <silencer>1 2</silencer>
+      <TestSteps>1</TestSteps>
+      <engine>1</engine>
+      <TplUnitUnderTestRoot>0</TplUnitUnderTestRoot>
+      <air_filter>1</air_filter>
+      <gearbox>1</gearbox>
+      <tyre>1 2 3 4</tyre>
+      <vehicle>1</vehicle>
+    </UnitUnderTest>
+    <UnitUnderTest>
+      <Id>2</Id>
+      <Name>PBN_vehicle</Name>
+      <Version>2</Version>
+      <MimeType>application/x-asam.aounitundertest.unitundertest</MimeType>
+      <exhaust_piping>2</exhaust_piping>
+      <expansion_chamber>2</expansion_chamber>
+      <MeaResults>1</MeaResults>
+      <noise_reduction_system>2</noise_reduction_system>
+      <silencer>3 4</silencer>
+      <engine>2</engine>
+      <TplUnitUnderTestRoot>0</TplUnitUnderTestRoot>
+      <air_filter>2</air_filter>
+      <gearbox>2</gearbox>
+      <tyre>5 6 7 8</tyre>
+      <vehicle>2</vehicle>
+    </UnitUnderTest>
+    <StructureLevel>
+      <Id>1</Id>
+      <Name>PBN Measurements</Name>
+      <MimeType>application/x-asam.aosubtest.structurelevel</MimeType>
+      <Project>1</Project>
+      <Tests>1</Tests>
+    </StructureLevel>
+    <Test>
+      <Id>1</Id>
+      <Name>PBN_UNECE_R51_20190703160224</Name>
+      <MimeType>application/x-asam.aosubtest.test</MimeType>
+      <DateCreated>20190703160224</DateCreated>
+      <DateClosed>20190703160224</DateClosed>
+      <TplTest>0</TplTest>
+      <TestSteps>1</TestSteps>
+      <ResponsiblePerson>0</ResponsiblePerson>
+      <StructureLevel>1</StructureLevel>
+    </Test>
+    <TestStep>
+      <Id>1</Id>
+      <Name>ImportTaskTest</Name>
+      <MimeType>application/x-asam.aosubtest.teststep</MimeType>
+      <DateCreated>20190703160224</DateCreated>
+      <Optional>true</Optional>
+      <Sortindex>40</Sortindex>
+      <MeaResults>1</MeaResults>
+      <TplTestStep>0</TplTestStep>
+      <Test>1</Test>
+      <TestSequence>1</TestSequence>
+      <TestEquipment>1</TestEquipment>
+      <UnitUnderTest>1</UnitUnderTest>
+    </TestStep>
+    <MeaResult>
+      <Id>1</Id>
+      <Name>Channel</Name>
+      <MimeType>application/x-asam.aomeasurement</MimeType>
+      <DateCreated>20190703160230</DateCreated>
+      <TestStep>1</TestStep>
+      <SubMatrices>1</SubMatrices>
+      <MeaQuantities>1 2 3 4 5 6 7 8 9 10 11</MeaQuantities>
+      <TplMeaResult>0</TplMeaResult>
+      <TestSequence>2</TestSequence>
+      <TestEquipment>2</TestEquipment>
+      <UnitUnderTest>2</UnitUnderTest>
+    </MeaResult>
+    <MeaQuantity>
+      <Id>1</Id>
+      <Name>CHANNEL01</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Quantity>1</Quantity>
+      <barometric_pressure>0</barometric_pressure>
+      <Unit>1</Unit>
+      <speed>0</speed>
+      <rotational_speed>0</rotational_speed>
+      <acceleration>0</acceleration>
+      <temperature>0</temperature>
+      <wind_speed>0</wind_speed>
+      <LocalColumns>5</LocalColumns>
+      <microphone>0</microphone>
+      <relative_humidity>0</relative_humidity>
+      <MeaResult>1</MeaResult>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>2</Id>
+      <Name>CHANNEL02</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Quantity>1</Quantity>
+      <barometric_pressure>0</barometric_pressure>
+      <Unit>1</Unit>
+      <speed>0</speed>
+      <rotational_speed>0</rotational_speed>
+      <acceleration>0</acceleration>
+      <temperature>0</temperature>
+      <wind_speed>0</wind_speed>
+      <LocalColumns>9</LocalColumns>
+      <microphone>0</microphone>
+      <relative_humidity>0</relative_humidity>
+      <MeaResult>1</MeaResult>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>3</Id>
+      <Name>CHANNEL03</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Quantity>1</Quantity>
+      <barometric_pressure>0</barometric_pressure>
+      <Unit>1</Unit>
+      <speed>0</speed>
+      <rotational_speed>0</rotational_speed>
+      <acceleration>0</acceleration>
+      <temperature>0</temperature>
+      <wind_speed>0</wind_speed>
+      <LocalColumns>4</LocalColumns>
+      <microphone>0</microphone>
+      <relative_humidity>0</relative_humidity>
+      <MeaResult>1</MeaResult>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>4</Id>
+      <Name>CHANNEL04</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Quantity>1</Quantity>
+      <barometric_pressure>0</barometric_pressure>
+      <Unit>1</Unit>
+      <speed>0</speed>
+      <rotational_speed>0</rotational_speed>
+      <acceleration>0</acceleration>
+      <temperature>0</temperature>
+      <wind_speed>0</wind_speed>
+      <LocalColumns>7</LocalColumns>
+      <microphone>0</microphone>
+      <relative_humidity>0</relative_humidity>
+      <MeaResult>1</MeaResult>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>5</Id>
+      <Name>CHANNEL05</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Quantity>1</Quantity>
+      <barometric_pressure>0</barometric_pressure>
+      <Unit>1</Unit>
+      <speed>0</speed>
+      <rotational_speed>0</rotational_speed>
+      <acceleration>0</acceleration>
+      <temperature>0</temperature>
+      <wind_speed>0</wind_speed>
+      <LocalColumns>2</LocalColumns>
+      <microphone>0</microphone>
+      <relative_humidity>0</relative_humidity>
+      <MeaResult>1</MeaResult>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>6</Id>
+      <Name>CHANNEL06</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Quantity>1</Quantity>
+      <barometric_pressure>0</barometric_pressure>
+      <Unit>1</Unit>
+      <speed>0</speed>
+      <rotational_speed>0</rotational_speed>
+      <acceleration>0</acceleration>
+      <temperature>0</temperature>
+      <wind_speed>0</wind_speed>
+      <LocalColumns>6</LocalColumns>
+      <microphone>0</microphone>
+      <relative_humidity>0</relative_humidity>
+      <MeaResult>1</MeaResult>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>7</Id>
+      <Name>CHANNEL07</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Quantity>1</Quantity>
+      <barometric_pressure>0</barometric_pressure>
+      <Unit>1</Unit>
+      <speed>0</speed>
+      <rotational_speed>0</rotational_speed>
+      <acceleration>0</acceleration>
+      <temperature>0</temperature>
+      <wind_speed>0</wind_speed>
+      <LocalColumns>8</LocalColumns>
+      <microphone>0</microphone>
+      <relative_humidity>0</relative_humidity>
+      <MeaResult>1</MeaResult>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>8</Id>
+      <Name>CHANNEL08</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Quantity>1</Quantity>
+      <barometric_pressure>0</barometric_pressure>
+      <Unit>1</Unit>
+      <speed>0</speed>
+      <rotational_speed>0</rotational_speed>
+      <acceleration>0</acceleration>
+      <temperature>0</temperature>
+      <wind_speed>0</wind_speed>
+      <LocalColumns>3</LocalColumns>
+      <microphone>0</microphone>
+      <relative_humidity>0</relative_humidity>
+      <MeaResult>1</MeaResult>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>9</Id>
+      <Name>CHANNEL09</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Quantity>1</Quantity>
+      <barometric_pressure>0</barometric_pressure>
+      <Unit>1</Unit>
+      <speed>0</speed>
+      <rotational_speed>0</rotational_speed>
+      <acceleration>0</acceleration>
+      <temperature>0</temperature>
+      <wind_speed>0</wind_speed>
+      <LocalColumns>10</LocalColumns>
+      <microphone>0</microphone>
+      <relative_humidity>0</relative_humidity>
+      <MeaResult>1</MeaResult>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>10</Id>
+      <Name>CHANNEL10</Name>
+      <DataType>DT_DOUBLE</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Quantity>1</Quantity>
+      <barometric_pressure>0</barometric_pressure>
+      <Unit>1</Unit>
+      <speed>0</speed>
+      <rotational_speed>0</rotational_speed>
+      <acceleration>0</acceleration>
+      <temperature>0</temperature>
+      <wind_speed>0</wind_speed>
+      <LocalColumns>11</LocalColumns>
+      <microphone>0</microphone>
+      <relative_humidity>0</relative_humidity>
+      <MeaResult>1</MeaResult>
+    </MeaQuantity>
+    <MeaQuantity>
+      <Id>11</Id>
+      <Name>X-Axis</Name>
+      <DataType>DT_LONG</DataType>
+      <MimeType>application/x-asam.aomeasurementquantity</MimeType>
+      <Interpolation>no_interpolation</Interpolation>
+      <Rank>1</Rank>
+      <TypeSize>1</TypeSize>
+      <Quantity>2</Quantity>
+      <barometric_pressure>0</barometric_pressure>
+      <Unit>2</Unit>
+      <speed>0</speed>
+      <rotational_speed>0</rotational_speed>
+      <acceleration>0</acceleration>
+      <temperature>0</temperature>
+      <wind_speed>0</wind_speed>
+      <LocalColumns>1</LocalColumns>
+      <microphone>0</microphone>
+      <relative_humidity>0</relative_humidity>
+      <MeaResult>1</MeaResult>
+    </MeaQuantity>
+    <SubMatrix>
+      <Id>1</Id>
+      <Name>Channel</Name>
+      <SubMatrixNoRows>3001</SubMatrixNoRows>
+      <MimeType>application/x-asam.aosubmatrix</MimeType>
+      <TplSubMatrix>0</TplSubMatrix>
+      <x-axis-for-y-axis>0</x-axis-for-y-axis>
+      <LocalColumns>1 2 3 4 5 6 7 8 9 10 11</LocalColumns>
+      <z-axis-for-y-axis>0</z-axis-for-y-axis>
+      <MeaResult>1</MeaResult>
+    </SubMatrix>
+    <LocalColumn>
+      <SequenceRepresentation>explicit</SequenceRepresentation>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <Values>
+        <A_INT32>1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001</A_INT32>
+      </Values>
+      <Id>1</Id>
+      <Name>X-Axis</Name>
+      <IndependentFlag>1</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <RawDatatype>DT_LONG</RawDatatype>
+      <axistype>Xaxis</axistype>
+      <MeaQuantity>11</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>explicit</SequenceRepresentation>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <Values>
+        <A_FLOAT64>1.86265E-6 1.86265E-6 -6.52153 -6.52153 -6.52153 1.86265E-6 -6.52153 1.86265E-6 -6.52153 1.86265E-6 -6.52153 1.86265E-6 1.86265E-6 1.86265E-6 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 1.86265E-6 1.86265E-6 -6.52153 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 -6.52153 -6.52153 1.86265E-6 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 1.86265E-6 -6.52153 -6.52153 -6.52153 1.86265E-6 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -13.0431 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 1.86265E-6 -6.52153 -6.52153 -6.52153 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 1.86265E-6 1.86265E-6 -6.52153 -6.52153 -6.52153 1.86265E-6 -6.52153 -6.52153 -6.52153 1.86265E-6 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 1.86265E-6 1.86265E-6 1.86265E-6 -6.52153 1.86265E-6 1.86265E-6 -6.52153 -6.52153 -6.52153 -6.52153 1.86265E-6 1.86265E-6 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 -6.52153 -6.52153 -6.52153 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 -6.52153 1.86265E-6 1.86265E-6 1.86265E-6 -6.52153 1.86265E-6 -6.52153 -6.52153 1.86265E-6 -6.52153 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 -6.52153 -6.52153 -6.52153 1.86265E-6 1.86265E-6 -6.52153 1.86265E-6 1.86265E-6 -6.52153 -6.52153 1.86265E-6 1.86265E-6 1.86265E-6 -6.52153 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 -6.52153 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 -6.52153 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 1.86265E-6 -6.52153 1.86265E-6 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -6.52153 -13.0431 -13.0431 -13.0431 -6.52153 -13.0431 -13.0431 -13.0431 -13.0431 -13.0431 -13.0431 -13.0431 -19.5646 -19.5646 -19.5646 -19.5646 -19.5646 -19.5646 -19.5646 -19.5646 -19.5646 -19.5646 -19.5646 -19.5646 -19.5646 -19.5646 -19.5646 -19.5646 -19.5646 -19.5646 -19.5646 -19.5646 -26.0861 -19.5646 -26.0861 -19.5646 -26.0861 -19.5646 -26.0861 -26.0861 -19.5646 -19.5646 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -32.6076 -32.6076 -32.6076 -32.6076 -32.6076 -32.6076 -39.1292 -39.1292 -39.1292 -45.6507 -45.6507 -45.6507 -52.1722 -52.1722 -45.6507 -52.1722 -52.1722 -52.1722 -52.1722 -58.6938 -58.6938 -52.1722 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -52.1722 -58.6938 -58.6938 -58.6938 -52.1722 -52.1722 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -52.1722 -52.1722 -52.1722 -52.1722 -52.1722 -45.6507 -45.6507 -45.6507 -45.6507 -45.6507 -45.6507 -45.6507 -45.6507 -45.6507 -45.6507 -52.1722 -52.1722 -52.1722 -45.6507 -52.1722 -52.1722 -52.1722 -52.1722 -58.6938 -58.6938 -65.2153 -65.2153 -65.2153 -71.7368 -71.7368 -71.7368 -78.2584 -78.2584 -84.7799 -91.3014 -97.8229 -97.8229 -104.344 -110.866 -110.866 -117.388 -117.388 -123.909 -123.909 -123.909 -130.431 -130.431 -136.952 -143.474 -143.474 -143.474 -143.474 -149.995 -149.995 -149.995 -156.517 -149.995 -156.517 -156.517 -156.517 -156.517 -156.517 -163.038 -163.038 -169.56 -169.56 -169.56 -169.56 -169.56 -176.081 -169.56 -169.56 -169.56 -169.56 -176.081 -176.081 -169.56 -163.038 -156.517 -156.517 -156.517 -156.517 -156.517 -156.517 -156.517 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -156.517 -149.995 -149.995 -156.517 -156.517 -156.517 -156.517 -156.517 -156.517 -156.517 -156.517 -156.517 -156.517 -149.995 -149.995 -156.517 -156.517 -156.517 -149.995 -149.995 -149.995 -149.995 -156.517 -156.517 -156.517 -149.995 -149.995 -149.995 -149.995 -156.517 -156.517 -156.517 -156.517 -156.517 -156.517 -156.517 -163.038 -169.56 -176.081 -182.603 -182.603 -189.124 -189.124 -195.646 -195.646 -202.167 -202.167 -208.689 -215.21 -215.21 -221.732 -221.732 -221.732 -228.254 -234.775 -234.775 -241.297 -241.297 -254.34 -260.861 -260.861 -267.383 -267.383 -273.904 -273.904 -280.426 -286.947 -293.469 -299.99 -306.512 -313.033 -319.555 -319.555 -332.598 -339.12 -352.163 -358.684 -365.206 -371.727 -378.249 -378.249 -384.77 -384.77 -384.77 -384.77 -384.77 -378.249 -384.77 -391.292 -397.813 -404.335 -410.856 -410.856 -410.856 -410.856 -404.335 -404.335 -397.813 -391.292 -384.77 -371.727 -365.206 -358.684 -358.684 -371.727 -397.813 -436.942 -469.55 -495.636 -508.679 -547.808 -593.459 -613.024 -652.153 -749.976 -815.191 -789.105 -743.454 -717.368 -684.761 -671.718 -684.761 -691.282 -652.153 -619.545 -613.024 -599.981 -567.373 -541.287 -521.722 -489.115 -482.593 -502.158 -456.507 -365.206 -332.598 -299.99 -234.775 -182.603 -130.431 -52.1722 -6.52153 -26.0861 -32.6076 26.0861 97.8229 163.038 215.21 254.34 299.99 339.12 339.12 293.469 247.818 228.254 215.21 202.167 202.167 215.21 228.254 228.254 234.775 241.297 241.297 208.689 123.909 104.344 247.818 378.249 358.684 313.033 306.512 286.947 319.555 410.856 463.029 469.55 521.722 593.459 613.024 541.287 378.249 319.555 430.421 554.33 554.33 586.938 678.239 652.153 567.373 613.024 710.847 723.89 736.933 756.497 723.89 710.847 736.933 789.105 834.756 847.799 828.234 795.627 789.105 815.191 815.191 749.976 710.847 749.976 782.584 763.019 763.019 828.234 893.45 926.057 945.622 971.708 1030.4 1056.49 1082.57 1245.61 1499.95 1682.55 1754.29 1793.42 1910.81 2217.32 2634.7 3006.43 3325.98 3593.36 3873.79 4258.56 4688.98 5054.18 5275.92 5347.65 5445.48 5647.64 5888.94 6156.32 6586.74 7278.03 7721.49 7988.87 8510.6 8875.8 9123.62 9749.69 10356.2 10597.5 10780.1 10936.6 10851.8 10643.1 10467.1 10369.2 10356.2 10336.6 10251.8 10212.7 10258.4 10362.7 10545.3 10767.0 10904.0 10930.1 10891.0 10851.8 10819.2 10773.6 10714.9 10656.2 10577.9 10473.6 10362.7 10245.3 10141.0 10056.2 9919.25 9756.21 9593.17 9430.13 9260.57 9110.58 9012.75 8908.41 8771.46 8647.55 8510.6 8327.99 8119.3 7910.61 7695.4 7473.67 7238.9 7036.73 6860.65 6691.09 6501.96 6325.88 6156.32 5980.24 5765.03 5556.34 5406.35 5236.79 5028.1 4838.97 4695.5 4578.11 4493.33 4415.08 4265.08 4030.3 3723.79 3352.07 2947.73 2778.17 2895.56 2999.9 2999.9 2999.9 2986.86 2947.73 2954.25 2947.73 2882.52 2810.78 2784.69 2810.78 2856.43 2882.52 2908.6 2960.77 2999.9 2993.38 2980.34 2980.34 2993.38 2999.9 3012.95 3032.51 3071.64 3084.68 3065.12 3039.03 3006.43 2960.77 2882.52 2804.26 2745.56 2706.43 2680.35 2673.83 2673.83 2667.31 2641.22 2602.09 2562.96 2523.83 2484.7 2445.57 2406.44 2367.32 2321.66 2269.49 2204.28 2139.06 2073.85 2008.63 1956.46 1910.81 1858.64 1819.51 1786.9 1760.81 1741.25 1721.68 1708.64 1695.6 1676.03 1649.95 1630.38 1617.34 1597.77 1584.73 1571.69 1558.65 1539.08 1526.04 1519.52 1512.99 1493.43 1473.87 1454.3 1434.74 1421.69 1408.65 1402.13 1395.61 1389.09 1376.04 1376.04 1376.04 1376.04 1376.04 1369.52 1356.48 1349.96 1336.91 1323.87 1304.31 1297.78 1291.26 1271.7 1252.13 1239.09 1226.05 1213.0 1193.44 1173.88 1141.27 1108.66 1076.05 1043.44 1017.36 991.273 958.665 932.579 899.971 873.885 834.756 795.627 756.497 710.847 678.239 645.631 613.024 580.416 554.33 521.722 495.636 476.072 456.507 436.942 417.378 404.335 391.292 371.727 358.684 345.641 332.598 319.555 306.512 293.469 273.904 260.861 247.818 228.254 215.21 195.646 182.603 169.56 156.517 143.474 123.909 104.344 84.7799 71.7368 52.1722 32.6076 13.0431 -13.0431 -39.1292 -58.6938 -84.7799 -117.388 -136.952 -163.038 -182.603 -202.167 -215.21 -234.775 -260.861 -280.426 -299.99 -326.076 -345.641 -358.684 -371.727 -391.292 -404.335 -410.856 -423.899 -436.942 -443.464 -449.986 -456.507 -469.55 -476.072 -482.593 -482.593 -489.115 -495.636 -502.158 -495.636 -482.593 -482.593 -476.072 -463.029 -443.464 -436.942 -430.421 -423.899 -423.899 -423.899 -423.899 -423.899 -430.421 -430.421 -436.942 -436.942 -436.942 -430.421 -423.899 -423.899 -417.378 -423.899 -423.899 -423.899 -423.899 -423.899 -423.899 -430.421 -436.942 -449.986 -469.55 -476.072 -476.072 -476.072 -476.072 -476.072 -482.593 -482.593 -482.593 -482.593 -482.593 -476.072 -476.072 -476.072 -476.072 -476.072 -469.55 -469.55 -463.029 -456.507 -456.507 -456.507 -449.986 -443.464 -443.464 -436.942 -430.421 -436.942 -430.421 -430.421 -423.899 -417.378 -417.378 -423.899 -423.899 -423.899 -423.899 -423.899 -423.899 -423.899 -423.899 -430.421 -430.421 -436.942 -436.942 -449.986 -449.986 -456.507 -463.029 -469.55 -476.072 -482.593 -495.636 -502.158 -508.679 -515.201 -528.244 -534.765 -541.287 -547.808 -554.33 -560.852 -567.373 -580.416 -580.416 -586.938 -593.459 -599.981 -606.502 -606.502 -613.024 -613.024 -613.024 -613.024 -613.024 -619.545 -619.545 -619.545 -619.545 -619.545 -619.545 -613.024 -613.024 -613.024 -613.024 -613.024 -619.545 -619.545 -619.545 -619.545 -619.545 -619.545 -613.024 -613.024 -606.502 -606.502 -606.502 -599.981 -599.981 -599.981 -593.459 -593.459 -593.459 -593.459 -593.459 -593.459 -593.459 -586.938 -586.938 -586.938 -580.416 -573.895 -567.373 -560.852 -554.33 -554.33 -547.808 -541.287 -534.765 -528.244 -521.722 -521.722 -515.201 -515.201 -502.158 -502.158 -489.115 -489.115 -482.593 -476.072 -469.55 -463.029 -456.507 -449.986 -449.986 -443.464 -436.942 -436.942 -430.421 -423.899 -423.899 -417.378 -417.378 -410.856 -410.856 -410.856 -410.856 -404.335 -404.335 -397.813 -397.813 -397.813 -397.813 -397.813 -397.813 -397.813 -397.813 -397.813 -397.813 -404.335 -404.335 -404.335 -397.813 -397.813 -397.813 -397.813 -397.813 -397.813 -397.813 -397.813 -404.335 -404.335 -404.335 -397.813 -404.335 -397.813 -397.813 -391.292 -391.292 -391.292 -391.292 -384.77 -391.292 -384.77 -384.77 -384.77 -378.249 -378.249 -378.249 -371.727 -371.727 -371.727 -371.727 -371.727 -371.727 -365.206 -365.206 -371.727 -371.727 -371.727 -371.727 -378.249 -378.249 -384.77 -384.77 -384.77 -384.77 -384.77 -384.77 -391.292 -391.292 -391.292 -391.292 -391.292 -397.813 -397.813 -397.813 -397.813 -397.813 -397.813 -397.813 -397.813 -397.813 -397.813 -404.335 -397.813 -397.813 -391.292 -391.292 -384.77 -384.77 -384.77 -378.249 -378.249 -371.727 -365.206 -365.206 -358.684 -358.684 -352.163 -352.163 -352.163 -345.641 -345.641 -345.641 -339.12 -339.12 -339.12 -339.12 -332.598 -332.598 -339.12 -339.12 -339.12 -332.598 -332.598 -332.598 -332.598 -332.598 -339.12 -339.12 -339.12 -339.12 -332.598 -339.12 -339.12 -339.12 -332.598 -332.598 -332.598 -326.076 -326.076 -319.555 -319.555 -313.033 -306.512 -306.512 -299.99 -293.469 -286.947 -280.426 -273.904 -267.383 -267.383 -260.861 -254.34 -254.34 -247.818 -241.297 -241.297 -234.775 -234.775 -228.254 -228.254 -228.254 -221.732 -221.732 -215.21 -215.21 -215.21 -208.689 -208.689 -208.689 -202.167 -202.167 -195.646 -195.646 -189.124 -195.646 -195.646 -195.646 -189.124 -189.124 -189.124 -189.124 -182.603 -176.081 -176.081 -176.081 -176.081 -169.56 -163.038 -163.038 -169.56 -169.56 -169.56 -169.56 -163.038 -163.038 -163.038 -163.038 -163.038 -156.517 -156.517 -156.517 -156.517 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -143.474 -143.474 -136.952 -136.952 -143.474 -143.474 -136.952 -136.952 -136.952 -136.952 -130.431 -130.431 -130.431 -130.431 -123.909 -123.909 -123.909 -123.909 -123.909 -123.909 -123.909 -123.909 -123.909 -123.909 -123.909 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -110.866 -110.866 -110.866 -110.866 -110.866 -110.866 -104.344 -104.344 -104.344 -104.344 -104.344 -97.8229 -97.8229 -97.8229 -97.8229 -97.8229 -97.8229 -97.8229 -91.3014 -84.7799 -84.7799 -91.3014 -91.3014 -97.8229 -91.3014 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -78.2584 -78.2584 -78.2584 -71.7368 -78.2584 -78.2584 -78.2584 -78.2584 -71.7368 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -65.2153 -65.2153 -71.7368 -71.7368 -71.7368 -71.7368 -65.2153 -65.2153 -71.7368 -71.7368 -71.7368 -65.2153 -71.7368 -65.2153 -65.2153 -71.7368 -65.2153 -71.7368 -71.7368 -71.7368 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -58.6938 -58.6938 -58.6938 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -71.7368 -71.7368 -65.2153 -65.2153 -65.2153 -71.7368 -65.2153 -65.2153 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -84.7799 -84.7799 -84.7799 -78.2584 -78.2584 -78.2584 -84.7799 -84.7799 -78.2584 -78.2584 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -91.3014 -91.3014 -91.3014 -97.8229 -97.8229 -97.8229 -97.8229 -97.8229 -97.8229 -97.8229 -97.8229 -97.8229 -97.8229 -104.344 -104.344 -104.344 -97.8229 -97.8229 -97.8229 -104.344 -104.344 -104.344 -104.344 -104.344 -104.344 -104.344 -110.866 -110.866 -110.866 -110.866 -110.866 -110.866 -110.866 -117.388 -117.388 -117.388 -110.866 -110.866 -110.866 -110.866 -110.866 -117.388 -110.866 -110.866 -104.344 -110.866 -110.866 -110.866 -110.866 -117.388 -110.866 -110.866 -110.866 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -123.909 -123.909 -123.909 -123.909 -123.909 -123.909 -123.909 -123.909 -123.909 -123.909 -123.909 -123.909 -123.909 -123.909 -123.909 -123.909 -123.909 -130.431 -130.431 -123.909 -123.909 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -136.952 -130.431 -130.431 -130.431 -136.952 -136.952 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -136.952 -136.952 -130.431 -136.952 -136.952 -136.952 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -136.952 -130.431 -130.431 -130.431 -130.431 -130.431 -136.952 -136.952 -130.431 -130.431 -130.431 -130.431 -130.431 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -143.474 -143.474 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -143.474 -143.474 -143.474 -136.952 -136.952 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -149.995 -149.995 -149.995 -149.995 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -136.952 -136.952 -136.952 -136.952 -143.474 -143.474 -143.474 -136.952 -136.952 -136.952 -143.474 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -143.474 -149.995 -149.995 -156.517 -149.995 -149.995 -149.995 -149.995 -149.995 -156.517 -149.995 -156.517 -156.517 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -156.517 -156.517 -156.517 -149.995 -156.517 -156.517 -163.038 -156.517 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -156.517 -156.517 -156.517 -156.517 -156.517 -163.038 -163.038 -163.038 -163.038 -156.517 -163.038 -163.038 -156.517 -156.517 -163.038 -163.038 -163.038 -163.038 -163.038 -156.517 -163.038 -156.517 -163.038 -163.038 -163.038 -163.038 -163.038 -156.517 -163.038 -163.038 -163.038 -163.038 -169.56 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -156.517 -156.517 -156.517 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -163.038 -156.517 -156.517 -163.038 -163.038 -163.038 -163.038 -163.038 -156.517 -156.517 -156.517 -156.517 -156.517 -156.517 -156.517 -163.038 -163.038 -156.517 -156.517 -156.517 -156.517 -163.038 -156.517 -156.517 -149.995 -156.517 -156.517 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -149.995 -156.517 -156.517 -156.517 -156.517 -156.517 -149.995 -156.517 -156.517 -156.517 -156.517 -149.995 -149.995 -149.995 -149.995 -149.995 -156.517 -156.517 -149.995 -149.995 -156.517 -156.517 -156.517 -156.517 -156.517 -156.517 -156.517 -156.517 -149.995 -149.995 -149.995 -149.995 -149.995 -143.474 -143.474 -143.474 -143.474 -143.474 -149.995 -149.995 -149.995 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -143.474 -136.952 -136.952 -136.952 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -136.952 -136.952 -136.952 -136.952 -136.952 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -130.431 -130.431 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -130.431 -130.431 -130.431 -130.431 -136.952 -130.431 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -130.431 -136.952 -130.431 -130.431 -130.431 -130.431 -130.431 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -136.952 -130.431 -136.952 -136.952 -130.431 -130.431 -130.431 -130.431 -136.952 -130.431 -130.431 -136.952 -136.952 -136.952 -130.431 -130.431 -123.909 -123.909 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -130.431 -123.909 -130.431 -130.431 -123.909 -123.909 -123.909 -123.909 -130.431 -130.431 -130.431 -130.431 -123.909 -130.431 -130.431 -123.909 -123.909 -123.909 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -117.388 -110.866 -110.866 -110.866 -110.866 -117.388 -110.866 -110.866 -110.866 -110.866 -110.866 -110.866 -110.866 -110.866 -110.866 -110.866 -104.344 -110.866 -110.866 -110.866 -104.344 -104.344 -104.344 -104.344 -104.344 -104.344 -110.866 -110.866 -104.344 -104.344 -97.8229 -104.344 -104.344 -110.866 -104.344 -104.344 -104.344 -104.344 -104.344 -104.344 -104.344 -97.8229 -97.8229 -97.8229 -97.8229 -97.8229 -97.8229 -104.344 -97.8229 -91.3014 -97.8229 -97.8229 -97.8229 -97.8229 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -97.8229 -91.3014 -91.3014 -91.3014 -97.8229 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -84.7799 -84.7799 -84.7799 -91.3014 -91.3014 -91.3014 -91.3014 -84.7799 -84.7799 -84.7799 -84.7799 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -84.7799 -78.2584 -84.7799 -84.7799 -84.7799 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -84.7799 -84.7799 -78.2584 -78.2584 -78.2584 -78.2584 -84.7799 -84.7799 -84.7799 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -84.7799 -91.3014 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -78.2584 -78.2584 -78.2584 -78.2584 -84.7799 -84.7799 -84.7799 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -91.3014 -91.3014 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -71.7368 -78.2584 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -78.2584 -71.7368 -78.2584 -78.2584 -71.7368 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -84.7799 -78.2584 -78.2584 -78.2584 -84.7799 -84.7799 -78.2584 -78.2584 -78.2584 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -78.2584 -78.2584 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -97.8229 -97.8229 -97.8229 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -91.3014 -91.3014 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -91.3014 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -91.3014 -84.7799 -84.7799 -84.7799 -91.3014 -91.3014 -84.7799 -84.7799 -91.3014 -91.3014 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -91.3014 -84.7799 -91.3014 -84.7799 -84.7799 -91.3014 -84.7799 -91.3014 -91.3014 -84.7799 -84.7799 -84.7799 -91.3014 -91.3014 -84.7799 -84.7799 -91.3014 -91.3014 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -84.7799 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -78.2584 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -71.7368 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -71.7368 -65.2153 -71.7368 -71.7368 -71.7368 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -71.7368 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -58.6938 -58.6938 -58.6938 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -65.2153 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -65.2153 -65.2153 -58.6938 -58.6938 -65.2153 -65.2153 -65.2153 -58.6938 -58.6938 -65.2153 -58.6938 -58.6938 -65.2153 -65.2153 -65.2153 -65.2153 -58.6938 -65.2153 -65.2153 -65.2153 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -58.6938 -52.1722 -52.1722 -52.1722 -52.1722 -52.1722 -52.1722 -52.1722 -52.1722 -45.6507 -45.6507 -45.6507 -45.6507 -45.6507 -45.6507 -39.1292 -39.1292 -39.1292 -39.1292 -39.1292 -32.6076 -32.6076 -39.1292 -32.6076 -32.6076 -32.6076 -32.6076 -39.1292 -32.6076 -32.6076 -32.6076 -32.6076 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -19.5646 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -32.6076 -32.6076 -32.6076 -32.6076 -32.6076 -32.6076 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861 -26.0861</A_FLOAT64>
+      </Values>
+      <Id>2</Id>
+      <Name>CHANNEL05</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <RawDatatype>DT_DOUBLE</RawDatatype>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>5</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>explicit</SequenceRepresentation>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <Values>
+        <A_FLOAT64>0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.577823 0.770431 0.577823 0.577823 0.770431 0.770431 0.770431 0.770431 0.770431 0.577823 0.577823 0.577823 0.770431 0.577823 0.577823 0.577823 0.577823 0.770431 0.770431 0.770431 0.577823 0.770431 0.577823 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.577823 0.770431 0.577823 0.770431 0.577823 0.770431 0.770431 0.770431 0.577823 0.577823 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.577823 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.577823 0.770431 0.770431 0.770431 0.770431 0.770431 0.577823 0.770431 0.577823 0.770431 0.770431 0.770431 0.770431 0.577823 0.577823 0.577823 0.577823 0.577823 0.770431 0.770431 0.770431 0.770431 0.770431 0.577823 0.577823 0.770431 0.770431 0.577823 0.770431 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.385215 0.577823 0.385215 0.577823 0.577823 0.577823 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.192607 0.385215 0.385215 0.385215 0.192607 0.192607 0.192607 0.385215 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 -2.38419E-7 0.192607 -2.38419E-7 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 -2.38419E-7 0.192607 0.192607 0.192607 0.192607 0.192607 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -0.192608 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -0.192608 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -0.192608 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -0.192608 -0.192608 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -0.192608 -0.192608 -2.38419E-7 -2.38419E-7 -0.192608 -0.192608 -2.38419E-7 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -2.38419E-7 -0.192608 -2.38419E-7 -0.192608 -2.38419E-7 -0.192608 -2.38419E-7 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -2.38419E-7 -2.38419E-7 -2.38419E-7 -0.192608 -0.192608 -0.192608 -2.38419E-7 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -2.38419E-7 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -2.38419E-7 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -2.38419E-7 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -0.192608 -2.38419E-7 -0.192608 -0.192608 -0.192608 -2.38419E-7 -0.192608 -2.38419E-7 -2.38419E-7 -0.192608 -0.192608 -0.192608 -0.192608 -2.38419E-7 -0.192608 -2.38419E-7 -0.192608 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 -2.38419E-7 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.385215 0.192607 0.192607 0.192607 0.192607 0.192607 0.192607 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.385215 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.577823 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.770431 0.963039 0.963039 0.963039 0.963039 0.963039 0.963039 1.15565 1.15565 1.15565 1.15565 1.15565 1.15565 1.15565 1.34825 1.34825 1.34825 1.34825 1.34825 1.34825 1.54086 1.54086 1.54086 1.54086 1.54086 1.54086 1.54086 1.73347 1.73347 1.73347 1.73347 1.73347 1.92608 1.92608 1.92608 1.92608 1.92608 2.11869 2.11869 2.11869 2.11869 2.11869 2.11869 2.11869 2.31129 2.31129 2.31129 2.31129 2.31129 2.5039 2.5039 2.5039 2.5039 2.5039 2.5039 2.69651 2.69651 2.69651 2.69651 2.69651 2.88912 2.88912 2.88912 2.88912 2.88912 2.88912 2.88912 2.88912 2.88912 3.08172 3.08172 3.08172 3.08172 3.08172 3.08172 3.08172 3.08172 3.08172 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.46694 3.46694 3.46694 3.46694 3.46694 3.27433 3.27433 3.27433 3.27433 3.46694 3.46694 3.65955 3.65955 3.85216 4.04476 4.23737 4.42998 4.62259 4.81519 5.39302 5.58563 6.16345 6.93388 7.89692 8.85996 9.05257 9.05257 8.66735 8.08953 7.5117 6.93388 6.74127 6.54867 6.35606 6.35606 6.35606 7.12649 8.47474 9.823 10.0156 9.24517 8.08953 7.5117 8.08953 9.43778 11.1713 12.9047 14.4456 15.7938 17.7199 19.646 21.5721 23.3055 24.6538 25.6168 26.1947 26.5799 26.9651 27.3503 27.3503 27.3503 26.9651 26.9651 26.9651 26.9651 26.5799 25.8094 24.8464 24.076 23.4981 23.1129 22.5351 21.9573 21.7647 21.5721 21.5721 21.5721 21.5721 21.7647 21.9573 22.3425 22.5351 22.9203 23.3055 23.4981 23.4981 23.3055 22.9203 22.5351 21.9573 21.5721 21.3795 20.9942 20.4164 20.0312 19.4534 19.0682 18.683 18.4903 18.4903 18.2977 18.1051 17.9125 17.7199 17.5273 17.3347 17.3347 17.1421 16.9495 16.7569 16.3717 15.9864 15.4086 14.6382 13.8678 13.0973 12.5195 12.1343 11.7491 11.5565 11.3639 11.1713 11.1713 11.1713 11.1713 11.1713 10.786 10.0156 9.24517 8.66735 8.66735 8.85996 9.05257 9.24517 8.85996 7.89692 6.35606 3.85216 -2.38419E-7 -4.42998 -9.05257 -12.9047 -15.7938 -17.5273 -17.9125 -17.5273 -16.3717 -14.8308 -13.4825 -12.5195 -11.9417 -11.7491 -11.9417 -12.1343 -12.1343 -12.1343 -11.7491 -11.3639 -10.5934 -10.2082 -9.823 -9.63039 -9.43778 -9.24517 -9.24517 -9.24517 -9.43778 -9.63039 -10.0156 -10.2082 -10.4008 -10.4008 -10.5934 -10.786 -10.786 -10.5934 -10.4008 -9.823 -9.05257 -8.08953 -7.12649 -5.97084 -4.8152 -4.04476 -3.08173 -2.31129 -1.73347 -0.963039 -0.192608 0.385215 0.770431 0.963039 0.963039 1.15565 1.15565 1.34825 1.54086 1.73347 1.92608 2.31129 2.5039 2.69651 2.88912 2.69651 2.5039 1.92608 0.963039 -0.385216 -2.11869 -4.42998 -6.74127 -9.823 -13.4825 -17.9125 -22.1499 -26.3873 -30.432 -34.4768 -38.3289 -41.9885 -45.4554 -49.115 -52.5819 -56.4341 -60.0936 -63.7532 -67.4127 -70.8797 -74.3466 -77.6209 -80.7027 -83.7844 -86.6735 -89.5626 -92.6443 -95.5335 -98.4226 -101.697 -104.971 -108.438 -111.713 -115.179 -118.839 -122.306 -125.773 -129.432 -132.899 -136.752 -140.411 -144.263 -148.115 -151.968 -155.434 -158.324 -160.828 -163.717 -166.606 -169.495 -172.769 -176.044 -179.896 -183.94 -187.6 -191.26 -194.726 -198.001 -200.89 -203.586 -206.09 -208.787 -211.483 -214.372 -217.262 -220.343 -223.232 -225.736 -228.048 -230.359 -232.478 -234.404 -236.33 -238.256 -239.989 -241.915 -244.034 -245.96 -247.501 -249.042 -250.583 -251.931 -253.279 -254.05 -254.435 -254.628 -254.628 -254.435 -253.857 -252.894 -251.931 -250.775 -249.62 -248.464 -247.116 -245.768 -244.419 -242.878 -241.338 -239.989 -238.834 -237.678 -236.715 -235.752 -234.018 -232.092 -229.396 -226.122 -223.232 -220.729 -218.225 -215.336 -212.254 -208.979 -206.283 -203.779 -201.275 -198.771 -196.46 -194.534 -192.8 -190.682 -188.563 -186.059 -183.748 -181.051 -178.355 -175.273 -172.384 -169.687 -167.376 -165.45 -163.909 -162.176 -160.442 -158.901 -156.975 -155.049 -152.931 -150.812 -148.693 -146.767 -145.034 -143.108 -141.567 -140.026 -138.485 -136.944 -135.596 -134.055 -132.129 -130.203 -128.277 -126.351 -124.232 -122.499 -120.765 -119.224 -117.683 -116.528 -115.565 -114.602 -113.639 -112.676 -112.098 -111.135 -110.172 -109.209 -108.631 -108.246 -107.86 -107.475 -106.897 -106.512 -105.934 -105.742 -105.934 -106.127 -106.319 -107.09 -107.86 -108.246 -108.246 -108.053 -107.86 -107.475 -106.705 -105.742 -104.779 -104.008 -103.238 -102.275 -101.312 -100.349 -99.193 -97.6521 -95.7261 -93.8 -91.6813 -89.5626 -87.4439 -85.5179 -83.5918 -81.8583 -80.1248 -78.584 -77.2357 -75.8875 -74.7318 -73.3836 -72.2279 -70.6871 -69.3388 -67.7979 -66.2571 -64.9088 -63.9458 -63.368 -63.1754 -62.9827 -63.1754 -63.368 -63.5606 -63.5606 -63.5606 -63.5606 -63.5606 -63.7532 -64.1384 -64.5236 -64.9088 -65.294 -65.8719 -66.6423 -67.2201 -67.6053 -68.1832 -68.761 -69.5314 -70.6871 -72.0353 -73.3836 -74.7318 -75.6949 -76.8505 -77.8135 -78.3914 -78.7766 -78.9692 -78.9692 -78.7766 -78.584 -78.3914 -78.3914 -78.584 -78.9692 -79.3544 -79.9322 -80.7027 -81.4731 -82.0509 -82.4361 -82.2435 -81.6657 -80.8953 -79.9322 -78.9692 -78.0062 -77.0431 -76.0801 -74.7318 -73.3836 -71.6501 -69.5314 -67.4127 -64.9088 -62.2123 -59.5158 -56.6267 -53.7376 -50.6558 -47.1889 -43.5294 -39.4846 -35.4398 -31.0099 -26.5799 -22.1499 -17.9125 -14.0604 -10.786 -7.3191 -4.04476 -1.15565 1.15565 3.27433 5.20041 7.12649 9.24517 11.5565 14.0604 16.7569 19.4534 21.9573 23.8834 25.4242 26.3873 26.9651 27.9281 28.8912 30.2394 31.5877 33.1285 34.4768 35.4398 36.5955 37.9437 39.6772 42.1811 45.8407 49.6928 53.7376 59.1306 66.0645 74.5392 83.2066 91.1035 98.0374 104.393 110.172 114.409 116.913 118.454 120.38 122.306 124.039 125.388 126.543 127.892 129.432 130.588 131.551 132.707 134.055 135.596 137.329 138.87 140.604 141.952 143.3 144.071 144.456 144.263 143.685 143.108 142.337 141.567 141.182 140.796 140.604 140.604 140.411 139.833 139.255 138.485 137.715 136.944 136.174 135.403 134.633 133.862 132.899 131.936 130.588 129.047 127.121 125.388 123.462 121.728 119.995 118.069 116.528 114.987 113.639 112.098 110.749 109.401 107.86 106.127 104.393 102.66 100.926 99.5782 98.6152 97.8448 97.2669 96.4965 95.7261 94.9556 94.3778 93.6074 93.0296 92.2591 91.8739 91.4887 91.2961 91.2961 91.2961 91.4887 91.6813 91.6813 92.0665 92.4517 93.0296 93.4148 93.9926 94.3778 94.9556 95.3409 95.5335 95.9187 96.6891 97.2669 98.0374 99.193 100.349 101.89 104.008 106.32 108.438 110.172 111.52 112.483 113.446 114.409 114.987 115.372 115.757 115.757 116.335 117.876 120.187 121.921 122.884 124.039 125.002 126.158 126.736 126.543 126.543 126.736 126.929 126.929 127.121 127.699 128.277 128.855 129.047 129.432 130.01 130.395 130.588 130.588 130.588 130.395 130.203 129.625 128.855 128.084 127.506 126.929 126.351 125.965 125.965 126.158 126.351 126.929 127.506 128.277 129.047 130.01 131.166 132.129 133.477 134.825 136.366 138.1 139.833 141.759 143.493 145.226 146.767 148.115 149.464 150.427 151.582 152.738 154.086 155.242 156.59 158.131 159.479 160.827 161.983 162.754 163.524 163.909 163.909 163.909 163.717 163.139 162.946 162.946 163.331 164.294 165.643 167.376 169.302 171.421 173.154 174.503 175.466 176.236 176.621 177.007 177.199 177.199 177.392 177.584 177.777 177.97 177.97 177.777 177.584 177.199 176.814 176.236 175.851 175.466 175.08 174.888 174.31 173.925 173.347 172.769 172.384 172.191 171.806 171.614 171.228 170.458 169.495 168.147 166.413 164.294 162.176 160.057 158.131 156.783 155.82 155.434 155.242 155.434 155.627 155.82 156.012 156.205 156.398 156.59 156.783 156.975 156.975 156.975 156.975 156.783 156.59 156.012 155.627 155.242 154.857 154.857 154.857 154.664 154.471 154.279 153.701 153.123 152.16 151.005 149.656 148.501 147.538 146.575 145.804 144.841 144.071 143.3 142.53 141.759 140.796 140.026 139.063 138.292 137.522 136.944 136.366 135.788 135.018 134.248 133.477 132.514 131.551 130.588 129.818 129.047 128.277 127.506 126.736 125.965 125.195 124.232 123.269 122.306 121.15 119.995 119.032 117.876 116.528 115.179 113.831 112.676 111.713 110.557 109.209 107.86 106.512 105.164 104.008 102.66 101.504 100.349 99.193 98.4226 97.4595 96.4965 95.7261 94.9556 93.9926 93.2222 92.2591 91.2961 90.5257 89.7552 88.7922 88.0218 87.2513 86.4809 85.7105 84.7474 83.977 83.014 82.0509 81.0879 80.3175 79.3544 78.584 77.8135 77.0431 76.2727 75.5023 74.7318 74.154 73.191 72.6131 71.8427 71.0723 70.4945 69.724 69.1462 68.5684 68.1832 67.6053 67.2201 66.6423 66.2571 65.8719 65.4866 64.9088 64.5236 63.9458 63.5606 62.9827 62.5975 62.0197 61.6345 61.0567 60.4788 60.0936 59.7084 59.3232 58.7454 58.3602 57.7823 57.3971 56.8193 56.2415 55.6637 55.471 55.0858 54.508 54.1228 53.545 53.1598 52.5819 52.1967 51.6189 51.2337 50.8485 50.4632 50.078 49.5002 49.115 48.5372 48.152 47.7667 47.3815 46.9963 46.4185 46.0333 45.648 45.2628 44.8776 44.4924 44.2998 43.722 43.1441 42.5663 42.3737 42.1811 41.7959 41.4107 41.2181 41.0255 40.6402 40.0624 39.6772 39.292 39.0994 38.7142 38.329 38.1363 38.1363 37.9437 37.5585 37.3659 36.9807 36.7881 36.5955 36.4029 36.2103 35.8251 35.6324 35.4398 35.2472 35.0546 34.862 34.6694 34.6694 34.4768 34.2842 33.899 33.7064 33.5138 33.3211 33.1285 33.1285 32.9359 32.7433 32.5507 32.3581 32.1655 32.1655 31.9729 31.7803 31.5877 31.5877 31.3951 31.3951 31.2025 31.2025 31.2025 31.2025 31.0099 31.0099 31.0099 31.0099 30.8172 30.8172 30.8172 30.8172 30.8172 30.8172 31.0099 31.0099 31.0099 31.0099 31.2025 31.2025 31.3951 31.3951 31.5877 31.7803 31.7803 31.7803 31.9729 31.9729 31.9729 32.1655 32.1655 32.3581 32.3581 32.3581 32.1655 32.1655 32.5507 32.5507 32.5507 32.5507 32.7433 32.5507 32.3581 32.1655 31.9729 31.9729 32.1655 32.1655 32.1655 32.1655 32.1655 32.1655 32.1655 32.1655 32.1655 32.1655 32.1655 32.1655 32.1655 32.1655 32.1655 32.1655 32.1655 32.1655 31.9729 31.9729 31.9729 31.7803 31.7803 31.5877 31.5877 31.3951 31.3951 31.3951 31.3951 31.2025 31.2025 31.2025 31.2025 31.0099 31.0099 30.8172 30.8172 30.8172 30.6246 30.8172 30.8172 30.6246 30.432 30.2394 30.0468 30.0468 30.0468 30.0468 30.0468 29.8542 29.8542 29.6616 29.6616 29.469 29.469 29.469 29.2764 29.2764 29.0838 28.8912 28.8912 28.6986 28.6986 28.506 28.506 28.3133 28.3133 28.3133 28.1207 27.9281 27.9281 27.7355 27.7355 27.7355 27.5429 27.3503 27.3503 27.1577 27.1577 26.9651 26.9651 26.7725 26.5799 26.3873 26.3873 26.1947 26.0021 25.8094 25.6168 25.6168 25.4242 25.2316 25.039 24.8464 24.6538 24.4612 24.4612 24.076 23.8834 23.4981 23.3055 23.1129 22.9203 22.7277 22.3425 22.1499 21.9573 21.5721 21.1869 21.1869 20.9942 20.8016 20.609 20.4164 20.2238 20.0312 19.8386 19.646 19.4534 19.2608 19.0682 18.8756 18.683 18.4903 18.2977 18.1051 18.1051 17.9125 17.7199 17.5273 17.3347 17.1421 17.1421 16.9495 16.7569 16.7569 16.5643 16.3717 16.3717 16.1791 16.1791 15.9864 15.7938 15.7938 15.6012 15.4086 15.4086 15.216 15.0234 15.0234 15.0234 14.8308 14.6382 14.6382 14.4456 14.4456 14.253 14.253 14.0604 14.0604 13.8678 13.8678 13.6752 13.6752 13.4825 13.4825 13.4825 13.4825 13.2899 13.2899 13.2899 13.0973 13.0973 13.0973 12.9047 12.9047 12.9047 12.9047 12.9047 12.7121 12.7121 12.5195 12.5195 12.5195 12.5195 12.3269 12.3269 12.1343 12.1343 12.1343 11.9417 11.9417 11.9417 11.7491 11.5565 11.5565 11.3639 11.3639 11.1713 11.1713 10.9786 10.9786 10.9786 10.786 10.5934 10.5934 10.4008 10.4008 10.2082 10.2082 10.0156 10.0156 10.0156 10.0156 9.823 9.63039 9.24517 9.24517 9.24517 9.24517 9.05257 9.05257 9.05257 8.85996 8.85996 8.66735 8.66735 8.66735 8.47474 8.47474 8.28214 8.28214 8.08953 8.08953 7.89692 7.89692 7.89692 7.70431 7.70431 7.70431 7.70431 7.70431 7.5117 7.3191 7.3191 7.3191 7.3191 7.12649 7.12649 7.12649 7.12649 7.12649 7.12649 7.12649 6.93388 6.93388 6.93388 6.93388 6.93388 6.93388 6.74127 6.54867 6.74127 6.54867 6.54867 6.54867 6.74127 6.74127 6.74127 6.74127 6.74127 6.93388 7.12649 7.3191 7.89692 8.47474 9.24517 10.2082 10.9786 11.7491 12.3269 12.9047 13.4825 14.0604 14.4456 14.8308 15.0234 15.4086 15.4086 15.4086 15.4086 15.0234 14.8308 14.4456 14.253 13.8678 13.4825 13.0973 12.7121 12.3269 11.9417 11.5565 11.3639 11.1713 10.9786 10.786 10.786 10.5934 10.5934 10.5934 10.5934 10.5934 10.5934 10.5934 10.786 10.5934 10.5934 10.786 10.786 10.786 10.786 10.5934 10.5934 10.5934 10.5934 10.786 10.9786 11.1713 11.1713 10.9786 10.786 10.9786 10.9786 10.9786 10.9786 10.9786 10.9786 10.786 10.786 10.786 10.5934 10.5934 10.4008 10.4008 10.4008 10.4008 10.2082 10.2082 10.2082 10.2082 10.0156 10.0156 10.0156 9.823 9.823 9.63039 9.63039 9.43778 9.24517 9.24517 9.24517 9.05257 9.05257 9.05257 9.05257 8.85996 8.85996 8.85996 8.85996 8.85996 8.66735 8.66735 8.66735 8.66735 8.47474 8.47474 8.28214 8.28214 8.08953 8.08953 7.89692 7.70431 7.70431 7.70431 7.5117 7.5117 7.3191 7.12649 7.12649 6.93388 6.74127 6.74127 6.54867 6.54867 6.35606 6.35606 6.16345 5.97084 5.97084 5.97084 5.77823 5.77823 5.77823 5.77823 5.58563 5.58563 5.58563 5.58563 5.58563 5.58563 5.58563 5.58563 5.58563 5.58563 5.58563 5.58563 5.58563 5.58563 5.58563 5.58563 5.58563 5.58563 5.58563 5.39302 5.39302 5.39302 5.20041 5.20041 5.0078 5.0078 5.0078 4.81519 5.0078 4.81519 4.62259 4.42998 4.23737 4.23737 4.42998 4.23737 4.23737 4.04476 4.04476 3.85216 3.85216 3.85216 3.85216 3.85216 3.65955 3.46694 3.46694 3.27433 3.27433 3.27433 3.27433 3.27433 3.08172 3.08172 3.08172 3.08172 3.08172 2.88912 2.88912 2.88912 2.88912 2.69651 2.69651 2.69651 2.69651 2.69651 2.69651 2.69651 2.69651 2.5039 2.5039 2.5039 2.31129 2.31129 2.31129 2.5039 2.31129 2.31129 2.5039 2.5039 2.31129 2.31129 2.31129 2.31129 2.31129 2.31129 2.31129 2.11869 2.11869 2.11869 2.31129 2.11869 2.11869 2.11869 2.11869 2.11869 2.11869 2.31129 2.31129 2.11869 2.31129 2.31129 2.31129 2.31129 2.31129 2.31129 2.5039 2.5039 2.5039 2.5039 2.31129 2.5039 2.31129 2.31129 2.5039 2.5039 2.5039 2.5039 2.5039 2.5039 2.5039 2.5039 2.69651 2.69651 2.69651 2.69651 2.69651 2.69651 2.69651 2.88912 2.88912 2.88912 2.88912 3.08172 3.08172 3.08172 3.08172 3.08172 3.08172 3.08172 3.08172 3.08172 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.27433 3.46694 3.46694 3.46694 3.46694 3.46694 3.27433 3.27433 3.27433 3.27433 3.46694 3.65955 3.65955 3.65955 3.65955 3.65955 3.65955 3.65955 3.65955 3.85216 3.85216 3.85216 3.65955 3.85216 3.85216 3.85216 3.85216 3.85216 3.85216 4.04476 4.04476 4.04476 4.04476 4.04476 4.23737 4.23737 4.23737 4.42998 4.42998 4.42998 4.42998 4.62259 4.62259 4.62259 4.81519 4.81519 4.81519 5.0078 5.0078 4.81519 5.0078 5.0078 5.0078 5.20041 5.20041 5.20041 5.39302 5.39302 5.39302 5.39302 5.58563 5.58563 5.58563 5.58563 5.58563 5.58563 5.77823 5.77823 5.97084 5.97084 5.97084 5.97084 5.97084 6.16345 6.16345 6.35606 6.35606 6.35606 6.35606 6.54867 6.74127 6.74127 6.54867 6.74127 6.74127 6.74127 6.74127 6.93388 6.93388 6.93388 6.93388 7.12649 7.12649 7.12649 7.3191 7.5117 7.5117 7.5117 7.70431 7.70431 7.70431 7.70431 7.70431 7.89692 8.08953 8.28214 8.47474 8.28214 8.47474 8.47474 8.47474 8.66735 8.85996 8.85996 9.05257 9.05257 9.05257 9.05257 9.24517 9.24517 9.43778 9.43778 9.63039 9.63039 9.63039 9.823 9.823 9.823 10.0156 10.0156 10.0156 10.2082 10.2082 10.2082 10.4008 10.4008 10.4008 10.4008 10.5934 10.5934 10.5934 10.786 10.9786 10.9786 10.9786 11.1713 11.1713 11.1713 11.3639 11.5565 11.5565 11.5565 11.5565 11.7491 11.9417 12.1343 12.1343 12.3269 12.3269 12.5195 12.5195 12.5195 12.7121 12.7121 12.9047 12.9047 13.0973 13.0973 13.2899 13.4825 13.8678 13.8678 13.8678 13.8678 14.0604 14.4456 14.4456 14.4456 14.4456 14.4456 14.4456 14.6382 15.0234 15.216 15.216 15.0234 15.0234 15.0234 15.216 15.6012 15.6012 15.6012 15.4086 15.4086 15.7938 16.1791 15.9864 15.9864 15.9864 16.1791 15.9864 16.1791 16.3717 16.3717 16.3717 16.3717 16.3717 16.3717 16.5643 16.5643 16.5643 16.7569 16.7569 16.7569 16.5643 16.5643 16.9495 17.1421 16.9495 16.9495 17.1421 17.1421 17.1421 17.1421 17.1421 17.1421 17.3347 17.3347 17.3347 17.5273 17.5273 17.5273 17.3347 17.3347 17.1421 17.3347 17.5273 17.5273 17.5273 17.7199 17.9125 17.9125 17.9125 17.7199 17.7199 17.9125 17.9125 17.9125 17.7199 17.9125 18.1051 18.1051 18.1051 18.2977 18.2977 18.1051 18.1051 18.2977 18.2977 18.2977 18.2977 18.2977 18.2977 18.1051 18.2977 18.2977 18.2977 18.2977 18.2977 18.2977 18.4903 18.4903 18.4903 18.2977 18.2977 18.2977 18.2977 18.1051 18.1051 18.1051 17.9125 17.9125 18.1051 18.1051 18.2977 18.2977 18.2977 18.2977 18.1051 17.9125 17.9125 18.1051 17.9125 17.7199 17.9125 17.9125 18.1051 17.9125 18.1051 18.2977 18.1051 17.9125 17.9125 17.7199 17.7199 17.7199 17.7199 17.7199 17.9125 18.1051 18.1051 17.9125 17.9125 17.9125 17.9125 17.9125 17.9125 17.9125 17.7199 17.9125 17.9125 17.9125 17.9125 17.9125 17.7199 17.7199 17.7199 17.7199 17.7199 17.7199 17.7199 17.7199 17.7199 17.7199 17.5273 17.5273 17.5273 17.5273 17.5273 17.5273 17.5273 17.5273 17.5273 17.3347 17.3347 17.3347 17.1421 17.1421 17.1421 17.1421 17.1421 16.9495 16.9495 16.9495 16.9495 16.9495 16.9495 16.7569 16.7569 16.7569 16.7569 16.5643 16.5643 16.5643 16.5643 16.5643 16.5643 16.3717 16.3717 16.3717 16.3717 16.3717 16.3717 16.1791 16.1791 16.1791 16.1791 16.1791 16.1791 15.9864 15.9864 15.9864 15.9864 15.7938 15.7938 15.7938 15.7938 15.7938 15.7938 15.6012 15.6012 15.6012 15.6012 15.6012 15.4086 15.4086 15.4086 15.4086 15.4086 15.4086 15.4086 15.216 15.216 15.216 15.216 15.216 15.216 15.0234 15.0234 15.0234 15.216 15.0234 15.0234 15.0234 15.0234 15.0234 14.8308 14.8308 15.0234 14.8308 14.8308 14.8308 14.8308 14.8308 14.8308 14.6382 14.8308 14.8308 14.8308 14.8308 14.6382 14.6382 14.6382 14.6382 14.6382 14.6382 14.6382 14.6382 14.6382 14.6382 14.6382 14.4456 14.4456 14.4456 14.4456 14.4456 14.4456 14.4456 14.253 14.253 14.253 14.253 14.253 14.0604 14.0604 14.0604 14.0604 14.0604 14.0604 14.0604 14.0604 14.0604 14.0604 14.0604 13.8678 13.8678 13.8678 13.8678 13.8678 13.8678 13.8678 13.8678 13.8678 13.8678 13.8678 13.6752 13.6752 13.6752 13.6752 13.6752 13.4825 13.6752 13.8678 13.8678 13.6752 13.4825 13.6752 13.6752 13.6752 13.4825 13.4825 13.4825 13.2899 13.2899 13.2899 13.4825 13.2899 13.2899 13.2899 13.2899 13.2899 13.2899 13.2899 13.2899 13.2899 13.2899 13.2899 13.2899 13.2899 13.2899 13.0973 13.0973 13.0973 13.0973 13.0973 13.0973 13.0973 13.0973 13.0973 13.0973 13.0973 13.0973 12.9047 13.0973 13.0973 13.2899 13.2899 13.0973 13.0973 13.0973 13.0973 13.0973 12.9047 12.9047 13.0973 13.0973 13.0973 13.0973 13.0973 13.0973 13.0973 13.2899 13.2899 13.2899 13.2899 13.4825 13.4825 13.2899 13.2899 13.4825 13.4825 13.2899 13.2899 13.4825 13.8678 13.8678 13.6752 13.6752 13.6752 13.8678 13.8678 13.8678 13.8678 14.0604 14.0604 14.0604 13.8678 14.0604 14.253 14.253 14.253 14.253 14.4456 14.4456 14.4456 14.6382 14.8308 14.6382 14.6382 14.6382 14.4456 14.4456 14.6382 14.8308 14.8308 14.8308 14.8308 14.8308 15.0234 15.0234 15.0234 15.0234 15.0234 15.216 15.216 15.216 15.4086 15.4086 15.4086 15.216 15.4086 15.4086 15.4086 15.4086 15.216 15.4086 15.6012 15.6012 15.6012 15.6012 15.7938 15.7938 15.7938 15.7938 15.7938 15.7938 15.9864 15.9864 15.9864 15.9864 15.9864 15.9864 15.9864 16.1791 15.9864 16.1791 16.1791 16.1791 16.1791 16.1791 16.1791 16.1791 16.3717 16.3717 16.3717 16.1791 16.1791 16.1791 16.1791 15.9864 15.7938 15.9864 15.9864 15.9864 15.9864 15.9864 15.9864 15.9864 15.9864 15.7938 15.7938 15.7938 15.7938 15.7938 15.7938 15.6012 15.6012 15.6012 15.6012 15.6012 15.6012 15.7938 15.7938 15.6012 15.4086 15.4086 15.4086 15.4086 15.216 15.0234 15.216 15.216 15.216 15.216 15.216 15.0234 15.216 15.216 15.4086 15.216 15.0234 15.0234 15.0234 15.0234 15.0234 14.8308 14.8308 14.8308 14.6382 14.8308 14.8308 15.0234 15.0234 14.8308 14.6382 14.6382 14.6382 14.6382 14.6382 14.4456 14.4456 14.6382 14.6382 14.4456 14.4456 14.253 14.253 14.253 14.253 14.253 14.0604 14.0604 14.0604 14.0604 13.8678 13.6752 13.6752 13.8678</A_FLOAT64>
+      </Values>
+      <Id>3</Id>
+      <Name>CHANNEL08</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <RawDatatype>DT_DOUBLE</RawDatatype>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>8</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>explicit</SequenceRepresentation>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <Values>
+        <A_FLOAT64>-4.44111 -2.03551 -4.44111 -4.44111 -4.44111 -2.03551 -4.44111 -2.03551 -4.44111 -2.03551 -4.44111 -2.03551 -2.03551 -2.03551 -4.44111 -2.03551 -2.03551 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -2.03551 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -2.03551 -4.44111 -2.03551 -4.44111 -2.03551 -2.03551 -2.03551 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -2.03551 -4.44111 -4.44111 -4.44111 -4.44111 -2.03551 -4.44111 -4.44111 -2.03551 -2.03551 -4.44111 -4.44111 -4.44111 -2.03551 -4.44111 -4.44111 -4.44111 -2.03551 -2.03551 -2.03551 -4.44111 -2.03551 -2.03551 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -2.03551 -2.03551 -2.03551 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -2.03551 -4.44111 -4.44111 -2.03551 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -2.03551 -2.03551 -2.03551 -4.44111 -2.03551 -4.44111 -2.03551 -2.03551 -4.44111 -4.44111 -4.44111 -2.03551 -2.03551 -4.44111 -4.44111 -4.44111 -2.03551 -2.03551 -2.03551 -2.03551 -4.44111 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -4.44111 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -4.44111 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -4.44111 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 0.370093 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 0.370093 -2.03551 0.370093 -2.03551 0.370093 -2.03551 0.370093 0.370093 -2.03551 -2.03551 0.370093 -2.03551 0.370093 -2.03551 -2.03551 0.370093 -2.03551 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 -2.03551 0.370093 -2.03551 0.370093 -2.03551 0.370093 -2.03551 -2.03551 -2.03551 -2.03551 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 -2.03551 0.370093 0.370093 -2.03551 0.370093 0.370093 -2.03551 0.370093 0.370093 0.370093 0.370093 -2.03551 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 -2.03551 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 -2.03551 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 -2.03551 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 -2.03551 0.370093 0.370093 -2.03551 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 -2.03551 -2.03551 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 2.7757 2.7757 2.7757 0.370093 2.7757 2.7757 2.7757 0.370093 0.370093 0.370093 2.7757 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 2.7757 0.370093 0.370093 2.7757 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -2.03551 -2.03551 -4.44111 -4.44111 -4.44111 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -9.25232 -9.25232 -9.25232 -11.6579 -11.6579 -11.6579 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -11.6579 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -11.6579 -11.6579 -14.0635 -16.4691 -18.8747 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -18.8747 -16.4691 -16.4691 -14.0635 -14.0635 -14.0635 -11.6579 -11.6579 -11.6579 -11.6579 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -11.6579 -11.6579 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -11.6579 -11.6579 -11.6579 -9.25232 -9.25232 -11.6579 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -6.84672 -6.84672 -6.84672 -6.84672 -4.44111 -4.44111 -6.84672 -6.84672 -4.44111 -4.44111 -2.03551 -2.03551 -2.03551 -2.03551 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 -2.03551 -2.03551 -2.03551 0.370093 0.370093 0.370093 2.7757 2.7757 5.1813 5.1813 7.58691 9.99247 9.99247 7.58691 5.1813 5.1813 2.7757 2.7757 0.370093 0.370093 2.7757 2.7757 2.7757 2.7757 5.1813 5.1813 7.58691 7.58691 7.58691 7.58691 9.99247 9.99247 7.58691 7.58691 7.58691 7.58691 7.58691 5.1813 5.1813 5.1813 5.1813 5.1813 5.1813 5.1813 5.1813 5.1813 7.58691 7.58691 7.58691 7.58691 7.58691 7.58691 7.58691 7.58691 7.58691 7.58691 5.1813 2.7757 2.7757 2.7757 2.7757 2.7757 0.370093 0.370093 0.370093 0.370093 0.370093 2.7757 2.7757 2.7757 0.370093 0.370093 -2.03551 -6.84672 -6.84672 -9.25232 -9.25232 -11.6579 -11.6579 -11.6579 -11.6579 -9.25232 -9.25232 -9.25232 -9.25232 -11.6579 -11.6579 -11.6579 -14.0635 -16.4691 -16.4691 -18.8747 -18.8747 -21.2803 -21.2803 -21.2803 -23.686 -26.0916 -26.0916 -23.686 -21.2803 -21.2803 -21.2803 -21.2803 -18.8747 -18.8747 -18.8747 -18.8747 -16.4691 -18.8747 -18.8747 -16.4691 -16.4691 -18.8747 -16.4691 -14.0635 -9.25232 -9.25232 -11.6579 -11.6579 -11.6579 -14.0635 -16.4691 -18.8747 -21.2803 -21.2803 -18.8747 -16.4691 -18.8747 -23.686 -26.0916 -23.686 -16.4691 -11.6579 -2.03551 7.58691 17.2093 19.6149 19.6149 19.6149 17.2093 9.99247 5.1813 12.3981 22.0205 26.8317 26.8317 31.6429 41.2654 48.4822 50.8878 48.4822 48.4822 48.4822 50.8878 53.2934 55.699 58.1046 62.9158 62.9158 60.5102 58.1046 58.1046 55.699 53.2934 53.2934 58.1046 65.3214 70.1326 72.5382 77.3494 77.3494 77.3494 77.3494 79.755 79.755 84.5662 89.3774 96.5943 103.811 106.217 106.217 103.811 103.811 98.9996 94.1887 89.3774 79.755 74.9438 89.3774 103.811 111.028 125.461 151.924 173.573 180.79 178.385 161.545 139.896 120.65 86.9718 46.0766 22.0205 22.0205 31.6429 43.671 60.5102 65.3214 58.1046 53.2934 60.5102 65.3214 65.3214 70.1326 86.9718 96.5943 98.9996 98.9996 103.811 101.405 96.5943 91.783 91.783 89.3774 82.1606 74.9438 74.9438 77.3494 74.9438 74.9438 79.755 86.9718 89.3774 89.3774 91.783 94.1887 94.1887 91.783 91.783 91.783 91.783 91.783 94.1887 91.783 91.783 91.783 89.3774 89.3774 86.9718 84.5662 84.5662 84.5662 82.1606 82.1606 82.1606 82.1606 82.1606 84.5662 86.9718 91.783 94.1887 96.5943 98.9996 101.405 98.9996 96.5943 96.5943 98.9996 103.811 111.028 115.839 120.65 123.056 127.867 123.056 118.245 115.839 113.433 106.217 101.405 98.9996 98.9996 94.1887 91.783 84.5662 79.755 72.5382 67.727 65.3214 70.1326 72.5382 74.9438 77.3494 79.755 82.1606 82.1606 79.755 77.3494 77.3494 77.3494 79.755 79.755 82.1606 84.5662 86.9718 86.9718 86.9718 89.3774 89.3774 89.3774 89.3774 86.9718 89.3774 89.3774 89.3774 86.9718 84.5662 82.1606 82.1606 82.1606 79.755 79.755 79.755 82.1606 82.1606 84.5662 84.5662 86.9718 84.5662 84.5662 82.1606 82.1606 79.755 79.755 79.755 79.755 79.755 79.755 79.755 82.1606 82.1606 82.1606 82.1606 79.755 79.755 79.755 79.755 77.3494 79.755 79.755 79.755 79.755 82.1606 82.1606 84.5662 84.5662 84.5662 84.5662 84.5662 84.5662 84.5662 84.5662 86.9718 89.3774 91.783 91.783 94.1887 96.5943 98.9996 98.9996 98.9996 101.405 103.811 101.405 101.405 98.9996 98.9996 98.9996 96.5943 94.1887 91.783 91.783 91.783 89.3774 86.9718 86.9718 86.9718 86.9718 84.5662 84.5662 84.5662 84.5662 86.9718 86.9718 86.9718 89.3774 94.1887 94.1887 96.5943 98.9996 98.9996 98.9996 101.405 101.405 101.405 101.405 101.405 101.405 101.405 103.811 103.811 106.217 106.217 106.217 108.622 111.028 111.028 111.028 111.028 113.433 115.839 118.245 120.65 120.65 118.245 118.245 118.245 120.65 120.65 120.65 123.056 123.056 120.65 120.65 120.65 120.65 118.245 118.245 118.245 120.65 120.65 120.65 123.056 123.056 123.056 123.056 125.461 125.461 125.461 125.461 127.867 125.461 125.461 125.461 125.461 125.461 125.461 125.461 127.867 127.867 127.867 127.867 127.867 127.867 125.461 125.461 123.056 120.65 118.245 115.839 115.839 111.028 111.028 108.622 108.622 106.217 106.217 106.217 106.217 103.811 103.811 103.811 103.811 103.811 103.811 101.405 98.9996 98.9996 98.9996 96.5943 96.5943 94.1887 94.1887 94.1887 94.1887 91.783 91.783 89.3774 89.3774 89.3774 86.9718 86.9718 86.9718 89.3774 86.9718 86.9718 89.3774 89.3774 86.9718 86.9718 84.5662 86.9718 86.9718 86.9718 86.9718 86.9718 89.3774 89.3774 89.3774 89.3774 89.3774 89.3774 89.3774 89.3774 86.9718 86.9718 89.3774 89.3774 89.3774 86.9718 86.9718 86.9718 89.3774 89.3774 89.3774 91.783 89.3774 84.5662 84.5662 84.5662 86.9718 84.5662 82.1606 82.1606 84.5662 82.1606 84.5662 84.5662 84.5662 84.5662 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 84.5662 82.1606 82.1606 82.1606 82.1606 82.1606 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 77.3494 77.3494 77.3494 74.9438 77.3494 77.3494 74.9438 77.3494 77.3494 77.3494 74.9438 79.755 84.5662 86.9718 84.5662 84.5662 89.3774 94.1887 94.1887 91.783 94.1887 96.5943 96.5943 96.5943 96.5943 96.5943 96.5943 96.5943 96.5943 96.5943 96.5943 96.5943 94.1887 94.1887 91.783 91.783 89.3774 89.3774 86.9718 86.9718 84.5662 84.5662 84.5662 82.1606 82.1606 82.1606 79.755 79.755 79.755 77.3494 77.3494 77.3494 77.3494 77.3494 77.3494 77.3494 74.9438 74.9438 74.9438 74.9438 77.3494 74.9438 74.9438 77.3494 77.3494 77.3494 77.3494 74.9438 77.3494 77.3494 74.9438 77.3494 74.9438 77.3494 77.3494 77.3494 77.3494 77.3494 77.3494 77.3494 77.3494 77.3494 74.9438 74.9438 72.5382 72.5382 72.5382 70.1326 70.1326 70.1326 70.1326 70.1326 70.1326 67.727 70.1326 70.1326 72.5382 72.5382 72.5382 74.9438 74.9438 77.3494 77.3494 79.755 79.755 82.1606 82.1606 82.1606 84.5662 84.5662 84.5662 84.5662 84.5662 84.5662 84.5662 84.5662 84.5662 84.5662 84.5662 84.5662 84.5662 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 79.755 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 84.5662 84.5662 84.5662 84.5662 84.5662 86.9718 86.9718 89.3774 86.9718 89.3774 89.3774 86.9718 89.3774 89.3774 89.3774 86.9718 89.3774 89.3774 89.3774 89.3774 89.3774 89.3774 89.3774 89.3774 89.3774 91.783 91.783 91.783 91.783 91.783 91.783 91.783 91.783 91.783 94.1887 94.1887 94.1887 94.1887 94.1887 94.1887 94.1887 94.1887 94.1887 96.5943 96.5943 94.1887 96.5943 96.5943 96.5943 96.5943 94.1887 96.5943 94.1887 94.1887 96.5943 94.1887 94.1887 94.1887 94.1887 94.1887 91.783 91.783 91.783 91.783 91.783 91.783 91.783 89.3774 91.783 89.3774 89.3774 89.3774 89.3774 89.3774 89.3774 86.9718 86.9718 86.9718 86.9718 86.9718 86.9718 84.5662 84.5662 84.5662 84.5662 84.5662 84.5662 84.5662 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 82.1606 82.1606 79.755 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 84.5662 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 82.1606 79.755 79.755 79.755 79.755 79.755 79.755 79.755 79.755 77.3494 77.3494 77.3494 77.3494 77.3494 74.9438 74.9438 74.9438 74.9438 74.9438 74.9438 74.9438 72.5382 72.5382 72.5382 72.5382 72.5382 72.5382 70.1326 70.1326 70.1326 70.1326 70.1326 70.1326 70.1326 70.1326 70.1326 70.1326 70.1326 70.1326 67.727 67.727 67.727 67.727 67.727 65.3214 65.3214 65.3214 65.3214 65.3214 65.3214 62.9158 62.9158 62.9158 62.9158 62.9158 60.5102 60.5102 60.5102 60.5102 60.5102 60.5102 60.5102 60.5102 60.5102 60.5102 60.5102 60.5102 60.5102 60.5102 58.1046 58.1046 58.1046 58.1046 58.1046 58.1046 58.1046 58.1046 55.699 55.699 55.699 55.699 55.699 55.699 55.699 55.699 53.2934 53.2934 53.2934 53.2934 53.2934 53.2934 53.2934 50.8878 50.8878 50.8878 50.8878 50.8878 48.4822 48.4822 48.4822 48.4822 48.4822 48.4822 48.4822 46.0766 46.0766 46.0766 46.0766 46.0766 46.0766 43.671 43.671 43.671 43.671 43.671 43.671 41.2654 43.671 41.2654 41.2654 41.2654 41.2654 41.2654 38.8598 38.8598 38.8598 38.8598 38.8598 38.8598 36.4542 36.4542 36.4542 36.4542 36.4542 36.4542 36.4542 36.4542 36.4542 34.0485 34.0485 34.0485 34.0485 34.0485 34.0485 34.0485 31.6429 31.6429 31.6429 31.6429 31.6429 31.6429 29.2373 31.6429 29.2373 29.2373 29.2373 29.2373 29.2373 29.2373 29.2373 29.2373 26.8317 26.8317 26.8317 26.8317 26.8317 26.8317 26.8317 26.8317 26.8317 26.8317 26.8317 26.8317 26.8317 24.4261 26.8317 26.8317 26.8317 26.8317 24.4261 24.4261 24.4261 24.4261 24.4261 24.4261 22.0205 22.0205 22.0205 22.0205 22.0205 22.0205 22.0205 19.6149 19.6149 19.6149 19.6149 19.6149 19.6149 19.6149 17.2093 17.2093 17.2093 17.2093 17.2093 17.2093 17.2093 17.2093 17.2093 17.2093 14.8037 14.8037 14.8037 14.8037 14.8037 14.8037 14.8037 14.8037 14.8037 12.3981 12.3981 12.3981 12.3981 12.3981 12.3981 12.3981 9.99247 9.99247 9.99247 9.99247 9.99247 9.99247 9.99247 9.99247 9.99247 9.99247 7.58691 7.58691 7.58691 7.58691 7.58691 7.58691 7.58691 7.58691 7.58691 7.58691 5.1813 5.1813 5.1813 5.1813 5.1813 5.1813 5.1813 5.1813 5.1813 2.7757 2.7757 2.7757 2.7757 2.7757 2.7757 2.7757 2.7757 0.370093 2.7757 2.7757 2.7757 2.7757 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 0.370093 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -2.03551 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -4.44111 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -9.25232 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -6.84672 -9.25232 -6.84672 -6.84672 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -6.84672 -6.84672 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -9.25232 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -11.6579 -14.0635 -11.6579 -11.6579 -11.6579 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -16.4691 -16.4691 -16.4691 -16.4691 -16.4691 -16.4691 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -16.4691 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -21.2803 -18.8747 -18.8747 -21.2803 -21.2803 -18.8747 -18.8747 -18.8747 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -23.686 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -23.686 -21.2803 -21.2803 -23.686 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -18.8747 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -18.8747 -21.2803 -21.2803 -18.8747 -21.2803 -18.8747 -18.8747 -18.8747 -21.2803 -18.8747 -21.2803 -18.8747 -18.8747 -21.2803 -21.2803 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -21.2803 -18.8747 -18.8747 -18.8747 -18.8747 -21.2803 -18.8747 -21.2803 -18.8747 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -23.686 -21.2803 -23.686 -21.2803 -21.2803 -21.2803 -23.686 -23.686 -23.686 -23.686 -23.686 -21.2803 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -28.4972 -26.0916 -26.0916 -28.4972 -26.0916 -26.0916 -28.4972 -26.0916 -26.0916 -28.4972 -26.0916 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -30.9028 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -30.9028 -28.4972 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -33.3084 -30.9028 -33.3084 -30.9028 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -35.714 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -35.714 -35.714 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -35.714 -35.714 -35.714 -35.714 -33.3084 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -33.3084 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -35.714 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -40.5252 -40.5252 -40.5252 -38.1196 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -40.5252 -38.1196 -40.5252 -38.1196 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -42.9308 -40.5252 -42.9308 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -40.5252 -38.1196 -38.1196 -40.5252 -40.5252 -38.1196 -38.1196 -40.5252 -40.5252 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -38.1196 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -35.714 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -33.3084 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -30.9028 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -28.4972 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -28.4972 -28.4972 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -28.4972 -26.0916 -26.0916 -26.0916 -28.4972 -26.0916 -28.4972 -28.4972 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -26.0916 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -23.686 -21.2803 -23.686 -23.686 -23.686 -21.2803 -23.686 -23.686 -23.686 -21.2803 -21.2803 -23.686 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -21.2803 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -18.8747 -16.4691 -16.4691 -16.4691 -16.4691 -16.4691 -16.4691 -16.4691 -16.4691 -16.4691 -16.4691 -16.4691 -16.4691 -16.4691 -16.4691 -16.4691 -16.4691 -16.4691 -16.4691 -16.4691 -16.4691 -14.0635 -16.4691 -14.0635 -14.0635 -16.4691 -16.4691 -14.0635 -16.4691 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -14.0635 -11.6579 -11.6579 -14.0635 -11.6579 -11.6579 -11.6579 -11.6579</A_FLOAT64>
+      </Values>
+      <Id>4</Id>
+      <Name>CHANNEL03</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <RawDatatype>DT_DOUBLE</RawDatatype>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>3</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>explicit</SequenceRepresentation>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <Values>
+        <A_FLOAT64>4.38541E-6 4.38541E-6 4.38541E-6 2.40175 4.38541E-6 4.38541E-6 2.40175 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 2.40175 4.38541E-6 4.38541E-6 4.38541E-6 2.40175 4.38541E-6 2.40175 4.38541E-6 4.38541E-6 4.38541E-6 2.40175 2.40175 2.40175 2.40175 2.40175 4.38541E-6 4.38541E-6 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 4.38541E-6 2.40175 4.38541E-6 2.40175 2.40175 4.38541E-6 2.40175 4.38541E-6 4.38541E-6 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 4.38541E-6 2.40175 2.40175 2.40175 2.40175 4.38541E-6 2.40175 2.40175 2.40175 2.40175 4.38541E-6 2.40175 2.40175 2.40175 2.40175 4.38541E-6 2.40175 4.38541E-6 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 4.38541E-6 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 4.38541E-6 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 4.38541E-6 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 4.38541E-6 2.40175 2.40175 2.40175 2.40175 2.40175 4.38541E-6 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 4.38541E-6 4.38541E-6 2.40175 2.40175 4.38541E-6 2.40175 2.40175 4.38541E-6 2.40175 2.40175 2.40175 2.40175 4.38541E-6 2.40175 2.40175 4.38541E-6 4.38541E-6 4.38541E-6 2.40175 2.40175 2.40175 4.38541E-6 2.40175 4.38541E-6 2.40175 2.40175 2.40175 2.40175 4.38541E-6 2.40175 4.38541E-6 2.40175 2.40175 4.38541E-6 4.38541E-6 2.40175 4.38541E-6 2.40175 2.40175 2.40175 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 2.40175 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 2.40175 2.40175 2.40175 2.40175 4.38541E-6 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 9.60698 9.60698 9.60698 9.60698 9.60698 9.60698 9.60698 12.0087 9.60698 12.0087 12.0087 12.0087 12.0087 12.0087 12.0087 14.4105 14.4105 14.4105 14.4105 14.4105 14.4105 16.8122 16.8122 16.8122 16.8122 16.8122 16.8122 16.8122 16.8122 16.8122 16.8122 19.214 19.214 19.214 19.214 19.214 19.214 19.214 19.214 21.6157 19.214 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 21.6157 24.0174 21.6157 21.6157 21.6157 21.6157 24.0174 24.0174 24.0174 24.0174 24.0174 24.0174 24.0174 24.0174 24.0174 24.0174 26.4192 26.4192 28.8209 28.8209 28.8209 31.2227 28.8209 28.8209 31.2227 31.2227 33.6245 33.6245 33.6245 33.6245 33.6245 31.2227 31.2227 31.2227 28.8209 31.2227 31.2227 31.2227 31.2227 31.2227 28.8209 28.8209 28.8209 31.2227 31.2227 31.2227 33.6245 36.0261 38.4279 38.4279 38.4279 36.0261 36.0261 36.0261 38.4279 36.0261 38.4279 36.0261 38.4279 40.8296 40.8296 43.2314 43.2314 45.6332 48.0349 50.4366 50.4366 52.8384 50.4366 50.4366 48.0349 48.0349 48.0349 48.0349 48.0349 48.0349 48.0349 48.0349 48.0349 48.0349 48.0349 48.0349 48.0349 48.0349 48.0349 50.4366 50.4366 50.4366 52.8384 52.8384 55.2401 55.2401 55.2401 55.2401 55.2401 57.6419 57.6419 60.0436 60.0436 62.4454 62.4454 62.4454 64.8471 64.8471 64.8471 67.2488 67.2488 67.2488 67.2488 67.2488 69.6506 69.6506 72.0523 72.0523 74.4541 74.4541 74.4541 74.4541 74.4541 74.4541 74.4541 74.4541 74.4541 74.4541 74.4541 74.4541 76.8559 79.2575 79.2575 79.2575 81.6593 81.6593 81.6593 84.0611 84.0611 84.0611 84.0611 84.0611 86.4628 88.8646 91.2663 91.2663 93.668 93.668 93.668 93.668 93.668 91.2663 88.8646 86.4628 86.4628 86.4628 86.4628 84.0611 86.4628 86.4628 86.4628 86.4628 88.8646 88.8646 91.2663 88.8646 91.2663 91.2663 93.668 93.668 93.668 93.668 93.668 93.668 91.2663 91.2663 88.8646 88.8646 88.8646 88.8646 88.8646 88.8646 91.2663 91.2663 93.668 96.0698 96.0698 98.4718 100.873 103.275 103.275 103.275 100.873 98.4718 96.0698 91.2663 88.8646 86.4628 86.4628 86.4628 86.4628 88.8646 96.0698 103.275 110.48 112.882 112.882 112.882 110.48 108.079 108.079 105.677 103.275 103.275 103.275 105.677 108.079 112.882 115.284 120.087 127.293 132.096 136.9 141.703 146.506 148.908 153.712 156.113 156.113 158.515 165.72 175.327 187.336 196.943 201.747 199.345 189.738 172.926 160.917 153.712 151.309 153.712 156.113 158.515 163.319 165.72 172.926 177.729 187.336 192.14 189.738 187.336 184.934 184.934 180.131 170.524 160.917 158.515 160.917 168.122 175.327 184.934 192.14 201.747 208.952 206.55 194.541 177.729 168.122 172.926 184.934 192.14 196.943 194.541 192.14 201.747 211.354 208.952 192.14 172.926 160.917 158.515 156.113 148.908 141.703 136.9 134.498 134.498 139.301 148.908 158.515 170.524 184.934 204.148 223.362 237.773 244.978 244.978 242.576 240.174 232.969 225.764 216.157 211.354 208.952 211.354 223.362 232.969 237.773 237.773 240.174 252.183 276.201 302.62 326.638 345.852 362.663 374.672 386.681 396.288 398.689 386.681 365.065 338.646 312.227 295.414 326.638 410.699 504.366 571.615 607.641 650.873 742.139 821.396 811.789 730.13 650.873 612.445 595.633 562.008 499.562 441.921 415.502 417.903 425.109 417.903 413.1 422.707 453.929 494.76 533.187 557.205 562.008 562.008 562.008 559.607 545.196 528.384 513.973 509.169 501.965 482.751 461.135 444.322 432.314 417.903 405.895 401.092 401.092 405.895 415.502 420.306 420.306 415.502 408.296 398.689 384.279 369.868 360.261 348.253 338.646 331.441 326.638 324.235 319.432 317.031 314.628 314.628 312.227 309.825 305.021 302.62 297.816 293.013 290.611 290.611 290.611 293.013 295.414 293.013 283.406 271.398 252.183 235.371 230.567 235.371 240.174 247.38 254.585 259.388 256.987 252.183 244.978 242.576 244.978 252.183 268.995 288.209 307.423 321.834 326.638 319.432 307.423 297.816 293.013 293.013 297.816 307.423 314.628 321.834 321.834 317.031 314.628 312.227 312.227 314.628 319.432 324.235 331.441 333.842 336.245 336.245 333.842 329.039 324.235 319.432 314.628 317.031 319.432 319.432 317.031 309.825 302.62 297.816 295.414 297.816 297.816 297.816 297.816 297.816 297.816 297.816 297.816 297.816 295.414 295.414 295.414 295.414 295.414 297.816 297.816 300.218 302.62 305.021 302.62 302.62 300.218 297.816 295.414 295.414 293.013 290.611 290.611 290.611 290.611 290.611 293.013 293.013 293.013 295.414 295.414 293.013 293.013 293.013 293.013 293.013 295.414 295.414 297.816 297.816 295.414 293.013 290.611 288.209 285.807 285.807 285.807 288.209 290.611 293.013 297.816 305.021 309.825 317.031 324.235 331.441 336.245 343.449 345.852 350.655 355.458 357.86 362.663 367.467 372.271 377.074 384.279 391.485 396.288 398.689 403.493 403.493 403.493 401.092 401.092 396.288 391.485 386.681 381.878 379.475 377.074 377.074 377.074 377.074 379.475 379.475 379.475 379.475 377.074 374.672 372.271 367.467 362.663 353.056 345.852 338.646 331.441 326.638 324.235 321.834 319.432 319.432 317.031 317.031 317.031 314.628 312.227 309.825 305.021 300.218 295.414 290.611 283.406 278.602 268.995 264.192 256.987 252.183 247.38 244.978 240.174 232.969 230.567 228.166 225.764 223.362 220.96 218.559 213.755 211.354 208.952 204.148 199.345 194.541 189.738 187.336 184.934 184.934 184.934 184.934 184.934 187.336 187.336 187.336 187.336 189.738 189.738 192.14 194.541 196.943 199.345 199.345 201.747 199.345 199.345 196.943 194.541 192.14 189.738 189.738 187.336 184.934 180.131 175.327 172.926 170.524 170.524 170.524 172.926 175.327 175.327 172.926 172.926 170.524 170.524 170.524 170.524 172.926 175.327 175.327 172.926 172.926 175.327 172.926 172.926 170.524 170.524 170.524 170.524 172.926 172.926 175.327 177.729 177.729 180.131 180.131 180.131 180.131 180.131 177.729 177.729 175.327 175.327 175.327 172.926 170.524 170.524 168.122 168.122 165.72 165.72 163.319 163.319 160.917 158.515 158.515 158.515 158.515 156.113 156.113 156.113 156.113 153.712 153.712 151.309 151.309 151.309 151.309 151.309 153.712 153.712 153.712 153.712 153.712 153.712 151.309 151.309 151.309 148.908 148.908 148.908 148.908 148.908 148.908 148.908 146.506 146.506 144.105 144.105 141.703 141.703 141.703 139.301 141.703 141.703 141.703 141.703 144.105 146.506 148.908 153.712 156.113 156.113 156.113 153.712 153.712 151.309 148.908 144.105 141.703 139.301 134.498 132.096 127.293 124.891 122.489 120.087 120.087 120.087 117.686 117.686 120.087 120.087 120.087 120.087 120.087 120.087 120.087 120.087 117.686 115.284 112.882 112.882 110.48 110.48 108.079 105.677 105.677 103.275 100.873 100.873 100.873 98.4718 98.4718 98.4718 98.4718 98.4718 98.4718 96.0698 96.0698 93.668 93.668 91.2663 91.2663 91.2663 88.8646 86.4628 84.0611 84.0611 81.6593 79.2575 79.2575 76.8559 74.4541 74.4541 72.0523 72.0523 72.0523 69.6506 69.6506 69.6506 69.6506 67.2488 67.2488 67.2488 64.8471 64.8471 64.8471 64.8471 62.4454 62.4454 60.0436 60.0436 57.6419 57.6419 57.6419 55.2401 55.2401 55.2401 55.2401 55.2401 55.2401 55.2401 55.2401 55.2401 55.2401 55.2401 55.2401 52.8384 52.8384 50.4366 50.4366 48.0349 45.6332 43.2314 43.2314 40.8296 40.8296 38.4279 36.0261 36.0261 36.0261 33.6245 33.6245 33.6245 31.2227 31.2227 28.8209 28.8209 28.8209 26.4192 26.4192 24.0174 21.6157 21.6157 19.214 19.214 16.8122 16.8122 14.4105 14.4105 14.4105 14.4105 14.4105 12.0087 12.0087 12.0087 9.60698 9.60698 7.20524 7.20524 4.8035 4.8035 2.40175 2.40175 4.38541E-6 -2.40174 -2.40174 -4.80349 -4.80349 -7.20523 -9.60697 -9.60697 -12.0087 -12.0087 -12.0087 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -16.8122 -16.8122 -19.214 -19.214 -19.214 -19.214 -19.214 -19.214 -21.6156 -21.6156 -21.6156 -21.6156 -21.6156 -21.6156 -21.6156 -21.6156 -19.214 -19.214 -19.214 -19.214 -19.214 -19.214 -19.214 -19.214 -19.214 -19.214 -19.214 -19.214 -19.214 -21.6156 -21.6156 -21.6156 -21.6156 -21.6156 -21.6156 -21.6156 -21.6156 -21.6156 -21.6156 -21.6156 -21.6156 -21.6156 -24.0174 -24.0174 -24.0174 -24.0174 -24.0174 -24.0174 -24.0174 -24.0174 -26.4192 -26.4192 -26.4192 -26.4192 -26.4192 -26.4192 -26.4192 -26.4192 -26.4192 -26.4192 -28.8209 -28.8209 -28.8209 -28.8209 -28.8209 -28.8209 -28.8209 -28.8209 -28.8209 -28.8209 -28.8209 -31.2227 -31.2227 -28.8209 -28.8209 -28.8209 -28.8209 -28.8209 -31.2227 -31.2227 -31.2227 -31.2227 -31.2227 -31.2227 -31.2227 -31.2227 -33.6245 -33.6245 -33.6245 -33.6245 -33.6245 -33.6245 -33.6245 -33.6245 -33.6245 -33.6245 -33.6245 -33.6245 -33.6245 -33.6245 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -38.4279 -36.0261 -36.0261 -36.0261 -38.4279 -38.4279 -38.4279 -38.4279 -38.4279 -38.4279 -38.4279 -38.4279 -36.0261 -38.4279 -36.0261 -36.0261 -38.4279 -38.4279 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -38.4279 -38.4279 -38.4279 -38.4279 -40.8296 -38.4279 -40.8296 -38.4279 -38.4279 -38.4279 -38.4279 -36.0261 -38.4279 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -36.0261 -33.6245 -33.6245 -33.6245 -33.6245 -33.6245 -33.6245 -33.6245 -33.6245 -31.2227 -31.2227 -31.2227 -31.2227 -31.2227 -31.2227 -31.2227 -31.2227 -31.2227 -31.2227 -31.2227 -31.2227 -28.8209 -28.8209 -28.8209 -28.8209 -28.8209 -28.8209 -28.8209 -28.8209 -28.8209 -28.8209 -28.8209 -28.8209 -28.8209 -28.8209 -28.8209 -26.4192 -26.4192 -26.4192 -26.4192 -26.4192 -26.4192 -26.4192 -26.4192 -26.4192 -26.4192 -26.4192 -24.0174 -26.4192 -26.4192 -26.4192 -26.4192 -26.4192 -26.4192 -26.4192 -26.4192 -24.0174 -24.0174 -24.0174 -24.0174 -21.6156 -21.6156 -21.6156 -21.6156 -21.6156 -21.6156 -21.6156 -19.214 -19.214 -19.214 -19.214 -19.214 -19.214 -19.214 -19.214 -16.8122 -16.8122 -16.8122 -16.8122 -16.8122 -16.8122 -16.8122 -16.8122 -16.8122 -16.8122 -16.8122 -16.8122 -16.8122 -16.8122 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -9.60697 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -7.20523 -9.60697 -9.60697 -9.60697 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -4.80349 -4.80349 -7.20523 -4.80349 -7.20523 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -2.40174 -4.80349 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 4.38541E-6 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 4.8035 4.8035 2.40175 2.40175 4.38541E-6 4.38541E-6 2.40175 4.8035 4.8035 7.20524 7.20524 9.60698 9.60698 9.60698 7.20524 7.20524 7.20524 7.20524 9.60698 9.60698 9.60698 9.60698 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 9.60698 9.60698 7.20524 7.20524 7.20524 7.20524 9.60698 9.60698 9.60698 9.60698 9.60698 9.60698 9.60698 9.60698 9.60698 9.60698 9.60698 9.60698 9.60698 9.60698 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 9.60698 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 7.20524 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 2.40175 4.8035 2.40175 4.8035 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 4.8035 2.40175 4.8035 4.8035 2.40175 2.40175 2.40175 2.40175 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 2.40175 2.40175 2.40175 2.40175 2.40175 4.8035 4.8035 4.8035 4.8035 4.8035 4.8035 2.40175 4.8035 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 4.8035 4.8035 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 -2.40174 -2.40174 -2.40174 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 4.38541E-6 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 4.38541E-6 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 4.38541E-6 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 4.38541E-6 4.38541E-6 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 4.38541E-6 4.38541E-6 4.38541E-6 2.40175 4.38541E-6 2.40175 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 -2.40174 4.38541E-6 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -4.80349 -4.80349 -4.80349 -4.80349 -2.40174 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -9.60697 -9.60697 -7.20523 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -12.0087 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -12.0087 -9.60697 -9.60697 -9.60697 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -14.4105 -14.4105 -12.0087 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -16.8122 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -16.8122 -16.8122 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -16.8122 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -14.4105 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -14.4105 -14.4105 -14.4105 -12.0087 -14.4105 -12.0087 -14.4105 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -12.0087 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -12.0087 -12.0087 -12.0087 -12.0087 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -7.20523 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -7.20523 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -9.60697 -7.20523 -7.20523 -9.60697 -9.60697 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -9.60697 -9.60697 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -7.20523 -4.80349 -7.20523 -4.80349 -7.20523 -7.20523 -7.20523 -4.80349 -7.20523 -4.80349 -4.80349 -4.80349 -7.20523 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -4.80349 -2.40174 -4.80349 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -4.80349 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 -2.40174 4.38541E-6 -2.40174 4.38541E-6 -2.40174 4.38541E-6 -2.40174 -2.40174 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 4.38541E-6 2.40175 4.38541E-6 4.38541E-6 4.38541E-6 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 2.40175 4.8035 4.8035 4.8035 2.40175 4.8035 2.40175 4.8035 4.8035 4.8035</A_FLOAT64>
+      </Values>
+      <Id>5</Id>
+      <Name>CHANNEL01</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <RawDatatype>DT_DOUBLE</RawDatatype>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>1</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>explicit</SequenceRepresentation>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <Values>
+        <A_FLOAT64>-1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -5.43436 -5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -5.43436 -5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -5.43436 -1.74623E-7 -5.43436 -1.74623E-7 -5.43436 -5.43436 -5.43436 -1.74623E-7 -1.74623E-7 -5.43436 -1.74623E-7 -1.74623E-7 -5.43436 -5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -5.43436 -5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -5.43436 -5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -5.43436 -5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 5.43436 5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 5.43436 5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 5.43436 5.43436 -1.74623E-7 -1.74623E-7 5.43436 -1.74623E-7 -1.74623E-7 5.43436 -1.74623E-7 -1.74623E-7 5.43436 5.43436 -1.74623E-7 5.43436 5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 5.43436 5.43436 -1.74623E-7 -1.74623E-7 5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 5.43436 5.43436 5.43436 -1.74623E-7 -1.74623E-7 5.43436 5.43436 5.43436 5.43436 5.43436 5.43436 -1.74623E-7 5.43436 5.43436 5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 5.43436 5.43436 5.43436 5.43436 -1.74623E-7 5.43436 5.43436 5.43436 5.43436 5.43436 5.43436 5.43436 5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 5.43436 -1.74623E-7 -1.74623E-7 5.43436 5.43436 5.43436 5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 5.43436 5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 -1.74623E-7 5.43436 5.43436 5.43436 5.43436 -1.74623E-7 -1.74623E-7 -1.74623E-7 5.43436 5.43436 5.43436 5.43436 5.43436 -1.74623E-7 -1.74623E-7 5.43436 5.43436 5.43436 5.43436 5.43436 5.43436 5.43436 5.43436 5.43436 5.43436 5.43436 5.43436 -1.74623E-7 5.43436 5.43436 5.43436 5.43436 5.43436 5.43436 5.43436 10.8687 5.43436 5.43436 10.8687 10.8687 10.8687 10.8687 10.8687 10.8687 16.3031 16.3031 10.8687 16.3031 16.3031 16.3031 16.3031 16.3031 16.3031 16.3031 16.3031 21.7374 21.7374 21.7374 21.7374 21.7374 21.7374 21.7374 21.7374 21.7374 21.7374 27.1718 27.1718 27.1718 32.6061 27.1718 27.1718 27.1718 27.1718 32.6061 32.6061 32.6061 32.6061 32.6061 32.6061 32.6061 32.6061 38.0405 38.0405 38.0405 38.0405 38.0405 38.0405 38.0405 43.4748 43.4748 43.4748 43.4748 43.4748 43.4748 48.9092 48.9092 48.9092 48.9092 48.9092 54.3436 65.2123 76.081 76.081 65.2123 59.7779 59.7779 70.6466 76.081 81.5153 81.5153 81.5153 86.9497 92.3841 97.8184 103.253 108.687 108.687 114.121 114.121 119.556 130.425 135.859 124.99 103.253 97.8184 124.99 152.162 163.031 163.031 163.031 168.465 173.899 173.899 195.637 244.546 336.93 478.223 548.87 505.395 402.142 331.496 347.799 385.839 423.88 451.052 445.617 407.577 353.233 315.193 315.193 326.061 347.799 369.536 374.971 374.971 380.405 402.142 429.314 440.183 423.88 418.445 418.445 429.314 423.88 402.142 385.839 380.405 396.708 402.142 402.142 402.142 413.011 434.748 451.052 461.92 472.789 478.223 489.092 494.526 494.526 494.526 489.092 489.092 489.092 489.092 489.092 483.658 478.223 478.223 483.658 494.526 494.526 494.526 494.526 494.526 499.961 499.961 510.829 516.264 521.698 516.264 499.961 499.961 527.133 548.87 559.739 570.607 581.476 592.345 614.082 635.82 652.123 662.991 668.426 668.426 668.426 679.294 684.729 690.163 679.294 652.123 630.385 641.254 690.163 728.204 728.204 695.598 673.86 701.032 755.375 798.85 809.719 793.416 782.547 809.719 864.063 923.841 961.881 972.75 989.053 1021.66 1070.57 1097.74 1097.74 1076.0 1043.4 1005.36 983.618 961.881 940.144 923.841 929.275 951.012 994.487 1037.96 1081.44 1114.04 1135.78 1152.08 1162.95 1173.82 1179.26 1173.82 1168.39 1168.39 1173.82 1179.26 1179.26 1184.69 1195.56 1211.86 1233.6 1255.34 1271.64 1282.51 1293.38 1304.25 1309.68 1309.68 1304.25 1304.25 1304.25 1304.25 1309.68 1315.11 1331.42 1347.72 1369.46 1385.76 1407.5 1429.24 1450.97 1472.71 1489.01 1510.75 1527.05 1548.79 1565.09 1581.4 1597.7 1619.44 1646.61 1679.22 1717.26 1749.86 1787.9 1825.94 1869.42 1923.76 1983.54 2054.19 2130.27 2200.91 2260.69 2304.17 2347.64 2412.85 2472.63 2499.8 2526.98 2570.45 2624.79 2668.27 2700.88 2749.78 2804.13 2853.04 2891.08 2929.12 2967.16 3016.07 3070.41 3097.58 3119.32 3141.06 3179.1 3211.7 3244.31 3271.48 3304.09 3342.13 3369.3 3391.04 3418.21 3456.25 3505.16 3526.9 3526.9 3537.77 3559.5 3575.81 3575.81 3575.81 3602.98 3641.02 3673.62 3673.62 3673.62 3689.93 3706.23 3706.23 3706.23 3700.8 3695.36 3679.06 3646.45 3602.98 3564.94 3532.33 3499.73 3461.68 3412.78 3358.43 3325.83 3293.22 3244.31 3173.66 3113.89 3059.54 3010.63 2967.16 2929.12 2885.64 2820.43 2760.65 2717.18 2695.44 2679.14 2635.66 2575.88 2499.8 2423.72 2358.51 2304.17 2255.26 2200.91 2141.14 2081.36 2016.15 1956.37 1896.59 1836.81 1782.47 1744.43 1722.69 1695.52 1662.91 1619.44 1586.83 1554.23 1521.62 1494.45 1467.28 1440.1 1402.06 1364.02 1325.98 1271.64 1200.99 1141.21 1119.48 1119.48 1097.74 1048.83 989.053 918.406 864.063 826.022 771.679 695.598 619.517 559.739 516.264 472.789 423.88 391.274 369.536 347.799 326.061 298.89 271.718 255.415 239.112 233.677 228.243 222.809 201.071 168.465 146.728 157.596 168.465 157.596 130.425 103.253 86.9497 81.5153 86.9497 81.5153 65.2123 43.4748 27.1718 21.7374 16.3031 16.3031 16.3031 10.8687 5.43436 5.43436 21.7374 48.9092 81.5153 119.556 146.728 163.031 168.465 184.768 190.202 201.071 201.071 195.637 168.465 152.162 168.465 195.637 201.071 179.334 146.728 124.99 119.556 108.687 92.3841 70.6466 65.2123 65.2123 48.9092 32.6061 32.6061 43.4748 48.9092 38.0405 32.6061 27.1718 32.6061 38.0405 32.6061 27.1718 32.6061 38.0405 43.4748 43.4748 43.4748 54.3436 70.6466 81.5153 86.9497 97.8184 114.121 135.859 141.293 141.293 146.728 168.465 201.071 222.809 222.809 201.071 179.334 184.768 195.637 206.506 206.506 206.506 228.243 282.587 288.021 244.546 228.243 244.546 255.415 260.849 260.849 249.98 244.546 249.98 266.283 293.455 304.324 293.455 277.152 271.718 282.587 293.455 304.324 304.324 298.89 288.021 271.718 260.849 249.98 255.415 277.152 304.324 342.364 353.233 342.364 336.93 347.799 364.102 380.405 391.274 396.708 402.142 396.708 402.142 402.142 391.274 380.405 364.102 347.799 336.93 331.496 320.627 320.627 331.496 331.496 331.496 320.627 315.193 309.758 304.324 293.455 282.587 277.152 271.718 255.415 239.112 222.809 217.374 206.506 168.465 135.859 124.99 108.687 103.253 119.556 146.728 173.899 190.202 206.506 228.243 266.283 288.021 288.021 282.587 282.587 277.152 271.718 271.718 288.021 298.89 298.89 293.455 282.587 271.718 249.98 217.374 152.162 76.081 32.6061 5.43436 -43.4748 -146.728 -255.415 -353.233 -413.011 -429.314 -445.617 -494.526 -554.304 -559.739 -532.567 -510.83 -521.698 -538.001 -538.001 -538.001 -554.304 -586.91 -614.082 -635.82 -657.557 -673.86 -695.598 -711.901 -722.769 -733.638 -733.638 -728.204 -722.769 -711.901 -701.032 -695.598 -690.163 -690.163 -684.729 -679.295 -684.729 -701.032 -717.335 -733.638 -755.376 -777.113 -804.285 -820.588 -836.891 -847.76 -853.194 -869.497 -885.8 -902.103 -912.972 -918.406 -923.841 -934.709 -940.144 -951.012 -967.315 -994.487 -1016.22 -1032.53 -1043.4 -1054.27 -1065.13 -1070.57 -1081.44 -1092.31 -1108.61 -1135.78 -1162.95 -1179.26 -1200.99 -1222.73 -1249.9 -1277.07 -1298.81 -1315.11 -1331.42 -1336.85 -1342.29 -1353.15 -1369.46 -1391.2 -1412.93 -1434.67 -1461.84 -1489.01 -1521.62 -1548.79 -1570.53 -1586.83 -1603.14 -1619.44 -1641.18 -1657.48 -1673.78 -1690.08 -1695.52 -1695.52 -1690.08 -1690.08 -1695.52 -1690.08 -1673.78 -1657.48 -1646.61 -1646.61 -1641.18 -1619.44 -1597.7 -1570.53 -1559.66 -1559.66 -1570.53 -1570.53 -1554.23 -1543.36 -1554.23 -1565.09 -1581.4 -1597.7 -1597.7 -1570.53 -1543.36 -1548.79 -1586.83 -1597.7 -1559.66 -1543.36 -1548.79 -1543.36 -1521.62 -1521.62 -1543.36 -1581.4 -1581.4 -1570.53 -1575.96 -1597.7 -1619.44 -1624.87 -1614.0 -1592.27 -1586.83 -1581.4 -1570.53 -1554.23 -1548.79 -1554.23 -1559.66 -1559.66 -1559.66 -1565.09 -1565.09 -1548.79 -1532.49 -1516.19 -1505.32 -1494.45 -1489.01 -1483.58 -1483.58 -1489.01 -1483.58 -1483.58 -1483.58 -1483.58 -1478.14 -1483.58 -1478.14 -1478.14 -1472.71 -1467.28 -1472.71 -1472.71 -1467.28 -1467.28 -1467.28 -1467.28 -1461.84 -1456.41 -1445.54 -1434.67 -1429.24 -1423.8 -1423.8 -1423.8 -1423.8 -1418.37 -1407.5 -1385.76 -1364.02 -1347.72 -1342.29 -1336.85 -1331.42 -1336.85 -1342.29 -1358.59 -1369.46 -1374.89 -1374.89 -1380.33 -1380.33 -1374.89 -1364.02 -1353.15 -1342.29 -1336.85 -1320.55 -1315.11 -1304.25 -1298.81 -1287.94 -1277.07 -1271.64 -1266.21 -1260.77 -1266.21 -1266.21 -1255.34 -1244.47 -1233.6 -1233.6 -1233.6 -1239.03 -1239.03 -1244.47 -1239.03 -1239.03 -1233.6 -1217.3 -1200.99 -1179.26 -1157.52 -1146.65 -1135.78 -1130.35 -1124.91 -1124.91 -1119.48 -1108.61 -1097.74 -1086.87 -1092.31 -1092.31 -1092.31 -1092.31 -1092.31 -1092.31 -1086.87 -1081.44 -1076.0 -1065.13 -1059.7 -1054.27 -1048.83 -1043.4 -1043.4 -1043.4 -1037.96 -1032.53 -1021.66 -1021.66 -1027.09 -1027.09 -1016.22 -1005.36 -999.922 -994.487 -983.618 -978.184 -972.75 -967.315 -967.315 -967.315 -967.315 -961.881 -961.881 -956.447 -945.578 -934.709 -929.275 -923.841 -918.406 -912.972 -912.972 -907.538 -902.103 -896.669 -891.234 -891.234 -885.8 -885.8 -880.366 -874.931 -869.497 -869.497 -864.063 -858.628 -853.194 -847.76 -847.76 -836.891 -826.022 -820.588 -820.588 -809.719 -798.85 -782.547 -777.113 -766.244 -760.81 -749.941 -749.941 -749.941 -744.507 -744.507 -733.638 -733.638 -728.204 -717.335 -711.901 -706.466 -701.032 -695.598 -690.163 -684.729 -679.295 -673.86 -673.86 -673.86 -668.426 -662.992 -662.992 -657.557 -652.123 -652.123 -652.123 -646.688 -641.254 -635.82 -630.385 -624.951 -614.082 -608.648 -603.214 -597.779 -592.345 -581.476 -576.042 -570.607 -559.739 -554.304 -543.436 -538.001 -532.567 -532.567 -527.133 -521.698 -521.698 -516.264 -510.83 -505.395 -505.395 -499.961 -499.961 -494.526 -489.092 -483.658 -483.658 -478.223 -478.223 -478.223 -472.789 -472.789 -467.355 -467.355 -461.92 -461.92 -461.92 -461.92 -461.92 -461.92 -461.92 -461.92 -456.486 -456.486 -451.052 -451.052 -445.617 -445.617 -440.183 -440.183 -434.749 -429.314 -429.314 -429.314 -429.314 -423.88 -423.88 -423.88 -423.88 -418.445 -418.445 -418.445 -418.445 -418.445 -413.011 -413.011 -407.577 -407.577 -413.011 -413.011 -413.011 -407.577 -413.011 -413.011 -413.011 -413.011 -407.577 -418.445 -467.355 -483.658 -445.617 -407.577 -396.708 -396.708 -396.708 -396.708 -391.274 -391.274 -391.274 -396.708 -396.708 -396.708 -391.274 -396.708 -396.708 -396.708 -391.274 -396.708 -402.142 -402.142 -402.142 -396.708 -396.708 -396.708 -402.142 -402.142 -396.708 -402.142 -396.708 -396.708 -396.708 -396.708 -396.708 -396.708 -391.274 -391.274 -391.274 -385.839 -385.839 -385.839 -380.405 -380.405 -380.405 -380.405 -380.405 -385.839 -385.839 -385.839 -385.839 -385.839 -380.405 -380.405 -380.405 -385.839 -380.405 -385.839 -385.839 -385.839 -385.839 -385.839 -391.274 -391.274 -391.274 -391.274 -391.274 -391.274 -396.708 -396.708 -396.708 -396.708 -396.708 -396.708 -396.708 -396.708 -396.708 -402.142 -396.708 -396.708 -391.274 -391.274 -391.274 -391.274 -391.274 -391.274 -391.274 -391.274 -391.274 -391.274 -385.839 -380.405 -380.405 -374.971 -374.971 -374.971 -374.971 -374.971 -374.971 -374.971 -369.536 -369.536 -364.102 -364.102 -358.668 -364.102 -358.668 -358.668 -358.668 -358.668 -358.668 -358.668 -353.233 -353.233 -353.233 -353.233 -353.233 -347.799 -347.799 -347.799 -347.799 -347.799 -347.799 -342.364 -342.364 -342.364 -342.364 -342.364 -336.93 -336.93 -331.496 -336.93 -331.496 -336.93 -331.496 -331.496 -326.061 -326.061 -326.061 -320.627 -320.627 -320.627 -320.627 -320.627 -320.627 -320.627 -320.627 -320.627 -320.627 -315.193 -315.193 -315.193 -315.193 -315.193 -309.758 -309.758 -309.758 -309.758 -309.758 -304.324 -304.324 -304.324 -304.324 -304.324 -304.324 -304.324 -298.89 -298.89 -298.89 -298.89 -298.89 -293.455 -293.455 -293.455 -288.021 -288.021 -282.587 -282.587 -282.587 -282.587 -282.587 -277.152 -277.152 -277.152 -271.718 -266.283 -266.283 -266.283 -266.283 -266.283 -260.849 -260.849 -255.415 -255.415 -255.415 -249.98 -249.98 -249.98 -249.98 -244.546 -244.546 -244.546 -244.546 -239.112 -233.677 -233.677 -239.112 -239.112 -233.677 -233.677 -239.112 -239.112 -239.112 -239.112 -233.677 -228.243 -233.677 -233.677 -233.677 -233.677 -233.677 -228.243 -228.243 -233.677 -228.243 -233.677 -228.243 -228.243 -228.243 -222.809 -222.809 -222.809 -222.809 -222.809 -217.374 -217.374 -217.374 -217.374 -217.374 -217.374 -217.374 -211.94 -211.94 -211.94 -211.94 -217.374 -217.374 -211.94 -211.94 -211.94 -217.374 -211.94 -211.94 -211.94 -211.94 -211.94 -211.94 -211.94 -211.94 -211.94 -211.94 -211.94 -211.94 -211.94 -211.94 -211.94 -211.94 -211.94 -211.94 -211.94 -211.94 -211.94 -211.94 -206.506 -211.94 -211.94 -211.94 -211.94 -211.94 -211.94 -211.94 -206.506 -206.506 -211.94 -206.506 -211.94 -211.94 -211.94 -211.94 -211.94 -211.94 -206.506 -206.506 -206.506 -206.506 -206.506 -206.506 -206.506 -201.071 -201.071 -201.071 -201.071 -201.071 -201.071 -201.071 -201.071 -201.071 -201.071 -195.637 -201.071 -201.071 -201.071 -195.637 -195.637 -195.637 -195.637 -195.637 -195.637 -190.202 -195.637 -195.637 -190.202 -190.202 -190.202 -190.202 -190.202 -184.768 -184.768 -184.768 -184.768 -179.334 -184.768 -184.768 -179.334 -179.334 -179.334 -179.334 -179.334 -179.334 -179.334 -179.334 -179.334 -179.334 -179.334 -179.334 -179.334 -173.899 -179.334 -179.334 -179.334 -179.334 -173.899 -173.899 -173.899 -173.899 -173.899 -173.899 -168.465 -168.465 -168.465 -163.031 -157.596 -152.162 -146.728 -135.859 -124.99 -119.556 -119.556 -124.99 -135.859 -146.728 -157.596 -168.465 -173.899 -173.899 -168.465 -163.031 -163.031 -152.162 -146.728 -146.728 -146.728 -141.293 -141.293 -141.293 -141.293 -141.293 -146.728 -152.162 -152.162 -157.596 -157.596 -157.596 -157.596 -163.031 -163.031 -163.031 -163.031 -173.899 -179.334 -179.334 -179.334 -173.899 -173.899 -168.465 -168.465 -163.031 -163.031 -157.596 -152.162 -152.162 -146.728 -152.162 -152.162 -152.162 -146.728 -141.293 -141.293 -141.293 -146.728 -146.728 -141.293 -141.293 -141.293 -141.293 -141.293 -141.293 -135.859 -135.859 -135.859 -141.293 -141.293 -141.293 -141.293 -141.293 -141.293 -141.293 -146.728 -146.728 -146.728 -146.728 -152.162 -152.162 -152.162 -152.162 -152.162 -152.162 -152.162 -152.162 -152.162 -146.728 -146.728 -141.293 -141.293 -141.293 -141.293 -141.293 -135.859 -135.859 -135.859 -135.859 -130.425 -130.425 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -130.425 -130.425 -135.859 -141.293 -141.293 -141.293 -135.859 -135.859 -141.293 -146.728 -146.728 -141.293 -141.293 -141.293 -141.293 -146.728 -146.728 -146.728 -141.293 -141.293 -141.293 -141.293 -141.293 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -130.425 -130.425 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -130.425 -130.425 -130.425 -130.425 -130.425 -124.99 -124.99 -124.99 -124.99 -124.99 -124.99 -124.99 -124.99 -119.556 -119.556 -119.556 -119.556 -119.556 -119.556 -119.556 -119.556 -119.556 -119.556 -124.99 -124.99 -124.99 -119.556 -119.556 -124.99 -119.556 -119.556 -119.556 -124.99 -119.556 -119.556 -119.556 -119.556 -119.556 -119.556 -114.121 -119.556 -114.121 -119.556 -119.556 -119.556 -119.556 -119.556 -119.556 -114.121 -119.556 -119.556 -119.556 -119.556 -119.556 -114.121 -114.121 -108.687 -108.687 -108.687 -108.687 -103.253 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -114.121 -108.687 -108.687 -108.687 -108.687 -103.253 -103.253 -108.687 -108.687 -108.687 -108.687 -103.253 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -114.121 -114.121 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -108.687 -114.121 -114.121 -108.687 -114.121 -114.121 -114.121 -114.121 -119.556 -124.99 -130.425 -130.425 -124.99 -114.121 -108.687 -103.253 -108.687 -119.556 -124.99 -124.99 -124.99 -114.121 -108.687 -108.687 -108.687 -103.253 -86.9497 -81.5153 -81.5153 -92.3841 -103.253 -103.253 -97.8184 -97.8184 -103.253 -108.687 -108.687 -108.687 -108.687 -103.253 -92.3841 -86.9497 -86.9497 -92.3841 -97.8184 -103.253 -103.253 -108.687 -114.121 -114.121 -108.687 -108.687 -108.687 -114.121 -108.687 -108.687 -103.253 -108.687 -108.687 -114.121 -114.121 -108.687 -108.687 -114.121 -119.556 -124.99 -124.99 -124.99 -124.99 -124.99 -119.556 -114.121 -108.687 -114.121 -114.121 -114.121 -108.687 -103.253 -97.8184 -103.253 -114.121 -130.425 -130.425 -119.556 -114.121 -114.121 -119.556 -119.556 -124.99 -124.99 -124.99 -124.99 -119.556 -114.121 -114.121 -119.556 -119.556 -119.556 -114.121 -86.9497 -70.6466 -103.253 -141.293 -152.162 -141.293 -124.99 -119.556 -130.425 -141.293 -146.728 -135.859 -124.99 -135.859 -152.162 -157.596 -141.293 -130.425 -135.859 -146.728 -157.596 -157.596 -146.728 -135.859 -135.859 -141.293 -141.293 -146.728 -141.293 -135.859 -146.728 -152.162 -152.162 -146.728 -135.859 -135.859 -135.859 -130.425 -130.425 -130.425 -135.859 -141.293 -141.293 -141.293 -141.293 -141.293 -146.728 -146.728 -146.728 -141.293 -135.859 -135.859 -135.859 -135.859 -135.859 -135.859 -130.425 -130.425 -124.99 -114.121 -114.121 -124.99 -135.859 -146.728 -152.162 -157.596 -152.162 -146.728 -141.293 -141.293 -135.859 -130.425 -130.425 -130.425 -130.425 -130.425 -135.859 -141.293 -146.728 -146.728 -146.728 -152.162 -152.162 -146.728 -141.293 -135.859 -135.859 -130.425 -135.859 -141.293 -146.728 -152.162 -146.728 -146.728 -152.162 -152.162 -152.162 -152.162 -146.728 -146.728 -152.162 -157.596 -163.031 -163.031 -163.031 -163.031 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -163.031 -157.596 -157.596 -157.596 -157.596 -157.596 -163.031 -168.465 -163.031 -163.031 -157.596 -157.596 -157.596 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -168.465 -168.465 -168.465 -168.465 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -168.465 -168.465 -168.465 -168.465 -168.465 -168.465 -168.465 -168.465 -168.465 -168.465 -163.031 -168.465 -168.465 -168.465 -168.465 -168.465 -168.465 -168.465 -168.465 -168.465 -168.465 -168.465 -173.899 -173.899 -179.334 -184.768 -184.768 -179.334 -179.334 -173.899 -173.899 -173.899 -173.899 -179.334 -173.899 -179.334 -179.334 -179.334 -179.334 -173.899 -173.899 -173.899 -173.899 -179.334 -179.334 -173.899 -173.899 -179.334 -179.334 -179.334 -173.899 -173.899 -173.899 -173.899 -168.465 -173.899 -173.899 -173.899 -173.899 -173.899 -173.899 -173.899 -173.899 -173.899 -173.899 -179.334 -173.899 -173.899 -173.899 -173.899 -168.465 -163.031 -173.899 -184.768 -190.202 -190.202 -184.768 -184.768 -179.334 -173.899 -173.899 -173.899 -179.334 -179.334 -179.334 -179.334 -173.899 -168.465 -168.465 -168.465 -173.899 -173.899 -173.899 -173.899 -173.899 -173.899 -173.899 -173.899 -173.899 -173.899 -173.899 -168.465 -168.465 -168.465 -173.899 -173.899 -173.899 -173.899 -173.899 -173.899 -179.334 -179.334 -179.334 -173.899 -173.899 -173.899 -173.899 -179.334 -179.334 -179.334 -179.334 -179.334 -179.334 -179.334 -179.334 -179.334 -184.768 -184.768 -184.768 -184.768 -184.768 -184.768 -184.768 -184.768 -184.768 -184.768 -184.768 -179.334 -184.768 -184.768 -184.768 -184.768 -184.768 -179.334 -179.334 -179.334 -179.334 -179.334 -173.899 -179.334 -179.334 -179.334 -179.334 -179.334 -179.334 -179.334 -179.334 -173.899 -173.899 -179.334 -179.334 -179.334 -179.334 -179.334 -173.899 -173.899 -173.899 -173.899 -173.899 -173.899 -173.899 -173.899 -179.334 -179.334 -179.334 -173.899 -173.899 -168.465 -168.465 -163.031 -168.465 -168.465 -173.899 -179.334 -179.334 -173.899 -173.899 -168.465 -168.465 -168.465 -168.465 -173.899 -168.465 -173.899 -168.465 -168.465 -168.465 -163.031 -163.031 -163.031 -163.031 -168.465 -168.465 -168.465 -168.465 -163.031 -163.031 -163.031 -168.465 -168.465 -168.465 -168.465 -173.899 -168.465 -168.465 -163.031 -163.031 -163.031 -163.031 -168.465 -168.465 -173.899 -168.465 -168.465 -168.465 -168.465 -168.465 -168.465 -168.465 -168.465 -163.031 -163.031 -163.031 -163.031 -168.465 -168.465 -168.465 -168.465 -168.465 -168.465 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -157.596 -157.596 -163.031 -168.465 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -168.465 -168.465 -163.031 -157.596 -157.596 -157.596 -163.031 -163.031 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -152.162 -152.162 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -152.162 -152.162 -152.162 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -152.162 -152.162 -152.162 -157.596 -152.162 -157.596 -152.162 -152.162 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -152.162 -152.162 -152.162 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -168.465 -168.465 -168.465 -173.899 -173.899 -168.465 -163.031 -168.465 -168.465 -168.465 -168.465 -168.465 -168.465 -163.031 -163.031 -168.465 -168.465 -168.465 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -163.031 -157.596 -163.031 -163.031 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -163.031 -163.031 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596 -157.596</A_FLOAT64>
+      </Values>
+      <Id>6</Id>
+      <Name>CHANNEL06</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <RawDatatype>DT_DOUBLE</RawDatatype>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>6</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>explicit</SequenceRepresentation>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <Values>
+        <A_FLOAT64>-4.51025 -4.51025 -4.51025 2.00455 2.00455 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -11.025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -11.025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -11.025 -4.51025 -4.51025 -4.51025 -11.025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -11.025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -11.025 -11.025 -11.025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -11.025 -11.025 -11.025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -11.025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -11.025 -11.025 -11.025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -11.025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -11.025 -11.025 -4.51025 -11.025 -4.51025 -11.025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -11.025 -4.51025 -4.51025 -11.025 -11.025 -4.51025 -4.51025 -4.51025 -4.51025 -11.025 -11.025 -11.025 -11.025 -11.025 -11.025 -11.025 -4.51025 -11.025 -4.51025 -4.51025 -11.025 -11.025 -4.51025 -4.51025 -11.025 -11.025 -11.025 -11.025 -11.025 -11.025 -11.025 -11.025 -11.025 -11.025 -11.025 -4.51025 -4.51025 -11.025 -11.025 -4.51025 -4.51025 -11.025 -11.025 -11.025 -4.51025 -4.51025 -11.025 -11.025 -4.51025 -4.51025 -11.025 -11.025 -4.51025 -4.51025 -4.51025 -11.025 -11.025 -11.025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -11.025 -11.025 -11.025 -11.025 -11.025 -11.025 -11.025 -4.51025 -4.51025 -4.51025 -4.51025 -11.025 -11.025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -11.025 -4.51025 -4.51025 -11.025 -4.51025 -11.025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 2.00455 2.00455 2.00455 2.00455 -4.51025 2.00455 2.00455 2.00455 -4.51025 2.00455 2.00455 2.00455 -4.51025 -4.51025 2.00455 2.00455 2.00455 -4.51025 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 -4.51025 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 -4.51025 -4.51025 -4.51025 2.00455 2.00455 2.00455 2.00455 -4.51025 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 -4.51025 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 -4.51025 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 -4.51025 -4.51025 -4.51025 2.00455 2.00455 -4.51025 -4.51025 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 -4.51025 2.00455 -4.51025 2.00455 2.00455 -4.51025 -4.51025 -4.51025 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 -4.51025 2.00455 2.00455 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 2.00455 -4.51025 2.00455 -4.51025 2.00455 2.00455 2.00455 -4.51025 -4.51025 2.00455 -4.51025 2.00455 -4.51025 -4.51025 2.00455 -4.51025 2.00455 2.00455 2.00455 2.00455 -4.51025 2.00455 2.00455 2.00455 2.00455 -4.51025 -4.51025 2.00455 2.00455 -4.51025 -4.51025 2.00455 2.00455 -4.51025 -4.51025 -4.51025 2.00455 -4.51025 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 -4.51025 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 -4.51025 2.00455 2.00455 -4.51025 -4.51025 -4.51025 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -11.025 -11.025 -11.025 -11.025 -11.025 -11.025 -11.025 -11.025 -11.025 -11.025 -11.025 -17.5398 -17.5398 -17.5398 -17.5398 -17.5398 -11.025 -11.025 -17.5398 -17.5398 -17.5398 -17.5398 -17.5398 -17.5398 -17.5398 -17.5398 -17.5398 -17.5398 -17.5398 -17.5398 -17.5398 -17.5398 -17.5398 -17.5398 -17.5398 -24.0546 -24.0546 -24.0546 -24.0546 -24.0546 -24.0546 -30.5694 -30.5694 -30.5694 -30.5694 -30.5694 -30.5694 -30.5694 -37.0842 -37.0842 -30.5694 -30.5694 -37.0842 -37.0842 -37.0842 -37.0842 -37.0842 -37.0842 -37.0842 -37.0842 -37.0842 -37.0842 -37.0842 -37.0842 -37.0842 -43.599 -43.599 -43.599 -43.599 -43.599 -43.599 -43.599 -43.599 -43.599 -43.599 -43.599 -43.599 -37.0842 -43.599 -43.599 -37.0842 -37.0842 -37.0842 -30.5694 -37.0842 -37.0842 -37.0842 -37.0842 -37.0842 -30.5694 -30.5694 -30.5694 -24.0546 -24.0546 -24.0546 -17.5398 -17.5398 -17.5398 -17.5398 -17.5398 -17.5398 -11.025 -11.025 -11.025 -17.5398 -30.5694 -30.5694 -24.0546 -11.025 -4.51025 8.51934 15.0341 8.51934 2.00455 2.00455 2.00455 2.00455 15.0341 47.6081 60.6377 34.5785 28.0637 28.0637 8.51934 -4.51025 2.00455 -4.51025 -11.025 -4.51025 -11.025 -30.5694 -43.599 -50.1138 -50.1138 -37.0842 -4.51025 2.00455 -4.51025 -11.025 -17.5398 -30.5694 -43.599 -43.599 -56.6286 -76.173 -95.7174 -108.747 -115.262 -115.262 -121.777 -121.777 -121.777 -115.262 -115.262 -102.232 -102.232 -102.232 -102.232 -102.232 -102.232 -108.747 -121.777 -128.291 -134.806 -141.321 -147.836 -154.351 -154.351 -154.351 -160.865 -167.38 -173.895 -180.41 -186.925 -193.439 -193.439 -193.439 -199.954 -199.954 -199.954 -206.469 -206.469 -199.954 -199.954 -199.954 -206.469 -199.954 -199.954 -199.954 -199.954 -199.954 -199.954 -193.439 -186.925 -186.925 -186.925 -180.41 -173.895 -167.38 -167.38 -167.38 -167.38 -173.895 -186.925 -193.439 -186.925 -167.38 -147.836 -134.806 -121.777 -121.777 -115.262 -121.777 -121.777 -128.291 -134.806 -134.806 -128.291 -128.291 -108.747 -76.173 -43.599 -11.025 8.51934 15.0341 8.51934 -4.51025 -11.025 -17.5398 -11.025 -11.025 2.00455 28.0637 67.1525 99.7265 132.3 158.36 177.904 184.419 184.419 171.389 158.36 138.815 125.786 106.241 93.2117 86.6969 93.2117 106.241 112.756 125.786 132.3 138.815 138.815 138.815 138.815 132.3 125.786 119.271 106.241 99.7265 93.2117 86.6969 80.1821 80.1821 73.6673 73.6673 73.6673 67.1525 67.1525 67.1525 60.6377 54.1229 47.6081 41.0933 41.0933 34.5785 34.5785 41.0933 41.0933 41.0933 34.5785 34.5785 28.0637 21.5489 15.0341 8.51934 2.00455 2.00455 2.00455 8.51934 8.51934 8.51934 8.51934 8.51934 2.00455 -11.025 -17.5398 -43.599 -63.1434 -69.6582 -82.6878 -95.7174 -95.7174 -89.2026 -82.6878 -76.173 -63.1434 -56.6286 -56.6286 -56.6286 -50.1138 -50.1138 -43.599 -50.1138 -43.599 -30.5694 2.00455 34.5785 60.6377 80.1821 86.6969 93.2117 99.7265 106.241 119.271 132.3 132.3 132.3 132.3 138.815 138.815 145.33 151.845 151.845 151.845 158.36 164.874 164.874 171.389 164.874 164.874 151.845 145.33 138.815 119.271 99.7265 86.6969 73.6673 60.6377 54.1229 47.6081 34.5785 21.5489 15.0341 8.51934 8.51934 -4.51025 -17.5398 -30.5694 -37.0842 -43.599 -50.1138 -56.6286 -63.1434 -69.6582 -69.6582 -76.173 -82.6878 -89.2026 -95.7174 -102.232 -102.232 -115.262 -128.291 -134.806 -134.806 -108.747 -30.5694 125.786 308.2 477.585 614.395 712.117 783.78 829.383 842.413 855.443 861.957 861.957 848.928 829.383 783.78 712.117 633.94 549.247 497.129 497.129 510.158 529.703 581.821 646.969 686.058 712.117 718.632 731.661 744.691 679.543 614.395 666.514 686.058 614.395 581.821 575.306 549.247 536.218 536.218 523.188 516.673 529.703 536.218 523.188 510.158 503.644 497.129 490.614 458.04 412.437 379.863 353.803 301.685 243.052 190.934 151.845 112.756 73.6673 28.0637 -4.51025 -17.5398 -17.5398 -24.0546 -30.5694 -50.1138 -82.6878 -82.6878 -50.1138 -43.599 -56.6286 -37.0842 -17.5398 -17.5398 -30.5694 -37.0842 -43.599 -43.599 -24.0546 -24.0546 -17.5398 21.5489 41.0933 47.6081 54.1229 67.1525 73.6673 15.0341 -24.0546 2.00455 21.5489 28.0637 47.6081 86.6969 119.271 138.815 171.389 190.934 230.022 262.596 301.685 347.289 392.892 431.981 458.04 477.585 490.614 503.644 497.129 477.585 445.011 418.951 412.437 405.922 373.348 340.774 321.229 314.715 295.17 282.141 249.567 190.934 151.845 145.33 132.3 106.241 93.2117 99.7265 106.241 119.271 125.786 132.3 145.33 151.845 151.845 164.874 177.904 203.963 243.052 288.656 340.774 392.892 405.922 405.922 425.466 464.555 516.673 568.792 601.366 633.94 673.028 699.088 718.632 738.176 738.176 751.206 790.295 835.898 881.502 927.105 914.076 829.383 790.295 809.839 822.869 829.383 855.443 861.957 855.443 861.957 888.017 894.531 907.561 914.076 933.62 959.679 985.739 1011.8 1044.37 1070.43 1103.0 1135.58 1168.15 1194.21 1213.76 1233.3 1259.36 1291.93 1317.99 1344.05 1370.11 1402.69 1435.26 1448.29 1454.8 1474.35 1493.89 1500.41 1506.92 1493.89 1493.89 1500.41 1506.92 1513.44 1526.47 1539.5 1559.04 1552.53 1532.98 1519.95 1526.47 1519.95 1493.89 1480.86 1480.86 1474.35 1467.83 1474.35 1500.41 1526.47 1572.07 1624.19 1689.34 1767.51 1858.72 1943.41 2034.62 2138.86 2236.58 2340.82 2438.54 2549.29 2666.56 2783.82 2894.57 3018.35 3155.17 3311.52 3467.88 3591.66 3682.86 3741.5 3787.1 3813.16 3858.76 3910.88 3969.51 4028.15 4093.3 4158.44 4217.08 4275.71 4334.34 4379.95 4425.55 4477.67 4516.76 4549.33 4575.39 4601.45 4627.51 4640.54 4660.08 4679.63 4692.66 4699.17 4705.69 4712.2 4718.72 4738.26 4777.35 4809.92 4849.01 4894.62 4946.73 4992.34 5031.43 5057.49 5070.51 5077.03 5083.54 5083.54 5077.03 5064.0 5057.49 5050.97 5064.0 5077.03 5077.03 5057.49 5037.94 5018.4 4998.85 4985.82 4985.82 4985.82 4985.82 4992.34 4985.82 4972.79 4972.79 4979.31 4979.31 4959.76 4946.73 4946.73 4933.7 4927.19 4940.22 4959.76 4959.76 4953.25 4972.79 4992.34 4998.85 5024.91 5064.0 5103.09 5148.69 5194.3 5246.41 5292.02 5337.62 5376.71 5396.25 5402.77 5409.28 5409.28 5409.28 5422.31 5448.37 5461.4 5461.4 5448.37 5441.86 5435.34 5415.8 5383.22 5350.65 5324.59 5305.05 5298.53 5305.05 5311.56 5318.08 5331.11 5357.17 5389.74 5428.83 5448.37 5435.34 5422.31 5422.31 5448.37 5467.92 5467.92 5461.4 5467.92 5487.46 5500.49 5513.52 5526.55 5552.61 5585.18 5611.24 5624.27 5643.82 5676.39 5702.45 5715.48 5721.99 5728.51 5728.51 5721.99 5715.48 5708.96 5708.96 5715.48 5715.48 5715.48 5715.48 5728.51 5735.02 5735.02 5728.51 5721.99 5708.96 5695.94 5682.91 5676.39 5676.39 5682.91 5682.91 5689.42 5695.94 5702.45 5702.45 5708.96 5708.96 5702.45 5695.94 5689.42 5689.42 5689.42 5689.42 5689.42 5689.42 5689.42 5689.42 5682.91 5676.39 5663.36 5656.85 5643.82 5637.3 5617.76 5611.24 5598.21 5585.18 5572.15 5552.61 5539.58 5513.52 5493.98 5480.95 5461.4 5441.86 5435.34 5441.86 5441.86 5454.89 5461.4 5467.92 5461.4 5448.37 5428.83 5409.28 5376.71 5331.11 5292.02 5246.41 5194.3 5142.18 5083.54 5031.43 4985.82 4933.7 4888.1 4855.53 4829.47 4809.92 4796.89 4777.35 4757.8 4738.26 4718.72 4692.66 4673.11 4660.08 4640.54 4620.99 4607.96 4588.42 4575.39 4555.85 4529.79 4497.21 4471.15 4438.58 4406.01 4379.95 4347.37 4321.31 4288.74 4269.2 4256.17 4243.14 4230.11 4217.08 4191.02 4158.44 4132.38 4099.81 4067.24 4041.18 4015.12 3989.06 3956.49 3923.91 3897.85 3858.76 3819.67 3793.62 3754.53 3721.95 3689.38 3656.8 3624.23 3585.14 3552.57 3526.51 3493.93 3461.36 3435.3 3409.24 3383.18 3357.12 3331.06 3305.01 3278.95 3259.4 3226.83 3194.25 3161.68 3129.11 3090.02 3057.44 3031.38 2998.81 2972.75 2946.69 2927.15 2901.09 2881.54 2855.48 2835.94 2809.88 2790.34 2770.79 2744.73 2725.19 2699.13 2679.59 2653.53 2627.47 2594.89 2568.83 2536.26 2510.2 2477.63 2451.57 2425.51 2399.45 2379.9 2360.36 2340.82 2314.76 2295.21 2269.15 2243.09 2223.55 2197.49 2171.43 2138.86 2112.8 2086.74 2060.68 2034.62 2015.08 1995.53 1969.47 1949.93 1923.87 1897.81 1871.75 1852.21 1826.15 1800.09 1780.54 1761.0 1734.94 1708.88 1689.34 1656.76 1637.22 1611.16 1585.1 1559.04 1532.98 1500.41 1474.35 1441.77 1415.71 1389.66 1363.6 1344.05 1317.99 1298.45 1278.9 1252.85 1233.3 1220.27 1200.73 1181.18 1161.64 1148.61 1129.06 1109.52 1096.49 1076.95 1063.92 1050.89 1031.34 1018.31 1005.28 992.253 985.739 966.194 953.165 946.65 933.62 927.105 914.076 907.561 894.531 888.017 874.987 861.957 848.928 835.898 822.869 809.839 796.809 783.78 770.75 757.721 744.691 731.661 718.632 712.117 699.088 686.058 679.543 666.514 659.999 646.969 633.94 627.425 614.395 601.366 594.851 581.821 575.306 568.792 562.277 555.762 542.732 542.732 536.218 523.188 516.673 510.158 503.644 490.614 484.099 471.07 464.555 458.04 451.525 445.011 438.496 431.981 425.466 418.951 405.922 399.407 392.892 392.892 386.377 379.863 373.348 366.833 360.318 360.318 360.318 353.803 347.289 340.774 334.259 334.259 327.744 327.744 321.229 321.229 314.715 314.715 314.715 314.715 308.2 308.2 308.2 301.685 301.685 295.17 295.17 295.17 288.656 288.656 282.141 282.141 282.141 282.141 275.626 275.626 269.111 269.111 262.596 256.082 256.082 256.082 256.082 256.082 249.567 249.567 249.567 243.052 243.052 243.052 243.052 243.052 236.537 236.537 236.537 236.537 236.537 230.022 223.508 223.508 216.993 216.993 210.478 210.478 203.963 203.963 197.448 197.448 190.934 190.934 190.934 184.419 190.934 184.419 184.419 177.904 177.904 177.904 177.904 177.904 171.389 164.874 164.874 164.874 158.36 158.36 158.36 151.845 151.845 145.33 145.33 138.815 138.815 138.815 132.3 132.3 132.3 132.3 132.3 132.3 132.3 132.3 132.3 132.3 132.3 132.3 132.3 132.3 132.3 125.786 119.271 119.271 119.271 112.756 112.756 106.241 106.241 99.7265 99.7265 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 86.6969 86.6969 86.6969 86.6969 86.6969 86.6969 86.6969 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 73.6673 73.6673 73.6673 73.6673 67.1525 67.1525 67.1525 60.6377 60.6377 60.6377 54.1229 54.1229 47.6081 47.6081 41.0933 41.0933 41.0933 34.5785 28.0637 28.0637 28.0637 21.5489 21.5489 15.0341 15.0341 8.51934 8.51934 2.00455 2.00455 -4.51025 -4.51025 -4.51025 -11.025 -11.025 -17.5398 -17.5398 -17.5398 -17.5398 -24.0546 -24.0546 -17.5398 -17.5398 -17.5398 -17.5398 -17.5398 -17.5398 -11.025 -11.025 -11.025 -11.025 -11.025 -11.025 -11.025 -4.51025 -4.51025 2.00455 2.00455 2.00455 2.00455 8.51934 8.51934 8.51934 8.51934 8.51934 15.0341 15.0341 15.0341 15.0341 15.0341 21.5489 21.5489 15.0341 15.0341 15.0341 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 15.0341 21.5489 21.5489 21.5489 15.0341 15.0341 15.0341 15.0341 15.0341 15.0341 21.5489 15.0341 21.5489 15.0341 21.5489 15.0341 21.5489 21.5489 28.0637 21.5489 28.0637 28.0637 28.0637 28.0637 21.5489 21.5489 21.5489 28.0637 28.0637 28.0637 28.0637 28.0637 34.5785 34.5785 34.5785 34.5785 34.5785 34.5785 41.0933 41.0933 41.0933 41.0933 41.0933 41.0933 41.0933 41.0933 34.5785 34.5785 34.5785 41.0933 41.0933 41.0933 41.0933 47.6081 47.6081 47.6081 47.6081 41.0933 41.0933 41.0933 47.6081 47.6081 47.6081 47.6081 47.6081 47.6081 47.6081 47.6081 47.6081 47.6081 47.6081 47.6081 47.6081 54.1229 54.1229 54.1229 54.1229 54.1229 54.1229 54.1229 60.6377 60.6377 60.6377 60.6377 60.6377 67.1525 67.1525 67.1525 67.1525 67.1525 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 86.6969 86.6969 86.6969 93.2117 86.6969 93.2117 93.2117 93.2117 93.2117 99.7265 106.241 112.756 119.271 119.271 125.786 125.786 125.786 125.786 119.271 119.271 112.756 112.756 112.756 99.7265 93.2117 80.1821 73.6673 60.6377 54.1229 54.1229 54.1229 60.6377 73.6673 86.6969 99.7265 106.241 119.271 125.786 132.3 132.3 132.3 132.3 132.3 132.3 132.3 132.3 132.3 132.3 125.786 125.786 125.786 125.786 125.786 125.786 119.271 119.271 119.271 125.786 125.786 125.786 125.786 125.786 132.3 132.3 132.3 132.3 132.3 132.3 132.3 132.3 132.3 132.3 132.3 132.3 132.3 132.3 125.786 125.786 125.786 125.786 125.786 125.786 125.786 119.271 119.271 112.756 112.756 106.241 106.241 99.7265 99.7265 93.2117 86.6969 86.6969 86.6969 80.1821 80.1821 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 67.1525 67.1525 67.1525 67.1525 67.1525 67.1525 67.1525 67.1525 67.1525 73.6673 73.6673 73.6673 73.6673 80.1821 80.1821 80.1821 80.1821 86.6969 86.6969 86.6969 86.6969 86.6969 86.6969 86.6969 86.6969 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 86.6969 86.6969 86.6969 86.6969 86.6969 86.6969 86.6969 86.6969 86.6969 86.6969 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 67.1525 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 73.6673 73.6673 73.6673 73.6673 73.6673 73.6673 67.1525 67.1525 67.1525 67.1525 67.1525 67.1525 67.1525 60.6377 60.6377 60.6377 60.6377 60.6377 60.6377 54.1229 54.1229 54.1229 54.1229 54.1229 54.1229 54.1229 54.1229 54.1229 47.6081 47.6081 47.6081 47.6081 47.6081 41.0933 41.0933 41.0933 41.0933 41.0933 41.0933 41.0933 41.0933 34.5785 34.5785 34.5785 34.5785 34.5785 34.5785 28.0637 28.0637 28.0637 28.0637 28.0637 28.0637 28.0637 28.0637 28.0637 28.0637 28.0637 28.0637 28.0637 21.5489 21.5489 21.5489 21.5489 15.0341 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 21.5489 15.0341 15.0341 15.0341 15.0341 15.0341 8.51934 8.51934 8.51934 8.51934 8.51934 8.51934 8.51934 8.51934 8.51934 2.00455 8.51934 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 2.00455 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -11.025 -4.51025 -4.51025 -11.025 -4.51025 -11.025 -11.025 -11.025 -11.025 -17.5398 -17.5398 -17.5398 -24.0546 -17.5398 -17.5398 -24.0546 -24.0546 -17.5398 -24.0546 -24.0546 -24.0546 -24.0546 -17.5398 -17.5398 -17.5398 -17.5398 -24.0546 -24.0546 -24.0546 -24.0546 -24.0546 -17.5398 -24.0546 -24.0546 -24.0546 -17.5398 -24.0546 -17.5398 -24.0546 -24.0546 -24.0546 -24.0546 -24.0546 -24.0546 -24.0546 -24.0546 -24.0546 -17.5398 -17.5398 -17.5398 -17.5398 -24.0546 -24.0546 -24.0546 -24.0546 -24.0546 -24.0546 -24.0546 -24.0546 -24.0546 -24.0546 -24.0546 -24.0546 -17.5398 -17.5398 -24.0546 -24.0546 -24.0546 -24.0546 -17.5398 -17.5398 -17.5398 -17.5398 -11.025 -11.025 -4.51025 -4.51025 -4.51025 -11.025 -11.025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 -4.51025 2.00455 2.00455 2.00455 2.00455 8.51934 8.51934 8.51934 8.51934 8.51934 8.51934 15.0341 15.0341 21.5489 21.5489 21.5489 21.5489 28.0637 28.0637 28.0637 28.0637 34.5785 28.0637 28.0637 34.5785 34.5785 34.5785 34.5785 41.0933 41.0933 41.0933 41.0933 41.0933 41.0933 47.6081 47.6081 47.6081 47.6081 47.6081 47.6081 47.6081 47.6081 47.6081 47.6081 47.6081 47.6081 47.6081 54.1229 54.1229 54.1229 54.1229 54.1229 54.1229 54.1229 60.6377 60.6377 67.1525 67.1525 67.1525 73.6673 73.6673 80.1821 73.6673 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 80.1821 86.6969 86.6969 86.6969 86.6969 86.6969 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 99.7265 93.2117 93.2117 99.7265 99.7265 99.7265 99.7265 106.241 106.241 106.241 106.241 106.241 106.241 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 119.271 119.271 112.756 112.756 112.756 112.756 112.756 112.756 119.271 119.271 119.271 119.271 119.271 119.271 119.271 112.756 112.756 119.271 119.271 119.271 119.271 119.271 119.271 119.271 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 119.271 119.271 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 106.241 112.756 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 99.7265 99.7265 99.7265 99.7265 106.241 106.241 106.241 106.241 99.7265 106.241 106.241 106.241 106.241 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 93.2117 99.7265 99.7265 99.7265 93.2117 93.2117 99.7265 99.7265 99.7265 93.2117 93.2117 93.2117 99.7265 99.7265 93.2117 93.2117 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 106.241 106.241 106.241 106.241 106.241 106.241 99.7265 99.7265 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 99.7265 99.7265 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 99.7265 93.2117 99.7265 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 99.7265 99.7265 99.7265 99.7265 106.241 106.241 99.7265 99.7265 99.7265 99.7265 93.2117 99.7265 99.7265 93.2117 99.7265 99.7265 99.7265 93.2117 93.2117 93.2117 93.2117 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 106.241 106.241 99.7265 99.7265 99.7265 99.7265 106.241 106.241 99.7265 106.241 99.7265 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 106.241 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 106.241 112.756 106.241 106.241 106.241 106.241 112.756 106.241 112.756 112.756 106.241 106.241 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 119.271 119.271 119.271 119.271 119.271 119.271 125.786 119.271 119.271 119.271 119.271 119.271 119.271 119.271 119.271 119.271 125.786 119.271 119.271 119.271 119.271 119.271 119.271 119.271 119.271 119.271 119.271 119.271 119.271 119.271 119.271 119.271 112.756 119.271 119.271 112.756 112.756 112.756 112.756 112.756 112.756 112.756 112.756 106.241 106.241 106.241 106.241 106.241 106.241 106.241 99.7265 99.7265 99.7265 99.7265 99.7265 99.7265 93.2117 93.2117 93.2117 99.7265 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 93.2117 86.6969 86.6969 86.6969 93.2117 86.6969 86.6969 86.6969 86.6969 86.6969 86.6969 86.6969 86.6969 86.6969 86.6969 86.6969 86.6969</A_FLOAT64>
+      </Values>
+      <Id>7</Id>
+      <Name>CHANNEL04</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <RawDatatype>DT_DOUBLE</RawDatatype>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>4</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>explicit</SequenceRepresentation>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <Values>
+        <A_FLOAT64>-0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.385186 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -2.32831E-9 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -2.32831E-9 -2.32831E-9 -2.32831E-9 -0.192593 -2.32831E-9 -0.192593 -2.32831E-9 -0.192593 -0.192593 -2.32831E-9 -2.32831E-9 -2.32831E-9 -0.192593 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 0.192593 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 0.192593 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 0.192593 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 0.192593 0.192593 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 0.192593 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 0.192593 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 0.192593 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 0.192593 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 0.192593 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -0.192593 -0.192593 -2.32831E-9 -2.32831E-9 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -2.32831E-9 -2.32831E-9 -0.192593 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 -2.32831E-9 -2.32831E-9 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.192593 0.385186 0.385186 0.385186 0.385186 0.385186 0.385186 0.385186 0.192593 0.192593 0.192593 -2.32831E-9 -2.32831E-9 -2.32831E-9 -0.192593 -0.192593 -0.385186 -0.57778 -0.57778 -0.57778 -0.57778 -0.385186 -0.192593 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -0.192593 -0.385186 -0.385186 -0.192593 -0.192593 -0.192593 -0.385186 -0.770373 -1.15556 -1.34815 -1.54075 -1.73334 -1.92593 -1.92593 -2.11852 -2.6963 -3.65927 -4.62224 -5.97039 -7.12595 -7.89632 -8.08891 -7.89632 -7.70373 -7.70373 -7.51113 -7.12595 -6.74076 -6.54817 -6.35557 -6.16298 -5.97039 -5.77779 -5.77779 -5.77779 -5.97039 -6.16298 -6.16298 -6.16298 -6.16298 -5.77779 -5.5852 -5.20002 -4.81483 -4.62224 -4.42964 -4.23705 -4.23705 -4.23705 -4.42964 -4.62224 -5.00742 -5.00742 -5.00742 -5.00742 -4.81483 -4.62224 -4.23705 -3.85186 -3.46668 -3.27408 -3.08149 -2.8889 -2.6963 -2.50371 -2.50371 -2.11852 -2.11852 -2.11852 -1.92593 -1.92593 -1.73334 -1.73334 -1.73334 -1.73334 -1.73334 -1.73334 -1.73334 -1.73334 -1.54075 -1.34815 -0.770373 -2.32831E-9 0.770372 1.54075 1.92593 2.11852 2.11852 2.31112 2.50371 3.46668 5.39261 7.89632 10.4 12.1334 13.0963 13.6741 14.0593 14.4445 15.0223 15.6 15.9852 16.3704 17.1408 18.1038 19.4519 20.9927 21.9556 22.3408 22.5334 22.726 22.9186 23.1112 22.9186 22.5334 21.9556 21.763 21.763 22.3408 23.3038 24.0741 24.8445 25.4223 25.8075 26.0001 26.0001 25.8075 25.4223 25.0371 25.0371 25.0371 25.0371 25.0371 25.0371 25.0371 25.0371 25.0371 25.4223 25.8075 26.1927 26.5779 26.963 27.1556 27.3482 27.5408 27.7334 28.1186 28.5038 28.6964 29.0816 29.6593 30.0445 30.6223 31.2001 31.7779 32.3556 33.126 33.7038 34.4742 35.2445 36.2075 37.1705 38.1334 39.289 40.4446 41.6001 42.7557 43.9112 45.0668 46.4149 47.9557 49.3038 50.8446 52.3853 54.1187 55.852 57.5854 59.1261 60.4742 62.015 63.5557 65.2891 66.8298 68.3706 70.1039 71.6446 73.1854 74.7261 76.0743 77.2299 78.3854 79.3484 80.3113 81.2743 82.0447 83.0076 83.778 84.5484 84.9336 85.1262 85.1262 85.1262 84.9336 84.5484 84.3558 83.9706 83.778 83.5854 83.3928 83.2002 83.0076 82.815 82.6225 82.4299 82.2373 82.2373 82.4299 82.4299 82.6225 82.6225 82.815 83.0076 82.815 82.2373 81.6595 80.8891 79.9262 79.1558 78.578 78.3854 78.1928 78.1928 77.8076 77.615 77.2299 76.4595 75.3039 73.7632 72.415 70.8743 69.3335 67.7928 66.252 64.5187 62.7854 61.2446 59.8965 58.5483 57.0076 55.4668 53.9261 52.3853 51.0372 49.689 48.5335 47.5705 46.6075 45.8372 44.8742 43.5261 41.9853 40.4446 39.0964 37.7483 36.4001 35.4371 34.2816 33.3186 32.3556 31.5853 30.6223 29.6593 28.6964 27.7334 26.7704 25.8075 25.0371 24.4593 24.2667 23.689 23.1112 22.1482 20.8001 19.0667 17.3334 15.7926 14.4445 13.2889 12.326 11.5556 10.9778 10.4 9.82225 9.43706 9.05188 9.05188 9.05188 9.05188 9.05188 9.05188 8.66669 8.2815 7.70373 7.12595 6.54817 6.16298 5.97039 5.97039 5.5852 5.20001 5.00742 4.81483 4.62223 4.42964 4.42964 4.62223 4.62223 4.81483 5.00742 5.39261 5.5852 5.77779 5.5852 5.39261 5.00742 4.62223 4.42964 4.23705 4.23705 4.04446 3.85186 3.65927 3.46668 3.27408 3.08149 2.6963 2.11852 1.73334 1.15556 0.962966 0.770372 0.577779 0.577779 0.577779 0.770372 0.962966 1.34815 1.73334 2.11852 2.50371 2.50371 2.6963 3.27408 4.04446 5.00742 5.97039 6.93335 7.70373 8.2815 8.4741 8.66669 8.85928 8.85928 8.66669 8.2815 8.08891 8.08891 8.2815 8.2815 8.08891 7.89632 7.31854 6.35557 5.5852 4.62223 3.85186 2.8889 1.92593 1.34815 0.770372 0.385186 0.192593 -2.32831E-9 -2.32831E-9 0.192593 0.577779 0.770372 0.962966 1.15556 1.34815 1.73334 2.11852 2.50371 3.27408 4.04446 4.81483 5.77779 6.74076 7.70373 8.4741 9.43706 10.0148 10.5926 10.7852 10.5926 10.4 10.4 10.5926 10.7852 10.9778 10.9778 10.9778 10.9778 10.9778 11.1704 11.1704 10.9778 10.5926 10.2074 9.82225 9.62966 9.24447 8.66669 8.08891 7.31854 6.54817 5.77779 5.00742 4.42964 3.65927 3.08149 2.8889 2.6963 2.50371 2.50371 2.50371 2.50371 2.50371 2.8889 3.08149 3.46668 3.46668 3.46668 3.27408 2.8889 2.50371 2.31112 1.92593 1.54075 1.34815 1.34815 1.54075 1.92593 2.50371 2.8889 3.08149 3.27408 3.46668 3.65927 3.85186 4.04446 4.04446 4.04446 3.85186 3.85186 3.65927 3.46668 3.08149 2.8889 2.6963 3.08149 3.27408 3.08149 2.50371 1.73334 0.962966 0.192593 -0.57778 -1.15556 -1.73334 -2.31112 -2.8889 -3.27408 -3.46668 -3.46668 -3.08149 -2.6963 -2.31112 -2.11852 -2.31112 -2.6963 -2.6963 -2.6963 -2.8889 -2.8889 -2.8889 -2.31112 -1.54075 -0.192593 1.54075 3.27408 4.23705 4.04446 3.08149 1.92593 0.577779 -0.57778 -1.73334 -3.08149 -4.81483 -6.74076 -8.2815 -9.62966 -10.4 -11.1704 -11.7482 -12.7111 -13.6741 -14.8297 -16.1778 -17.9112 -19.8371 -21.5704 -23.3038 -24.8445 -26.1927 -27.1556 -27.926 -28.5038 -28.889 -29.0816 -29.0816 -28.889 -28.5038 -28.1186 -27.926 -27.5408 -27.5408 -27.3482 -27.3482 -27.3482 -27.3482 -27.3482 -27.3482 -27.5408 -27.926 -28.1186 -28.3112 -28.5038 -28.5038 -28.5038 -28.6964 -28.6964 -28.6964 -28.889 -29.0816 -29.4667 -29.8519 -30.2371 -30.6223 -31.0075 -31.3927 -31.5853 -31.5853 -31.5853 -31.5853 -31.3927 -31.2001 -30.8149 -30.8149 -30.8149 -31.0075 -31.2001 -31.5853 -32.1631 -32.5482 -32.9334 -33.126 -33.5112 -33.5112 -33.7038 -34.089 -34.4742 -34.8594 -35.4371 -36.0149 -36.7853 -37.3631 -37.7483 -38.1334 -38.326 -38.5186 -38.5186 -38.1334 -37.9408 -37.7483 -37.3631 -37.3631 -37.3631 -37.3631 -37.3631 -37.3631 -37.3631 -37.5557 -37.5557 -37.7483 -37.7483 -37.5557 -37.5557 -37.3631 -37.5557 -37.3631 -37.3631 -37.1705 -36.9779 -36.5927 -36.2075 -36.2075 -36.2075 -36.0149 -35.6297 -35.2445 -34.8594 -34.4742 -33.7038 -32.9334 -31.9705 -31.2001 -30.6223 -30.2371 -29.8519 -29.8519 -29.6593 -29.4667 -29.0816 -28.889 -28.889 -28.5038 -27.926 -27.5408 -26.963 -26.3853 -25.8075 -25.2297 -24.6519 -24.0741 -23.4964 -22.726 -22.1482 -21.3778 -20.8001 -20.2223 -19.4519 -18.8741 -18.4889 -17.9112 -17.526 -17.1408 -16.563 -16.1778 -15.6 -15.2149 -14.6371 -14.0593 -13.4815 -12.9037 -12.1334 -11.5556 -10.7852 -10.0148 -9.24447 -8.66669 -7.89632 -7.31854 -6.93335 -6.54817 -6.16298 -5.77779 -5.5852 -5.39261 -5.39261 -5.39261 -5.39261 -5.5852 -5.77779 -5.77779 -5.97039 -6.16298 -6.16298 -6.16298 -6.35557 -6.54817 -6.74076 -7.12595 -7.89632 -8.4741 -9.43706 -10.2074 -11.363 -12.326 -13.2889 -13.8667 -14.4445 -15.0223 -15.4075 -15.9852 -16.563 -17.1408 -17.7186 -18.2964 -18.8741 -19.6445 -20.2223 -20.8001 -21.5704 -22.1482 -22.9186 -23.4964 -24.2667 -24.8445 -25.6149 -26.0001 -26.5779 -27.1556 -27.5408 -27.926 -28.3112 -28.5038 -28.6964 -28.889 -29.0816 -29.2742 -29.2742 -29.0816 -29.0816 -29.0816 -29.2742 -29.4667 -29.6593 -29.8519 -30.2371 -30.6223 -30.8149 -31.2001 -31.3927 -31.5853 -31.7779 -31.9705 -32.1631 -32.5482 -32.7408 -32.9334 -33.126 -33.5112 -33.7038 -33.8964 -34.089 -34.4742 -34.8594 -35.2445 -35.6297 -36.0149 -36.2075 -36.5927 -36.7853 -36.7853 -36.7853 -36.7853 -36.7853 -36.5927 -36.5927 -36.5927 -36.5927 -36.7853 -36.9779 -36.9779 -36.9779 -36.9779 -36.7853 -36.7853 -36.7853 -36.5927 -36.5927 -36.4001 -36.2075 -36.0149 -35.8223 -35.6297 -35.4371 -35.2445 -34.8594 -34.6668 -34.2816 -34.089 -33.8964 -33.5112 -33.126 -32.7408 -32.1631 -31.7779 -31.2001 -30.6223 -30.0445 -29.4667 -28.6964 -27.926 -27.1556 -26.5779 -25.8075 -25.0371 -24.2667 -23.4964 -22.726 -22.1482 -21.3778 -20.6075 -19.8371 -19.0667 -18.4889 -17.7186 -16.9482 -16.3704 -15.7926 -15.0223 -14.4445 -13.6741 -13.0963 -12.5186 -11.7482 -11.1704 -10.5926 -10.0148 -9.43706 -8.85928 -8.4741 -7.89632 -7.51113 -6.93335 -6.54817 -5.97039 -5.77779 -5.39261 -5.00742 -4.81483 -4.42964 -4.04446 -3.85186 -3.65927 -3.46668 -3.46668 -3.08149 -3.08149 -2.6963 -2.6963 -2.31112 -2.11852 -2.11852 -1.92593 -1.73334 -1.54075 -1.34815 -1.15556 -0.962966 -0.770373 -0.770373 -0.57778 -0.57778 -0.385186 -0.192593 -0.192593 -2.32831E-9 -2.32831E-9 0.192593 0.385186 0.385186 0.577779 0.577779 0.577779 0.385186 0.385186 0.385186 0.385186 0.385186 0.385186 0.385186 0.385186 0.385186 0.385186 0.385186 0.577779 0.385186 0.577779 0.385186 0.385186 0.385186 0.385186 0.385186 0.385186 0.577779 0.577779 0.577779 0.577779 0.577779 0.577779 0.770372 0.770372 0.770372 0.770372 0.962966 0.962966 0.962966 1.15556 1.15556 1.15556 1.15556 1.15556 1.34815 1.34815 1.15556 1.34815 1.34815 1.54075 1.92593 2.31112 2.50371 2.50371 2.50371 2.50371 2.50371 2.50371 2.50371 2.50371 2.50371 2.50371 2.50371 2.6963 2.6963 2.6963 2.6963 2.6963 2.6963 2.6963 2.8889 2.8889 2.8889 2.6963 2.8889 2.8889 2.8889 2.8889 2.8889 2.8889 3.08149 3.08149 3.08149 3.08149 3.08149 3.08149 3.08149 3.08149 3.08149 3.08149 3.08149 3.08149 3.08149 3.08149 3.08149 3.08149 3.08149 2.8889 2.8889 2.8889 2.6963 2.6963 2.6963 2.50371 2.31112 2.31112 2.11852 2.11852 1.92593 1.73334 1.73334 1.54075 1.34815 1.15556 1.15556 0.962966 0.770372 0.577779 0.577779 0.385186 0.192593 0.192593 -2.32831E-9 -2.32831E-9 -0.192593 -0.192593 -0.385186 -0.385186 -0.385186 -0.57778 -0.57778 -0.57778 -0.770373 -0.770373 -0.770373 -0.770373 -0.770373 -0.770373 -0.770373 -0.770373 -0.770373 -0.770373 -0.57778 -0.57778 -0.57778 -0.57778 -0.385186 -0.385186 -0.192593 -0.192593 -0.192593 -2.32831E-9 -2.32831E-9 0.192593 0.192593 0.385186 0.385186 0.385186 0.577779 0.577779 0.770372 0.770372 0.770372 0.770372 0.770372 0.770372 0.770372 0.962966 0.962966 1.15556 1.15556 1.34815 1.54075 1.54075 1.54075 1.73334 1.92593 2.11852 2.11852 2.11852 2.31112 2.31112 2.50371 2.50371 2.50371 2.50371 2.6963 2.6963 2.6963 2.6963 2.8889 2.8889 2.8889 2.8889 2.8889 3.08149 3.08149 3.08149 3.08149 3.27408 3.27408 3.27408 3.46668 3.46668 3.46668 3.65927 3.65927 3.65927 3.65927 3.65927 3.65927 3.46668 3.46668 3.65927 3.85186 3.85186 3.85186 3.85186 3.85186 3.85186 4.04446 4.04446 4.04446 4.04446 4.04446 3.85186 3.85186 4.04446 3.85186 3.85186 3.85186 3.85186 3.85186 3.85186 3.85186 3.85186 3.65927 3.65927 3.65927 3.65927 3.65927 3.46668 3.46668 3.46668 3.46668 3.27408 3.27408 3.27408 3.08149 3.08149 3.08149 2.8889 2.8889 2.8889 2.6963 2.6963 2.6963 2.50371 2.50371 2.50371 2.50371 2.50371 2.31112 2.31112 2.31112 2.11852 2.11852 1.92593 1.92593 1.92593 1.92593 1.73334 1.73334 1.73334 1.54075 1.54075 1.54075 1.54075 1.34815 1.34815 1.34815 1.15556 1.15556 1.15556 1.15556 1.15556 1.15556 0.962966 0.962966 0.962966 0.962966 0.962966 0.962966 0.770372 0.770372 0.770372 0.770372 0.770372 0.577779 0.577779 0.577779 0.577779 0.577779 0.577779 0.577779 0.577779 0.577779 0.577779 0.577779 0.577779 0.577779 0.770372 0.770372 0.770372 0.770372 0.770372 0.770372 0.770372 0.770372 0.770372 0.770372 0.770372 0.770372 0.577779 0.770372 0.577779 0.770372 0.770372 0.770372 0.770372 0.770372 0.770372 0.770372 0.962966 0.962966 0.962966 1.15556 1.15556 1.15556 1.34815 1.34815 1.34815 1.34815 1.34815 1.54075 1.54075 1.54075 1.54075 1.54075 1.54075 1.54075 1.54075 1.54075 1.73334 1.73334 1.73334 1.73334 1.73334 1.73334 1.73334 1.73334 1.73334 1.73334 1.73334 1.73334 1.73334 1.73334 1.73334 1.54075 1.54075 1.54075 1.54075 1.34815 1.34815 1.34815 1.34815 1.34815 1.34815 1.15556 1.15556 1.15556 1.15556 0.962966 0.962966 0.962966 0.770372 0.770372 0.770372 0.770372 0.770372 0.577779 0.577779 0.577779 0.577779 0.577779 0.577779 0.577779 0.385186 0.385186 0.385186 0.385186 0.192593 0.192593 0.192593 0.192593 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 0.192593 -2.32831E-9 -2.32831E-9 -2.32831E-9 -0.192593 -0.192593 -0.385186 -0.385186 -0.385186 -0.385186 -0.385186 -0.385186 -0.385186 -0.385186 -0.385186 -0.57778 -0.770373 -0.962966 -1.15556 -1.15556 -1.34815 -1.54075 -1.73334 -1.73334 -1.92593 -2.11852 -2.11852 -2.31112 -2.31112 -2.31112 -2.50371 -2.50371 -2.50371 -2.6963 -2.6963 -2.6963 -2.8889 -2.8889 -3.08149 -3.08149 -3.08149 -3.27408 -3.27408 -3.27408 -3.27408 -3.27408 -3.46668 -3.46668 -3.46668 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.85186 -3.85186 -3.85186 -3.85186 -3.65927 -3.65927 -3.65927 -3.85186 -3.65927 -3.65927 -3.65927 -3.65927 -3.46668 -3.46668 -3.27408 -3.27408 -3.27408 -3.27408 -3.08149 -3.27408 -3.27408 -3.27408 -3.27408 -3.27408 -3.27408 -3.08149 -3.08149 -3.08149 -3.08149 -2.8889 -2.8889 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.50371 -2.50371 -2.50371 -2.50371 -2.50371 -2.31112 -2.31112 -2.11852 -2.11852 -1.92593 -1.92593 -1.73334 -1.73334 -1.54075 -1.54075 -1.34815 -1.34815 -1.15556 -1.15556 -0.962966 -0.770373 -0.770373 -0.57778 -0.385186 -0.385186 -0.192593 -2.32831E-9 0.192593 0.385186 0.577779 0.577779 0.770372 0.962966 0.962966 1.15556 1.34815 1.34815 1.54075 1.54075 1.73334 1.73334 1.73334 1.92593 1.92593 1.92593 1.92593 1.92593 2.11852 2.11852 2.11852 2.11852 2.11852 2.11852 2.11852 2.11852 2.11852 2.11852 2.11852 2.11852 2.11852 1.92593 2.11852 1.92593 1.92593 1.92593 1.92593 1.92593 1.73334 1.73334 1.73334 1.73334 1.73334 1.54075 1.54075 1.34815 1.34815 1.34815 1.15556 1.15556 1.15556 0.962966 0.962966 0.962966 0.770372 0.770372 0.577779 0.577779 0.577779 0.385186 0.385186 0.385186 0.192593 0.192593 0.192593 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.385186 -0.192593 -0.385186 -0.385186 -0.385186 -0.385186 -0.385186 -0.385186 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.385186 -0.192593 -0.385186 -0.385186 -0.385186 -0.192593 -0.385186 -0.385186 -0.385186 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 0.192593 0.192593 0.192593 0.385186 0.385186 0.385186 0.385186 0.577779 0.577779 0.577779 0.577779 0.770372 0.770372 0.962966 0.962966 0.962966 0.962966 0.962966 0.962966 0.962966 0.962966 0.962966 0.962966 0.770372 0.770372 0.770372 0.770372 0.770372 0.770372 0.770372 0.770372 0.770372 0.577779 0.577779 0.577779 0.385186 0.385186 0.385186 0.192593 0.385186 0.192593 0.192593 0.192593 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -2.32831E-9 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.192593 -0.385186 -0.385186 -0.385186 -0.385186 -0.385186 -0.385186 -0.385186 -0.57778 -0.770373 -0.770373 -0.962966 -1.15556 -1.15556 -1.15556 -0.962966 -0.962966 -0.962966 -0.962966 -1.15556 -1.34815 -1.34815 -1.54075 -1.54075 -1.54075 -1.73334 -1.73334 -1.73334 -1.73334 -1.92593 -1.92593 -1.92593 -2.11852 -2.11852 -2.31112 -2.31112 -2.31112 -2.31112 -2.50371 -2.6963 -2.6963 -2.6963 -2.6963 -2.8889 -2.8889 -2.8889 -3.08149 -3.08149 -3.27408 -3.27408 -3.46668 -3.46668 -3.46668 -3.46668 -3.65927 -3.65927 -3.65927 -3.85186 -3.85186 -3.85186 -3.85186 -3.85186 -4.04446 -4.04446 -4.04446 -4.04446 -4.04446 -4.23705 -4.23705 -4.23705 -4.23705 -4.42964 -4.42964 -4.42964 -4.42964 -4.42964 -4.42964 -4.62224 -4.62224 -4.62224 -4.62224 -4.81483 -4.81483 -5.00742 -5.00742 -5.00742 -5.00742 -5.00742 -5.00742 -5.00742 -5.00742 -5.00742 -5.00742 -5.00742 -5.20002 -5.00742 -5.00742 -5.00742 -5.00742 -5.20002 -5.20002 -5.00742 -5.00742 -5.00742 -5.00742 -5.00742 -5.00742 -5.00742 -5.00742 -4.81483 -4.81483 -4.81483 -4.81483 -4.62224 -4.62224 -4.62224 -4.42964 -4.42964 -4.42964 -4.42964 -4.42964 -4.23705 -4.23705 -4.23705 -4.04446 -4.04446 -4.04446 -4.04446 -3.85186 -3.85186 -3.85186 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.27408 -3.27408 -3.27408 -3.27408 -3.27408 -3.27408 -3.27408 -3.27408 -3.08149 -3.08149 -3.08149 -3.08149 -2.8889 -2.8889 -2.8889 -2.8889 -2.8889 -2.6963 -2.6963 -2.50371 -2.50371 -2.50371 -2.50371 -2.50371 -2.50371 -2.50371 -2.31112 -2.31112 -2.31112 -2.11852 -2.11852 -2.11852 -2.31112 -2.11852 -2.11852 -2.11852 -2.11852 -1.92593 -1.92593 -1.92593 -1.92593 -1.92593 -1.73334 -1.73334 -1.73334 -1.73334 -1.73334 -1.73334 -1.73334 -1.73334 -1.73334 -1.73334 -1.73334 -1.73334 -1.54075 -1.54075 -1.54075 -1.54075 -1.73334 -1.73334 -1.73334 -1.54075 -1.54075 -1.54075 -1.73334 -1.54075 -1.54075 -1.73334 -1.73334 -1.73334 -1.73334 -1.73334 -1.73334 -1.73334 -1.92593 -1.92593 -1.92593 -1.92593 -1.92593 -2.11852 -2.11852 -2.11852 -2.11852 -2.11852 -2.11852 -2.31112 -2.31112 -2.31112 -2.31112 -2.50371 -2.50371 -2.50371 -2.50371 -2.50371 -2.6963 -2.6963 -2.6963 -2.8889 -2.8889 -2.8889 -2.8889 -3.08149 -3.08149 -3.08149 -3.27408 -3.27408 -3.27408 -3.46668 -3.46668 -3.46668 -3.65927 -3.65927 -3.65927 -3.65927 -3.85186 -3.85186 -3.85186 -4.04446 -4.04446 -4.04446 -4.04446 -4.23705 -4.23705 -4.23705 -4.42964 -4.42964 -4.42964 -4.42964 -4.62224 -4.62224 -4.81483 -4.81483 -4.81483 -4.81483 -4.81483 -4.81483 -5.00742 -5.00742 -5.00742 -5.00742 -5.20002 -5.20002 -5.20002 -5.20002 -5.20002 -5.20002 -5.20002 -5.39261 -5.39261 -5.39261 -5.39261 -5.39261 -5.39261 -5.39261 -5.39261 -5.5852 -5.5852 -5.5852 -5.5852 -5.5852 -5.5852 -5.5852 -5.5852 -5.5852 -5.5852 -5.5852 -5.5852 -5.5852 -5.5852 -5.5852 -5.5852 -5.5852 -5.77779 -5.5852 -5.5852 -5.5852 -5.5852 -5.39261 -5.5852 -5.5852 -5.5852 -5.39261 -5.39261 -5.39261 -5.39261 -5.39261 -5.39261 -5.39261 -5.20002 -5.20002 -5.20002 -5.20002 -5.20002 -5.00742 -5.00742 -5.00742 -5.00742 -5.00742 -5.00742 -5.00742 -5.00742 -4.81483 -4.81483 -4.81483 -4.81483 -4.81483 -4.81483 -4.81483 -4.81483 -4.81483 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.42964 -4.42964 -4.42964 -4.42964 -4.42964 -4.23705 -4.23705 -4.23705 -4.23705 -4.23705 -4.04446 -4.04446 -4.04446 -4.04446 -3.85186 -3.85186 -3.85186 -3.85186 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.27408 -3.27408 -3.27408 -3.27408 -3.27408 -3.27408 -3.27408 -3.27408 -3.27408 -3.08149 -3.08149 -3.08149 -3.08149 -3.08149 -3.08149 -3.08149 -3.08149 -3.08149 -2.8889 -2.8889 -2.8889 -2.8889 -2.8889 -2.8889 -2.8889 -2.8889 -2.8889 -2.8889 -2.8889 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.6963 -2.8889 -2.8889 -2.6963 -2.8889 -2.6963 -2.8889 -2.8889 -2.8889 -2.8889 -2.8889 -2.8889 -2.8889 -2.8889 -2.8889 -3.08149 -3.08149 -3.08149 -3.08149 -3.08149 -3.08149 -3.27408 -3.27408 -3.27408 -3.27408 -3.27408 -3.27408 -3.27408 -3.46668 -3.46668 -3.46668 -3.46668 -3.65927 -3.65927 -3.65927 -3.65927 -3.85186 -3.65927 -3.85186 -3.85186 -3.85186 -3.85186 -3.85186 -3.85186 -4.04446 -4.04446 -4.04446 -4.04446 -4.04446 -4.04446 -4.04446 -4.04446 -4.04446 -4.04446 -4.23705 -4.23705 -4.23705 -4.23705 -4.23705 -4.23705 -4.23705 -4.42964 -4.42964 -4.42964 -4.42964 -4.42964 -4.42964 -4.42964 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.81483 -4.62224 -4.62224 -4.81483 -4.81483 -4.81483 -4.81483 -4.81483 -4.81483 -4.81483 -4.81483 -4.81483 -4.81483 -4.81483 -4.81483 -4.62224 -4.81483 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.62224 -4.42964 -4.42964 -4.42964 -4.62224 -4.42964 -4.42964 -4.42964 -4.42964 -4.42964 -4.42964 -4.42964 -4.42964 -4.42964 -4.23705 -4.23705 -4.23705 -4.23705 -4.23705 -4.23705 -4.23705 -4.23705 -4.23705 -4.04446 -4.04446 -4.04446 -4.04446 -4.04446 -4.04446 -4.04446 -4.04446 -4.04446 -3.85186 -3.85186 -3.85186 -3.85186 -3.85186 -3.85186 -3.85186 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.46668 -3.46668 -3.46668 -3.65927 -3.65927 -3.65927 -3.46668 -3.46668 -3.46668 -3.65927 -3.65927 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.46668 -3.65927 -3.65927 -3.65927 -3.46668 -3.65927 -3.46668 -3.46668 -3.46668 -3.46668 -3.65927 -3.46668 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.85186 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927 -3.65927</A_FLOAT64>
+      </Values>
+      <Id>8</Id>
+      <Name>CHANNEL07</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <RawDatatype>DT_DOUBLE</RawDatatype>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>7</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>explicit</SequenceRepresentation>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <Values>
+        <A_FLOAT64>2.02778 2.02778 2.02778 2.02778 -0.368683 -0.368683 2.02778 -0.368683 2.02778 2.02778 -0.368683 2.02778 2.02778 2.02778 -0.368683 -0.368683 2.02778 2.02778 2.02778 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 2.02778 -0.368683 -0.368683 -0.368683 2.02778 -0.368683 -0.368683 -0.368683 -0.368683 2.02778 -0.368683 2.02778 -0.368683 2.02778 2.02778 2.02778 2.02778 -0.368683 2.02778 -0.368683 -0.368683 2.02778 -0.368683 2.02778 2.02778 2.02778 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 2.02778 -0.368683 -0.368683 -0.368683 2.02778 2.02778 -0.368683 -0.368683 2.02778 -0.368683 2.02778 -0.368683 -0.368683 -0.368683 2.02778 -0.368683 2.02778 -0.368683 -0.368683 2.02778 -0.368683 -0.368683 2.02778 -0.368683 2.02778 2.02778 2.02778 2.02778 -0.368683 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 -0.368683 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 -0.368683 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 -0.368683 2.02778 2.02778 2.02778 2.02778 -0.368683 -0.368683 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 -0.368683 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 -0.368683 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 -0.368683 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 -0.368683 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 -0.368683 2.02778 -0.368683 -0.368683 2.02778 -0.368683 -0.368683 -0.368683 2.02778 -0.368683 -0.368683 2.02778 2.02778 2.02778 -0.368683 2.02778 -0.368683 -0.368683 2.02778 -0.368683 -0.368683 2.02778 2.02778 2.02778 -0.368683 -0.368683 -0.368683 2.02778 -0.368683 -0.368683 -0.368683 2.02778 -0.368683 -0.368683 2.02778 2.02778 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 2.02778 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 2.02778 -0.368683 -0.368683 -0.368683 2.02778 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 2.02778 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 2.02778 -0.368683 2.02778 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 2.02778 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 2.02778 4.42423 6.82069 2.02778 2.02778 -0.368683 2.02778 -0.368683 2.02778 -0.368683 2.02778 -0.368683 -0.368683 2.02778 -0.368683 -0.368683 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 -0.368683 2.02778 2.02778 2.02778 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 2.02778 -0.368683 -0.368683 2.02778 -0.368683 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -2.76514 -0.368683 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 2.02778 2.02778 2.02778 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 2.02778 2.02778 2.02778 2.02778 -0.368683 2.02778 -0.368683 -0.368683 -2.76514 -2.76514 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -2.76514 -0.368683 -2.76514 -2.76514 -2.76514 -0.368683 -2.76514 -2.76514 -2.76514 -2.76514 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -5.1616 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -0.368683 -2.76514 -2.76514 -2.76514 -2.76514 -5.1616 -5.1616 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -2.76514 -2.76514 -2.76514 -2.76514 -5.1616 -5.1616 -5.1616 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -5.1616 -5.1616 -7.55806 -5.1616 -5.1616 -5.1616 -5.1616 -2.76514 -0.368683 2.02778 2.02778 4.42423 4.42423 4.42423 6.82069 6.82069 6.82069 6.82069 9.21714 11.6136 11.6136 14.0101 16.4065 18.803 18.803 18.803 18.803 18.803 16.4065 16.4065 14.0101 14.0101 14.0101 16.4065 16.4065 16.4065 18.803 18.803 18.803 18.803 16.4065 16.4065 14.0101 14.0101 14.0101 11.6136 11.6136 14.0101 14.0101 16.4065 16.4065 16.4065 18.803 18.803 16.4065 16.4065 16.4065 16.4065 14.0101 14.0101 14.0101 11.6136 11.6136 11.6136 14.0101 14.0101 14.0101 16.4065 16.4065 18.803 21.1994 23.5959 23.5959 25.9924 25.9924 28.3888 28.3888 28.3888 25.9924 21.1994 18.803 14.0101 9.21714 4.42423 2.02778 2.02778 2.02778 2.02778 4.42423 4.42423 4.42423 6.82069 9.21714 11.6136 14.0101 16.4065 18.803 21.1994 21.1994 21.1994 21.1994 21.1994 21.1994 21.1994 23.5959 25.9924 25.9924 25.9924 21.1994 14.0101 6.82069 -0.368683 -5.1616 -2.76514 -0.368683 2.02778 4.42423 4.42423 4.42423 2.02778 -2.76514 -9.9545 -19.5403 -26.7297 -36.3155 -41.1084 -41.1084 -38.712 -38.712 -36.3155 -31.5227 -26.7297 -21.9368 -17.1439 -14.7475 -14.7475 -17.1439 -19.5403 -24.3332 -33.9191 -41.1084 -43.5049 -41.1084 -31.5227 -21.9368 -17.1439 -17.1439 -17.1439 -19.5403 -19.5403 -19.5403 -24.3332 -29.1262 -29.1262 -24.3332 -17.1439 -9.9545 -5.1616 -5.1616 -7.55806 -5.1616 -2.76514 -2.76514 -2.76514 -2.76514 2.02778 6.82069 14.0101 21.1994 30.7853 35.5782 42.7676 45.164 49.9569 49.9569 49.9569 47.5604 45.164 45.164 42.7676 37.9746 30.7853 21.1994 9.21714 -2.76514 -12.351 -17.1439 -21.9368 -26.7297 -29.1262 -33.9191 -36.3155 -43.5049 -53.0907 -62.6766 -74.6589 -86.6411 -96.227 -105.813 -110.606 -105.813 -98.6239 -108.209 -134.571 -156.139 -182.499 -211.257 -237.618 -287.943 -319.098 -304.719 -278.358 -259.186 -237.618 -206.464 -177.706 -153.742 -139.363 -132.174 -136.967 -139.363 -129.777 -108.209 -91.4341 -84.2447 -81.8483 -79.4518 -77.0553 -77.0553 -81.8483 -81.8483 -72.2624 -60.2801 -50.6943 -45.9014 -41.1084 -36.3155 -31.5227 -29.1262 -26.7297 -21.9368 -14.7475 -7.55806 -2.76514 2.02778 6.82069 9.21714 16.4065 23.5959 35.5782 47.5604 59.5428 71.525 83.5073 95.4897 105.076 114.661 124.248 131.436 138.626 145.815 155.401 164.987 174.573 184.158 193.745 198.538 203.33 205.726 210.52 217.709 222.502 224.898 227.295 229.691 232.088 234.485 241.673 248.863 256.052 263.242 265.638 265.638 263.242 256.052 248.863 239.277 236.88 234.485 234.485 229.691 227.295 220.105 212.916 200.933 186.555 172.176 167.383 164.987 164.987 164.987 164.987 162.59 157.798 153.005 148.211 148.211 148.211 153.005 160.194 167.383 174.573 179.366 186.555 188.951 188.951 186.555 188.951 191.348 191.348 188.951 188.951 188.951 188.951 188.951 191.348 191.348 193.745 191.348 188.951 188.951 188.951 191.348 193.745 193.745 196.141 196.141 196.141 196.141 193.745 191.348 188.951 188.951 188.951 191.348 193.745 193.745 196.141 198.538 200.933 203.33 203.33 203.33 205.726 205.726 205.726 208.123 208.123 210.52 210.52 212.916 212.916 212.916 215.313 215.313 215.313 215.313 215.313 215.313 215.313 215.313 215.313 215.313 220.105 222.502 224.898 224.898 222.502 220.105 215.313 212.916 210.52 208.123 208.123 208.123 210.52 212.916 217.709 222.502 224.898 229.691 234.485 236.88 241.673 244.07 246.466 251.26 256.052 260.845 263.242 268.035 270.431 272.828 275.223 277.62 277.62 280.017 280.017 277.62 275.223 272.828 272.828 270.431 268.035 268.035 270.431 270.431 268.035 268.035 268.035 268.035 270.431 270.431 268.035 265.638 263.242 260.845 258.448 251.26 248.863 244.07 239.277 234.485 232.088 229.691 227.295 224.898 220.105 217.709 217.709 212.916 210.52 205.726 200.933 196.141 193.745 188.951 184.158 181.762 176.969 174.573 169.78 167.383 164.987 160.194 157.798 155.401 153.005 150.608 150.608 150.608 150.608 150.608 150.608 150.608 150.608 150.608 150.608 148.211 145.815 143.418 141.023 138.626 133.833 131.436 129.04 126.643 126.643 126.643 126.643 126.643 126.643 126.643 129.04 129.04 126.643 126.643 126.643 124.248 124.248 121.851 119.454 117.058 117.058 114.661 114.661 112.265 112.265 109.868 107.471 105.076 105.076 102.679 100.283 97.886 97.886 95.4897 95.4897 95.4897 95.4897 93.0932 93.0932 90.6967 90.6967 90.6967 88.3002 85.9038 83.5073 81.1108 81.1108 78.7145 78.7145 76.318 73.9215 73.9215 71.525 71.525 71.525 71.525 71.525 71.525 69.1286 69.1286 69.1286 66.7321 66.7321 64.3356 64.3356 64.3356 61.9392 61.9392 59.5428 59.5428 59.5428 59.5428 59.5428 59.5428 59.5428 59.5428 59.5428 57.1463 57.1463 57.1463 57.1463 54.7498 57.1463 57.1463 57.1463 57.1463 57.1463 57.1463 57.1463 57.1463 57.1463 59.5428 59.5428 59.5428 59.5428 61.9392 61.9392 61.9392 64.3356 64.3356 66.7321 66.7321 66.7321 66.7321 69.1286 69.1286 69.1286 69.1286 69.1286 69.1286 69.1286 69.1286 71.525 71.525 73.9215 73.9215 73.9215 73.9215 73.9215 73.9215 76.318 76.318 78.7145 81.1108 81.1108 83.5073 83.5073 85.9038 85.9038 83.5073 83.5073 83.5073 83.5073 81.1108 78.7145 78.7145 78.7145 76.318 76.318 76.318 76.318 76.318 76.318 78.7145 78.7145 78.7145 78.7145 78.7145 78.7145 78.7145 81.1108 81.1108 81.1108 81.1108 81.1108 78.7145 81.1108 78.7145 78.7145 78.7145 78.7145 78.7145 78.7145 78.7145 78.7145 78.7145 81.1108 81.1108 81.1108 81.1108 83.5073 83.5073 83.5073 83.5073 83.5073 83.5073 83.5073 85.9038 85.9038 85.9038 85.9038 85.9038 85.9038 85.9038 85.9038 85.9038 83.5073 83.5073 83.5073 83.5073 81.1108 81.1108 78.7145 78.7145 76.318 76.318 76.318 76.318 76.318 73.9215 73.9215 73.9215 71.525 71.525 71.525 69.1286 69.1286 66.7321 66.7321 66.7321 66.7321 64.3356 64.3356 64.3356 61.9392 61.9392 61.9392 59.5428 59.5428 59.5428 59.5428 57.1463 57.1463 54.7498 54.7498 54.7498 54.7498 52.3534 49.9569 49.9569 49.9569 47.5604 45.164 45.164 45.164 42.7676 42.7676 42.7676 40.3711 40.3711 40.3711 40.3711 40.3711 40.3711 37.9746 37.9746 37.9746 37.9746 35.5782 35.5782 33.1817 33.1817 30.7853 30.7853 28.3888 25.9924 23.5959 23.5959 21.1994 18.803 16.4065 16.4065 14.0101 11.6136 11.6136 9.21714 6.82069 4.42423 4.42423 -0.368683 -0.368683 -2.76514 -2.76514 -5.1616 -7.55806 -9.9545 -9.9545 -12.351 -12.351 -14.7475 -14.7475 -14.7475 -17.1439 -17.1439 -17.1439 -17.1439 -19.5403 -19.5403 -21.9368 -21.9368 -21.9368 -21.9368 -21.9368 -24.3332 -21.9368 -24.3332 -24.3332 -24.3332 -26.7297 -26.7297 -29.1262 -29.1262 -29.1262 -29.1262 -31.5227 -31.5227 -31.5227 -31.5227 -33.9191 -33.9191 -33.9191 -33.9191 -36.3155 -36.3155 -36.3155 -36.3155 -36.3155 -36.3155 -36.3155 -36.3155 -38.712 -38.712 -38.712 -38.712 -38.712 -38.712 -38.712 -38.712 -38.712 -38.712 -38.712 -38.712 -38.712 -38.712 -38.712 -38.712 -38.712 -36.3155 -36.3155 -36.3155 -36.3155 -36.3155 -36.3155 -36.3155 -36.3155 -36.3155 -36.3155 -33.9191 -36.3155 -33.9191 -33.9191 -33.9191 -33.9191 -33.9191 -33.9191 -33.9191 -33.9191 -33.9191 -33.9191 -31.5227 -33.9191 -31.5227 -31.5227 -31.5227 -31.5227 -31.5227 -31.5227 -31.5227 -29.1262 -29.1262 -29.1262 -29.1262 -29.1262 -29.1262 -29.1262 -29.1262 -29.1262 -26.7297 -26.7297 -26.7297 -26.7297 -26.7297 -26.7297 -24.3332 -24.3332 -24.3332 -24.3332 -24.3332 -24.3332 -24.3332 -21.9368 -21.9368 -21.9368 -21.9368 -21.9368 -21.9368 -21.9368 -21.9368 -19.5403 -19.5403 -21.9368 -19.5403 -19.5403 -19.5403 -19.5403 -19.5403 -19.5403 -19.5403 -17.1439 -17.1439 -17.1439 -17.1439 -17.1439 -14.7475 -14.7475 -14.7475 -14.7475 -14.7475 -14.7475 -12.351 -12.351 -12.351 -12.351 -12.351 -9.9545 -9.9545 -9.9545 -9.9545 -9.9545 -7.55806 -7.55806 -7.55806 -7.55806 -7.55806 -7.55806 -5.1616 -5.1616 -5.1616 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -0.368683 -0.368683 -0.368683 2.02778 2.02778 2.02778 2.02778 2.02778 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 6.82069 6.82069 6.82069 6.82069 9.21714 9.21714 9.21714 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 16.4065 14.0101 16.4065 16.4065 16.4065 16.4065 16.4065 16.4065 16.4065 16.4065 18.803 18.803 18.803 18.803 18.803 18.803 18.803 18.803 18.803 18.803 18.803 18.803 18.803 18.803 21.1994 21.1994 21.1994 21.1994 21.1994 21.1994 21.1994 21.1994 21.1994 21.1994 21.1994 21.1994 21.1994 21.1994 23.5959 21.1994 23.5959 23.5959 23.5959 21.1994 23.5959 23.5959 23.5959 23.5959 21.1994 23.5959 21.1994 23.5959 23.5959 23.5959 21.1994 23.5959 21.1994 21.1994 21.1994 21.1994 21.1994 21.1994 18.803 18.803 18.803 18.803 21.1994 21.1994 21.1994 18.803 18.803 18.803 18.803 18.803 18.803 18.803 18.803 18.803 18.803 18.803 18.803 18.803 18.803 16.4065 18.803 18.803 18.803 16.4065 18.803 16.4065 16.4065 16.4065 16.4065 16.4065 16.4065 16.4065 16.4065 16.4065 16.4065 16.4065 16.4065 16.4065 16.4065 16.4065 16.4065 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 16.4065 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 6.82069 9.21714 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 9.21714 9.21714 6.82069 9.21714 6.82069 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 4.42423 4.42423 4.42423 6.82069 6.82069 6.82069 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 4.42423 4.42423 4.42423 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 4.42423 4.42423 4.42423 4.42423 6.82069 4.42423 6.82069 6.82069 6.82069 6.82069 6.82069 4.42423 6.82069 6.82069 6.82069 6.82069 6.82069 4.42423 4.42423 6.82069 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 4.42423 4.42423 4.42423 2.02778 2.02778 4.42423 2.02778 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 2.02778 4.42423 2.02778 4.42423 2.02778 4.42423 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 -0.368683 2.02778 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -2.76514 -0.368683 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -0.368683 -2.76514 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 4.42423 2.02778 4.42423 4.42423 4.42423 4.42423 2.02778 4.42423 4.42423 4.42423 2.02778 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 9.21714 6.82069 6.82069 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 11.6136 9.21714 9.21714 11.6136 11.6136 11.6136 9.21714 9.21714 9.21714 11.6136 9.21714 9.21714 11.6136 11.6136 9.21714 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 16.4065 14.0101 14.0101 14.0101 16.4065 14.0101 14.0101 14.0101 14.0101 14.0101 16.4065 16.4065 16.4065 16.4065 16.4065 16.4065 16.4065 14.0101 16.4065 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 14.0101 11.6136 14.0101 11.6136 14.0101 11.6136 14.0101 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 14.0101 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 11.6136 9.21714 11.6136 11.6136 9.21714 9.21714 9.21714 11.6136 11.6136 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 11.6136 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 9.21714 6.82069 9.21714 6.82069 6.82069 6.82069 9.21714 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 9.21714 6.82069 6.82069 9.21714 9.21714 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 6.82069 4.42423 6.82069 6.82069 6.82069 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 4.42423 2.02778 2.02778 2.02778 4.42423 2.02778 2.02778 4.42423 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 -0.368683 -0.368683 2.02778 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -5.1616 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -5.1616 -2.76514 -2.76514 -5.1616 -2.76514 -5.1616 -2.76514 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -5.1616 -2.76514 -2.76514 -5.1616 -5.1616 -5.1616 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -2.76514 -0.368683 -2.76514 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 -0.368683 2.02778 -0.368683 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 4.42423 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 4.42423 2.02778 2.02778 2.02778 2.02778 2.02778 4.42423 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778 2.02778</A_FLOAT64>
+      </Values>
+      <Id>9</Id>
+      <Name>CHANNEL02</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <RawDatatype>DT_DOUBLE</RawDatatype>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>2</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>explicit</SequenceRepresentation>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <Values>
+        <A_FLOAT64>-0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.772695 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.386347 -0.386347 -0.386347 -0.579521 -0.579521 -0.579521 -0.386347 -0.386347 -0.386347 -0.579521 -0.386347 -0.386347 -0.386347 -0.579521 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.579521 -0.386347 -0.386347 -0.579521 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.579521 -0.386347 -0.386347 -0.386347 -0.386347 -0.579521 -0.386347 -0.386347 -0.386347 -0.386347 -0.579521 -0.579521 -0.579521 -0.579521 -0.386347 -0.579521 -0.579521 -0.386347 -0.386347 -0.579521 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.579521 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.579521 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.193173 -0.386347 -0.193173 -0.193173 -0.193173 -0.386347 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 8.9407E-8 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 -0.193173 8.9407E-8 8.9407E-8 8.9407E-8 -0.193173 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 -0.193173 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 -0.193173 8.9407E-8 8.9407E-8 8.9407E-8 -0.193173 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 -0.193173 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 -0.193173 8.9407E-8 -0.193173 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 -0.193173 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 8.9407E-8 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.193173 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.386347 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.772695 -0.772695 -0.772695 -0.579521 -0.579521 -0.772695 -0.772695 -0.772695 -0.772695 -0.772695 -0.772695 -0.772695 -0.772695 -0.772695 -0.965869 -0.772695 -0.772695 -0.772695 -0.772695 -0.772695 -0.965869 -0.965869 -0.772695 -0.772695 -0.772695 -0.772695 -0.772695 -0.772695 -0.772695 -0.772695 -0.772695 -0.579521 -0.579521 -0.579521 -0.579521 -0.579521 -0.386347 -0.386347 -0.386347 -0.386347 -0.579521 -0.579521 -0.386347 -0.386347 -0.386347 -0.193173 -0.193173 -0.386347 -0.965869 -1.54539 -1.93174 -2.12491 -2.12491 -2.12491 -2.31809 -2.89761 -3.09078 -3.09078 -3.28395 -3.47713 -3.47713 -3.47713 -3.47713 -3.28395 -3.47713 -3.86348 -4.443 -5.21569 -6.18156 -7.14743 -7.92013 -8.69282 -9.46552 -9.65869 -9.85186 -9.85186 -10.045 -10.045 -9.85186 -9.07917 -8.49965 -7.92013 -7.53378 -7.14743 -6.95426 -6.76108 -6.76108 -6.95426 -7.3406 -7.92013 -8.49965 -9.07917 -9.65869 -10.2382 -10.8177 -11.2041 -11.3973 -11.5904 -11.7836 -11.9768 -12.1699 -12.3631 -12.5563 -12.5563 -12.5563 -12.5563 -12.5563 -12.5563 -12.5563 -12.5563 -12.7495 -12.7495 -12.7495 -12.7495 -12.9426 -12.9426 -12.9426 -13.1358 -13.329 -13.329 -13.5222 -13.7153 -13.9085 -14.1017 -14.2949 -14.2949 -14.6812 -14.8744 -15.2607 -15.4539 -15.4539 -15.0676 -14.488 -14.1017 -13.7153 -13.5222 -13.7153 -14.1017 -15.0676 -15.4539 -14.8744 -13.5222 -11.7836 -10.2382 -9.27234 -8.49965 -7.53378 -6.56791 -5.60204 -5.02252 -4.82934 -4.63617 -4.443 -3.6703 -2.70443 -1.73856 -0.579521 0.386348 0.965869 1.54539 1.93174 1.93174 1.73856 1.35222 0.772695 0.386348 8.9407E-8 -0.193173 8.9407E-8 0.193174 0.772695 1.54539 2.12491 2.70443 3.09078 3.28395 3.47713 3.47713 3.86348 4.05665 4.443 4.443 4.63617 4.63617 4.82935 4.82935 5.02252 5.40887 5.79521 6.18156 6.56791 6.95426 7.3406 7.53378 7.72695 7.92013 8.1133 8.30647 8.49965 8.69282 8.88599 9.07917 9.65869 10.045 10.6246 11.0109 11.3973 11.9768 12.3631 12.9426 13.5222 13.9085 14.488 15.0676 15.6471 16.2266 16.8061 17.5788 18.1583 19.1242 19.8969 20.4764 21.2491 22.0218 22.9877 23.9536 24.9194 25.6921 26.4648 27.0443 28.0102 28.5897 29.1692 29.9419 30.9078 32.26 33.2259 34.1918 34.9645 35.9303 36.5098 36.8962 37.0894 37.4757 37.6689 38.0552 38.0552 38.2484 38.4416 38.4416 38.2484 38.0552 37.6689 37.4757 37.2825 37.2825 37.4757 37.6689 37.6689 38.0552 38.4416 38.8279 39.0211 39.2143 39.4075 39.6006 39.6006 39.7938 39.987 40.3733 40.9528 41.3392 41.3392 41.5324 41.3392 40.9528 40.1801 39.6006 39.2143 38.6348 37.8621 37.2825 36.703 36.5098 36.1235 35.7372 35.1576 34.5781 33.9986 33.6122 33.2259 32.6464 32.0668 31.101 30.3283 29.5556 28.7829 28.0102 27.0443 26.0785 25.3058 24.5331 23.9536 23.5672 22.9877 22.6013 22.215 21.6355 21.2491 20.6696 20.2832 19.7037 19.3174 18.5447 17.9652 17.3856 16.9993 16.4198 15.8403 15.6471 15.0676 14.2949 13.329 11.9768 10.8177 9.46552 8.30647 7.53378 6.95426 6.37473 6.18156 6.18156 5.98839 5.79521 5.79521 5.98839 6.76108 7.53378 8.30647 8.88599 9.27234 9.27234 9.27234 9.07917 8.88599 8.69282 8.1133 7.53378 6.76108 5.79521 4.24982 3.09078 1.73856 0.193174 -1.15904 -2.70443 -3.86348 -4.82934 -5.60204 -6.56791 -7.72695 -9.27234 -10.8177 -9.46552 -6.76108 -5.79521 -5.60204 -5.21569 -4.82934 -4.63617 -4.63617 -4.63617 -4.82934 -5.02252 -5.21569 -5.40887 -5.60204 -5.79521 -5.79521 -5.60204 -5.02252 -5.02252 -5.02252 -3.86348 -4.443 -11.3973 -15.2607 -6.76108 1.93174 4.24982 4.24982 4.24982 4.443 4.82935 5.60204 6.37473 7.14743 7.92013 8.69282 9.46552 10.045 10.8177 11.7836 12.9426 13.7153 14.488 15.4539 16.6129 17.3856 17.772 17.9652 17.5788 16.6129 15.2607 13.5222 11.5904 9.46552 7.14743 4.63617 2.31809 8.9407E-8 -2.31809 -4.24982 -5.98839 -7.53378 -9.07917 -10.4314 -11.9768 -13.1358 -14.2949 -14.8744 -15.2607 -15.0676 -14.8744 -14.2949 -13.5222 -12.5563 -11.5904 -10.6246 -9.46552 -8.30647 -7.3406 -6.18156 -5.21569 -4.24982 -3.28395 -2.51126 -1.54539 -0.386347 0.579521 1.54539 2.51126 3.28395 4.05665 4.82935 5.79521 6.56791 6.95426 7.3406 7.72695 7.92013 8.30647 8.69282 8.88599 9.27234 9.46552 9.46552 9.65869 9.46552 9.65869 9.85186 10.2382 10.6246 11.0109 11.2041 11.2041 11.3973 11.5904 11.7836 11.9768 11.9768 11.9768 11.7836 11.5904 11.0109 10.6246 9.85186 9.27234 8.49965 7.72695 6.95426 6.76108 6.37473 6.37473 6.37473 6.37473 6.18156 5.79521 5.40887 5.21569 5.21569 5.21569 5.21569 5.21569 5.21569 5.02252 5.02252 4.82935 4.82935 4.82935 5.21569 5.40887 5.79521 6.37473 7.14743 8.1133 9.07917 9.85186 10.4314 11.3973 12.5563 13.9085 15.4539 16.6129 17.772 18.931 19.3174 19.7037 20.0901 20.8628 21.6355 22.6013 23.7604 25.1126 26.4648 28.0102 29.5556 31.101 32.8395 34.3849 35.9303 37.4757 38.6348 39.7938 40.5665 40.9528 40.9528 41.5324 42.6914 44.2368 45.9754 48.1003 49.8388 51.3842 52.9296 55.0545 56.9863 57.759 57.5658 57.1794 56.4067 55.634 54.6682 53.8955 53.5091 53.316 53.316 53.7023 54.2818 55.0545 55.8272 56.9863 58.3385 60.077 61.8156 63.9405 65.8723 68.1903 70.5084 73.0197 75.5309 78.0422 80.7466 83.4511 86.1555 88.6668 91.178 93.4961 95.621 97.9391 99.8708 101.803 103.541 105.087 106.439 107.405 108.37 109.143 109.723 110.302 110.882 111.461 112.234 112.813 113.393 114.166 114.938 115.711 116.484 117.45 118.416 119.188 119.768 120.347 120.734 121.12 121.506 121.893 122.279 122.665 122.859 122.859 122.472 121.893 121.12 120.154 119.381 118.802 118.222 117.836 117.45 117.257 117.063 116.87 116.677 116.87 117.257 117.643 118.222 118.802 119.575 120.154 120.734 121.313 121.699 122.086 122.086 122.279 122.086 122.279 122.279 122.279 122.665 123.052 123.438 124.211 124.983 126.142 127.108 128.074 129.04 130.006 130.972 131.938 133.097 134.063 135.222 136.188 136.767 137.153 137.733 138.312 138.506 138.312 138.506 138.506 138.312 138.119 137.926 137.926 137.926 137.54 137.153 136.96 136.96 136.767 136.574 136.574 136.767 136.96 137.153 137.347 137.54 137.926 138.119 138.119 138.312 138.312 138.506 138.699 138.892 138.892 139.085 139.278 139.471 139.665 139.858 140.051 140.051 140.051 139.858 139.858 139.665 139.858 139.665 139.665 139.665 139.665 139.665 139.665 139.471 139.278 139.085 138.892 138.506 138.312 137.733 137.347 136.767 135.994 135.415 134.642 133.676 132.71 131.358 130.199 128.847 127.495 125.949 124.79 123.824 122.859 122.086 121.313 120.54 119.768 118.802 117.643 116.484 115.325 114.359 113.2 112.041 111.075 109.916 108.95 107.984 106.825 105.859 104.893 103.927 102.962 101.996 101.223 100.45 99.4845 98.7118 97.9391 97.1664 96.3937 95.4279 94.6552 93.8825 92.9166 91.9507 90.9849 90.019 88.8599 87.8941 86.735 85.7692 84.6101 83.4511 82.292 81.3262 80.1671 79.0081 78.0422 76.8832 75.9173 74.9514 74.1787 73.406 72.6333 71.8606 71.088 70.3153 69.5426 68.5767 67.804 67.0313 66.0654 65.0996 64.1337 63.1678 62.202 61.2361 60.4634 59.4975 58.5317 57.5658 56.7931 55.8272 55.0545 54.2818 53.7023 52.9296 52.3501 51.7706 51.1911 50.6115 50.2252 49.6457 49.0661 48.6798 48.1003 47.7139 47.3276 46.7481 46.3617 45.7822 45.3958 45.0095 44.6231 44.0436 43.6573 43.2709 42.8846 42.4982 42.1119 41.9187 41.5324 41.146 40.7597 40.3733 40.1801 39.7938 39.6006 39.2143 39.0211 38.8279 38.6348 38.4416 38.2484 38.0552 37.8621 37.6689 37.6689 37.4757 37.2825 37.0894 37.0894 36.8962 36.703 36.5098 36.5098 36.5098 36.5098 36.5098 36.703 36.703 36.8962 36.8962 37.0894 37.0894 37.2825 37.4757 37.6689 37.6689 37.6689 37.6689 37.6689 37.6689 37.8621 37.8621 37.6689 37.6689 37.6689 37.4757 37.4757 37.4757 37.4757 37.2825 37.2825 37.2825 37.2825 37.0894 37.0894 36.8962 36.8962 36.703 36.5098 36.5098 36.3167 36.3167 36.1235 36.1235 36.1235 35.9303 35.9303 35.9303 35.9303 35.7372 35.7372 35.7372 35.544 35.544 35.3508 35.1576 35.1576 34.9645 34.9645 34.7713 34.5781 34.5781 34.3849 34.1918 33.9986 33.9986 33.8054 33.6122 33.4191 33.2259 33.0327 32.8395 32.6464 32.4532 32.0668 31.8737 31.6805 31.6805 31.2942 31.101 30.9078 30.5215 30.3283 30.1351 29.9419 29.7488 29.3624 29.1692 28.9761 28.5897 28.3965 28.2034 28.0102 27.6239 27.2375 26.8512 26.658 26.4648 26.2716 25.8853 25.6921 25.4989 25.1126 24.7262 24.5331 24.5331 24.1467 23.5672 22.9877 22.6013 22.215 22.0218 21.6355 21.4423 21.0559 20.6696 20.4764 20.0901 19.7037 19.5106 19.1242 18.931 18.5447 18.1583 17.772 17.5788 17.1925 16.9993 16.8061 16.4198 16.0334 15.6471 15.4539 15.0676 14.6812 14.488 14.2949 13.9085 13.7153 13.5222 13.1358 12.9426 12.7495 12.5563 12.3631 12.1699 11.9768 11.7836 11.7836 11.5904 11.3973 11.3973 11.2041 11.0109 11.0109 10.8177 10.8177 10.6246 10.4314 10.4314 10.2382 10.2382 10.045 10.045 9.85186 9.85186 9.65869 9.46552 9.27234 9.27234 9.07917 9.07917 8.88599 8.88599 8.69282 8.49965 8.30647 8.30647 8.1133 7.92013 7.92013 7.53378 7.53378 7.53378 7.53378 7.3406 7.14743 7.14743 7.14743 6.95426 6.76108 6.76108 6.56791 6.56791 6.56791 6.37473 6.37473 6.37473 6.18156 6.18156 5.98839 5.98839 5.98839 5.98839 5.98839 5.98839 5.98839 5.98839 5.98839 5.98839 5.79521 5.79521 5.79521 5.79521 5.60204 5.60204 5.79521 5.79521 5.79521 5.98839 5.98839 6.18156 6.18156 6.37473 6.37473 6.37473 6.56791 6.56791 6.56791 6.76108 6.76108 6.76108 6.76108 6.95426 6.95426 6.76108 6.76108 6.76108 6.56791 6.76108 6.76108 6.76108 6.76108 6.76108 6.76108 6.76108 6.76108 6.76108 6.76108 6.76108 6.76108 6.76108 6.76108 6.76108 6.76108 6.76108 6.76108 6.76108 6.76108 6.76108 6.76108 6.76108 6.76108 6.76108 6.56791 6.56791 6.56791 6.56791 6.37473 6.37473 6.37473 6.18156 6.18156 5.98839 5.98839 5.79521 5.79521 5.60204 5.60204 5.40887 5.40887 5.40887 5.40887 5.21569 5.21569 5.02252 5.02252 5.02252 5.02252 5.02252 4.82935 4.82935 4.63617 4.63617 4.63617 4.443 4.443 4.24982 4.24982 4.24982 4.05665 3.86348 3.86348 4.05665 3.86348 3.86348 3.6703 3.6703 3.6703 3.6703 3.6703 3.47713 3.47713 3.47713 3.47713 3.47713 3.47713 3.47713 3.47713 3.47713 3.28395 3.28395 3.47713 3.47713 3.28395 3.47713 3.28395 3.28395 3.28395 3.28395 3.28395 3.47713 3.28395 3.28395 3.28395 3.28395 3.28395 3.28395 3.28395 3.28395 3.28395 3.28395 3.28395 3.28395 3.28395 3.28395 3.28395 3.28395 3.09078 3.28395 3.28395 3.28395 3.28395 3.47713 3.47713 3.47713 3.6703 3.6703 3.6703 3.86348 3.86348 3.86348 4.05665 4.05665 4.05665 4.05665 4.05665 4.24982 4.24982 4.24982 4.24982 4.24982 4.443 4.443 4.443 4.443 4.443 4.443 4.443 4.63617 4.63617 4.63617 4.63617 4.63617 4.82935 4.82935 5.02252 5.21569 5.21569 5.40887 5.60204 5.60204 5.79521 5.98839 6.18156 6.18156 6.37473 6.56791 6.56791 6.76108 6.95426 7.14743 7.3406 7.3406 7.53378 7.72695 7.92013 7.92013 8.1133 8.1133 8.1133 8.30647 8.49965 8.49965 8.69282 8.69282 8.88599 8.88599 9.07917 9.07917 9.27234 9.27234 9.27234 9.46552 9.46552 9.65869 9.65869 9.85186 9.85186 9.85186 9.85186 9.85186 10.045 10.045 10.2382 10.4314 10.2382 10.4314 10.4314 10.6246 10.6246 10.6246 10.8177 10.8177 11.0109 11.0109 11.2041 11.2041 11.3973 11.3973 11.3973 11.5904 11.5904 11.5904 11.7836 11.9768 11.9768 11.9768 11.9768 12.1699 12.1699 12.1699 12.1699 12.3631 12.3631 12.3631 12.3631 12.3631 12.5563 12.7495 12.9426 13.1358 13.329 13.5222 13.5222 13.5222 13.5222 13.329 13.329 13.329 13.329 13.329 13.329 13.329 13.329 13.329 13.329 13.329 13.5222 13.7153 13.9085 14.1017 14.2949 14.2949 14.2949 14.2949 14.2949 14.2949 14.2949 14.488 14.6812 14.8744 15.2607 15.4539 15.8403 16.0334 16.2266 16.2266 16.2266 16.0334 15.8403 15.8403 15.6471 15.4539 15.2607 15.0676 15.0676 15.0676 15.2607 15.6471 15.8403 16.2266 16.4198 16.6129 16.9993 17.1925 17.5788 17.772 17.772 17.9652 17.9652 17.9652 17.9652 17.9652 17.9652 17.9652 17.9652 17.9652 17.9652 18.1583 18.3515 18.5447 18.5447 18.7379 18.931 19.1242 19.1242 19.3174 19.3174 19.3174 19.3174 19.3174 19.5106 19.5106 19.5106 19.5106 19.7037 19.7037 19.7037 19.7037 19.8969 19.8969 19.8969 19.8969 19.8969 19.8969 19.8969 20.0901 20.0901 20.0901 20.0901 20.2832 20.2832 20.2832 20.4764 20.4764 20.4764 20.6696 20.6696 20.8628 20.8628 20.8628 21.0559 21.0559 21.0559 21.0559 21.0559 21.2491 21.2491 21.2491 21.2491 21.2491 21.2491 21.2491 21.2491 21.2491 21.0559 21.0559 21.0559 21.0559 21.0559 21.0559 20.8628 20.8628 20.8628 20.6696 20.6696 20.6696 20.4764 20.4764 20.2832 20.2832 20.2832 20.0901 20.0901 19.8969 19.8969 19.8969 19.7037 19.7037 19.7037 19.7037 19.7037 19.5106 19.5106 19.5106 19.5106 19.3174 19.3174 19.1242 19.1242 19.1242 19.1242 19.1242 19.1242 19.1242 19.1242 18.931 19.1242 19.1242 19.1242 19.3174 19.3174 19.3174 19.3174 19.3174 19.3174 19.3174 19.5106 19.5106 19.5106 19.5106 19.5106 19.5106 19.5106 19.7037 19.7037 19.7037 19.7037 19.7037 19.7037 19.7037 19.7037 19.8969 19.8969 19.8969 19.8969 19.8969 19.8969 19.8969 19.8969 19.7037 19.7037 19.8969 19.8969 19.8969 19.8969 19.8969 19.8969 19.7037 19.7037 19.7037 19.8969 19.8969 19.8969 19.8969 19.8969 19.8969 19.8969 19.8969 19.8969 19.8969 19.7037 19.7037 19.8969 19.8969 19.7037 19.8969 19.8969 19.8969 19.8969 19.7037 19.7037 19.7037 19.7037 19.7037 19.7037 19.7037 19.7037 19.5106 19.5106 19.5106 19.5106 19.5106 19.3174 19.3174 19.3174 19.3174 19.3174 19.3174 19.3174 19.3174 19.3174 19.1242 19.1242 19.1242 19.1242 19.1242 19.1242 19.1242 19.1242 18.931 19.1242 19.1242 18.931 18.931 18.931 18.931 18.931 18.931 18.7379 18.7379 18.7379 18.5447 18.5447 18.5447 18.5447 18.5447 18.3515 18.3515 18.3515 18.3515 18.3515 18.1583 18.1583 17.9652 17.9652 17.772 17.772 17.5788 17.5788 17.5788 17.5788 17.5788 17.5788 17.3856 17.1925 16.9993 16.9993 16.8061 16.8061 16.8061 16.8061 16.8061 16.8061 16.8061 16.8061 16.6129 16.6129 16.4198 16.4198 16.4198 16.4198 16.4198 16.4198 16.2266 16.2266 16.2266 16.0334 16.0334 16.0334 16.0334 15.8403 15.8403 15.8403 15.8403 15.6471 15.6471 15.6471 15.4539 15.4539 15.4539 15.4539 15.4539 15.2607 15.2607 15.2607 15.2607 15.0676 15.0676 15.0676 15.0676 15.0676 15.0676 15.0676 14.8744 14.8744 14.8744 14.8744 14.8744 14.8744 14.8744 14.8744 14.8744 14.8744 14.8744 14.8744 14.8744 14.8744 14.8744 14.8744 14.8744 14.8744 14.8744 14.8744 15.0676 15.0676 15.0676 15.2607 15.2607 15.0676 15.0676 15.0676 15.0676 15.2607 15.4539 15.6471 15.8403 15.8403 15.8403 15.8403 15.8403 15.8403 15.8403 15.8403 15.8403 15.8403 15.6471 15.6471 15.6471 15.6471 15.6471 15.6471 15.6471 15.6471 15.8403 15.8403 15.6471 15.8403 15.8403 16.0334 16.2266 16.2266 16.4198 16.4198 16.4198 16.4198 16.6129 16.6129 16.6129 16.8061 16.8061 16.9993 16.9993 17.1925 17.1925 17.3856 17.5788 17.5788 17.772 17.9652 17.9652 18.1583 18.1583 18.1583 18.1583 18.3515 18.3515 18.5447 18.5447 18.5447 18.5447 18.5447 18.5447 18.5447 18.5447 18.5447 18.5447 18.5447 18.7379 18.7379 18.7379 18.5447 18.5447 18.7379 18.7379 18.7379 18.7379 18.7379 18.7379 18.7379 18.7379 18.7379 18.931 18.931 18.931 18.931 18.931 19.1242 19.1242 19.1242 19.3174 19.1242 19.1242 19.3174 19.3174 19.5106 19.5106 19.5106 19.5106 19.5106 19.7037 19.8969 19.8969 19.8969 19.8969 19.8969 20.0901 20.2832 20.2832 20.2832 20.2832 20.4764 20.4764 20.4764 20.6696 20.6696 20.6696 20.6696 20.6696 20.8628 21.0559 20.8628 21.0559 21.0559 21.0559 21.0559 21.0559 21.2491 21.2491 21.2491 21.2491 21.2491 21.2491 21.2491 21.2491 21.2491 21.2491 21.2491 21.2491 21.2491 21.2491 21.2491 21.4423 21.4423 21.4423 21.4423 21.4423 21.4423 21.6355 21.6355 21.6355 21.6355 21.8286 21.8286 21.8286 22.0218 22.0218 22.0218 21.8286 21.8286 22.0218 22.0218 22.0218 22.0218 22.0218 22.0218 22.0218 22.0218 22.0218 21.8286 21.8286 21.8286 21.8286 21.8286 21.8286 21.8286 21.8286 21.8286 22.0218 22.0218 22.0218 22.0218 21.8286 22.0218 22.0218 22.0218 22.0218 22.0218 22.0218 22.0218 22.0218 22.215 22.215 22.215 22.215 22.215 22.215 22.215 22.215 22.215 22.215 22.215 22.215 22.215 22.215 22.0218 22.0218 22.215 22.215 22.4082 22.4082 22.4082 22.4082 22.4082 22.4082 22.4082 22.4082 22.4082 22.4082 22.215 22.4082 22.4082 22.4082 22.4082 22.4082 22.4082 22.215 22.4082 22.4082 22.4082 22.4082 22.4082 22.4082 22.4082 22.6013 22.6013 22.6013 22.4082 22.4082 22.4082 22.4082 22.6013 22.4082 22.4082 22.6013 22.6013 22.6013 22.6013 22.4082 22.4082 22.4082 22.4082 22.4082 22.4082 22.4082 22.4082 22.4082 22.215 22.215 22.215 22.215 22.215 22.215 22.215 22.215 22.215 22.215 22.215 22.215 22.215 22.215 22.215 22.215 22.215 22.4082 22.4082 22.4082 22.6013 22.6013 22.6013 22.6013 22.6013 22.6013 22.6013 22.7945 22.6013 22.6013 22.7945 22.7945 22.7945 22.7945 22.7945 22.9877 22.7945 22.7945 22.9877 22.9877 22.9877 22.7945 22.7945 22.7945 22.9877 22.7945 22.7945 22.7945 22.9877 22.7945 22.7945 22.7945 22.7945 22.7945 22.7945 22.7945 22.7945 22.7945 22.7945 22.7945 22.7945 22.7945 22.7945 22.7945 22.7945 22.7945 22.7945 22.9877 22.9877 22.9877 22.9877 22.9877 22.9877 22.9877 22.9877 22.9877 23.1809 23.1809 23.1809 23.1809 23.1809 23.1809 22.9877 23.1809 23.1809 23.1809 23.1809 23.1809 23.374 23.374 23.374 23.1809 23.1809 23.1809 23.374 23.374 23.374 23.374 23.1809 23.1809 23.1809 23.1809 23.1809 23.1809 23.374 23.1809 23.1809 23.374 23.1809 23.1809 23.1809 23.1809 23.374 23.374 23.374 23.374 23.5672 23.5672 23.5672 23.5672 23.5672 23.5672 23.5672 23.5672 23.7604 23.7604 23.7604 23.7604 23.7604 23.7604 23.7604 23.5672 23.5672 23.5672 23.5672 23.5672 23.5672 23.5672 23.5672 23.5672 23.5672 23.5672 23.5672 23.5672 23.5672 23.374 23.374 23.374 23.374 23.374 23.5672 23.5672 23.374 23.374 23.374 23.374 23.374 23.374 23.374 23.374 23.374 23.374 23.374 23.5672 23.5672 23.5672 23.5672 23.5672 23.5672 23.7604 23.7604 23.7604 23.7604 23.7604 23.7604 23.7604 23.7604 23.7604 23.7604 23.7604 23.7604 23.5672 23.5672 23.5672 23.5672 23.5672 23.374 23.374 23.374 23.374 23.374 23.374 23.374 23.374 23.374 23.374 23.1809 23.1809 23.1809 23.1809 23.1809 22.9877 22.9877 23.1809 22.9877 22.9877 22.9877 22.9877 22.9877 22.9877 22.9877 22.9877 22.9877 22.9877 22.9877 22.7945 22.7945 22.7945 22.7945 22.6013 22.6013 22.7945 22.7945 22.7945 22.6013 22.6013 22.6013 22.4082 22.4082 22.4082 22.4082 22.215 22.215 22.215 22.0218 22.0218 22.0218 22.0218 21.8286 21.8286 21.8286 21.6355 21.6355 21.6355 21.6355 21.6355 21.4423 21.4423 21.2491 21.0559 21.0559 21.0559 21.0559 20.8628 20.8628 20.8628 20.6696 20.6696 20.6696 20.4764 20.4764 20.2832 20.2832 20.2832 20.2832 20.2832 20.0901 20.0901 19.8969 19.8969 19.8969 19.7037 19.7037 19.5106 19.5106 19.3174 19.3174 19.3174 19.1242 18.931 18.931 18.7379 18.7379 18.5447 18.5447 18.3515 18.3515 18.1583 18.1583 17.9652 17.772 17.772 17.5788 17.3856 17.3856 17.1925 17.1925 16.9993 16.9993 16.8061 16.8061 16.6129 16.6129 16.4198 16.2266 16.2266 16.0334 16.0334 15.8403 15.6471 15.6471 15.6471 15.4539 15.4539 15.2607 15.2607 15.0676 15.0676 14.8744 14.8744 14.6812 14.488 14.488 14.2949 14.2949 14.1017 14.1017 13.9085 13.9085 13.7153 13.7153 13.7153 13.5222 13.329 13.329 13.1358 13.1358 12.9426 12.7495 12.7495 12.7495 12.5563 12.5563 12.5563 12.3631 12.3631 12.3631 12.1699 12.1699 11.9768 11.9768 11.7836 11.7836 11.5904 11.5904 11.3973 11.3973 11.3973 11.3973 11.3973 11.2041 11.2041 11.0109 10.8177 10.8177 10.8177 10.6246 10.6246 10.4314 10.4314 10.4314 10.4314 10.2382 10.2382 10.2382 10.045 10.045 10.045 10.045 9.85186 9.85186 9.85186 9.65869 9.65869 9.46552 9.46552</A_FLOAT64>
+      </Values>
+      <Id>10</Id>
+      <Name>CHANNEL09</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <RawDatatype>DT_DOUBLE</RawDatatype>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>9</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+    </LocalColumn>
+    <LocalColumn>
+      <SequenceRepresentation>explicit</SequenceRepresentation>
+      <Flags>15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15</Flags>
+      <Values>
+        <A_FLOAT64>0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.178524 0.371926 0.178524 0.371926 0.371926 0.178524 0.371926 0.178524 0.371926 0.178524 0.371926 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.371926 0.178524 0.178524 0.371926 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.371926 0.178524 0.178524 0.371926 0.178524 0.371926 0.178524 0.371926 0.178524 0.178524 0.371926 0.371926 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.371926 0.178524 0.371926 0.178524 0.371926 0.371926 0.178524 0.371926 0.178524 0.371926 0.178524 0.371926 0.371926 0.371926 0.371926 0.371926 0.178524 0.371926 0.178524 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.178524 0.371926 0.371926 0.371926 0.371926 0.178524 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.178524 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.178524 0.371926 0.371926 0.371926 0.178524 0.371926 0.178524 0.371926 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 -0.014877 0.178524 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.208278 -0.208278 -0.208278 -0.208278 -0.014877 -0.014877 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.401679 -0.208278 -0.401679 -0.208278 -0.208278 -0.208278 -0.401679 -0.401679 -0.401679 -0.401679 -0.208278 -0.401679 -0.401679 -0.208278 -0.208278 -0.208278 -0.401679 -0.401679 -0.208278 -0.208278 -0.401679 -0.401679 -0.401679 -0.401679 -0.401679 -0.208278 -0.401679 -0.401679 -0.208278 -0.208278 -0.208278 -0.401679 -0.208278 -0.208278 -0.401679 -0.401679 -0.401679 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.208278 -0.014877 -0.014877 -0.014877 -0.014877 -0.208278 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 0.178524 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 0.178524 0.178524 0.178524 -0.014877 0.178524 0.178524 -0.014877 0.178524 0.178524 -0.014877 0.178524 -0.014877 0.178524 0.178524 0.178524 -0.014877 0.178524 0.178524 -0.014877 0.178524 -0.014877 -0.014877 0.178524 -0.014877 0.178524 0.178524 -0.014877 0.178524 0.178524 0.178524 0.178524 -0.014877 -0.014877 0.178524 0.178524 0.178524 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 0.178524 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 -0.014877 0.178524 -0.014877 -0.014877 -0.014877 -0.014877 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.178524 0.371926 0.178524 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.371926 0.565327 0.565327 0.565327 0.565327 0.565327 0.565327 0.565327 0.565327 0.565327 0.565327 0.565327 0.565327 0.565327 0.758728 0.758728 0.758728 0.758728 0.758728 0.758728 0.758728 0.758728 0.952129 0.952129 0.758728 0.952129 0.952129 0.952129 0.952129 1.14553 0.952129 1.14553 1.14553 1.14553 1.14553 1.14553 1.14553 1.14553 1.33893 1.33893 1.33893 1.33893 1.53233 1.53233 1.53233 1.53233 1.72573 1.72573 1.72573 1.72573 1.91914 1.91914 1.91914 1.91914 1.91914 2.11254 2.11254 2.11254 2.11254 2.11254 2.30594 2.30594 2.30594 2.30594 2.49934 2.49934 2.49934 2.49934 2.69274 2.69274 2.69274 2.69274 2.69274 2.88614 2.69274 2.88614 2.88614 2.88614 2.88614 3.07954 3.07954 3.07954 3.07954 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.27294 3.46635 3.46635 3.65975 3.46635 3.46635 3.46635 3.65975 3.65975 3.65975 3.85315 3.85315 3.85315 4.04655 4.04655 4.23995 4.43335 4.62675 4.82015 4.82015 4.82015 5.01356 5.98056 7.52777 8.88158 10.2354 11.009 11.976 13.1364 14.1034 14.877 15.2638 15.2638 15.2638 16.0374 17.778 20.2923 23.1933 25.3207 26.2877 26.4811 26.6745 27.8349 29.3821 31.1227 32.4765 33.6369 34.7973 36.538 38.6654 40.5994 42.34 43.6938 44.6608 45.4344 45.6278 45.241 44.4674 43.1136 41.7598 40.406 39.2456 38.2786 37.3116 36.7314 36.1512 36.1512 36.538 37.3116 38.0852 38.8588 39.8258 40.9862 41.9532 42.9202 43.5004 44.0806 44.274 44.4674 44.4674 44.274 44.0806 43.6938 43.307 42.9202 42.5334 41.9532 41.373 40.9862 40.5994 40.5994 40.406 40.5994 40.5994 40.7928 40.9862 41.373 41.7598 42.34 42.7268 43.1136 43.5004 43.6938 43.8872 43.8872 44.0806 43.8872 43.8872 43.8872 43.8872 43.8872 43.5004 43.1136 42.5334 42.1466 41.7598 41.373 41.1796 40.7928 40.406 40.2126 40.2126 40.406 40.7928 41.1796 41.373 41.1796 40.9862 41.1796 41.5664 42.1466 42.5334 43.1136 44.0806 45.0476 45.8212 45.4344 43.6938 40.9862 37.3116 33.4435 29.9623 26.8679 24.5471 23.1933 22.8065 23.5801 25.3207 27.6415 30.3491 32.6699 34.6039 36.538 38.2786 39.439 40.2126 40.5994 40.406 40.0192 39.439 38.6654 37.6984 36.9248 36.1512 35.7644 35.5709 35.7644 36.3446 37.505 38.8588 40.2126 41.5664 42.9202 44.0806 45.0476 46.208 46.9816 47.7552 48.7222 49.4958 50.2694 51.043 51.8167 52.7837 53.7507 54.9111 56.2649 57.6187 58.9725 60.1329 61.2933 62.4537 63.4207 64.3877 65.3547 66.3217 67.2887 68.4492 69.6096 70.9634 72.5106 74.2512 75.9918 77.9258 79.8598 81.6004 83.1477 84.5015 85.6619 86.6289 87.0157 86.8223 86.0487 85.0817 84.1147 83.5345 83.3411 83.5345 83.9213 84.6949 86.0487 87.5959 89.1431 90.6903 92.0441 93.2045 94.3649 95.1385 95.5253 95.7187 95.7187 95.3319 95.1385 94.9451 94.5583 93.7847 93.0111 91.8507 90.8837 89.5299 88.3695 87.0157 85.6619 84.5015 83.5345 82.3741 81.407 80.44 79.473 78.506 77.3456 76.3786 75.7984 75.605 75.9918 76.572 77.1522 77.7324 78.3126 78.506 78.6994 78.3126 77.3456 76.1852 74.4446 72.704 70.77 68.6426 66.5151 64.0009 61.4867 58.9725 56.0715 53.3639 50.6562 48.142 45.8212 43.6938 41.7598 39.8258 38.2786 36.9248 35.7644 34.9907 34.0237 32.8633 31.5095 30.1557 28.6085 26.8679 24.9339 22.8065 20.6791 18.3582 16.0374 13.91 11.976 10.2354 8.68818 6.94757 5.59376 4.43335 3.85315 3.27294 3.27294 3.46635 3.85315 3.85315 3.46635 2.88614 2.69274 2.69274 2.69274 2.30594 1.91914 1.53233 1.14553 0.565327 -0.401679 -1.17528 -1.75549 -2.52909 -3.3027 -4.0763 -4.84991 -5.43011 -6.20372 -7.17072 -7.94433 -8.91133 -9.68494 -10.0717 -9.87834 -9.29814 -8.33113 -6.97732 -5.04331 -2.9159 -0.981883 0.758728 2.30594 3.46635 4.62675 5.78716 6.75417 7.72117 8.49478 8.88158 9.26838 9.46178 9.65519 9.65519 9.65519 9.46178 9.26838 9.07498 8.88158 8.88158 9.07498 9.26838 9.84859 10.6222 11.3958 12.3628 13.1364 13.91 14.4902 14.6836 14.4902 14.1034 13.3298 12.3628 11.2024 9.26838 7.14097 4.23995 1.14553 -2.52909 -6.20372 -9.87834 -13.3596 -16.6474 -19.9352 -23.223 -26.124 -29.0251 -31.7327 -34.4403 -36.9545 -39.0819 -41.2093 -42.7565 -43.917 -44.6906 -44.884 -44.4972 -43.5302 -42.1763 -40.8225 -39.0819 -37.3413 -35.6007 -33.4733 -31.7327 -29.7987 -27.8647 -25.9306 -24.19 -22.256 -20.5154 -18.7748 -17.2276 -15.6804 -14.52 -13.553 -12.7794 -12.1992 -12.0058 -11.8124 -11.8124 -11.4255 -11.0387 -10.4585 -9.87834 -9.68494 -9.87834 -10.0717 -10.4585 -10.8453 -11.4255 -11.619 -12.3926 -13.3596 -13.9398 -14.3266 -15.1002 -16.2606 -17.8078 -19.5484 -21.289 -23.0296 -24.5768 -25.9306 -27.4779 -29.0251 -30.1855 -31.1525 -31.9261 -32.3129 -32.6997 -33.0865 -33.2799 -33.2799 -33.0865 -32.8931 -32.8931 -33.0865 -33.0865 -33.2799 -33.2799 -33.2799 -33.0865 -33.0865 -33.2799 -33.6667 -34.0535 -34.2469 -34.8271 -35.2139 -35.6007 -35.7941 -35.7941 -35.6007 -35.4073 -35.2139 -35.0205 -34.8271 -34.6337 -34.4403 -34.2469 -33.8601 -33.4733 -33.2799 -33.0865 -32.8931 -32.8931 -33.0865 -33.2799 -33.2799 -33.0865 -32.8931 -32.3129 -31.5393 -30.5723 -29.4119 -28.2515 -27.2845 -25.5438 -22.4494 -18.5814 -14.3266 -9.87834 -5.81691 -2.33569 0.758728 3.27294 5.20696 7.33437 9.26838 11.009 11.976 12.5562 12.5562 11.7826 10.6222 9.07498 7.52777 5.98056 4.62675 3.65975 2.49934 1.33893 -0.014877 -1.94889 -4.2697 -6.01032 -6.78392 -7.17072 -7.55752 -7.94433 -7.94433 -6.97732 -4.46311 -1.56209 1.14553 3.07954 4.82015 6.56077 8.30138 9.46178 10.2354 11.009 11.7826 12.5562 13.1364 13.7166 14.1034 14.4902 14.877 15.0704 15.2638 15.4572 15.844 16.6176 17.1978 17.9714 18.5516 19.1318 19.5186 19.3252 18.9384 18.1648 17.0044 15.4572 13.91 12.1694 10.4288 8.49478 6.56077 4.43335 2.30594 0.178524 -2.33569 -4.84991 -7.55752 -10.2651 -13.1662 -16.0672 -19.1616 -22.0626 -25.157 -28.0581 -30.9591 -34.0535 -37.1479 -40.2423 -43.5302 -46.818 -50.2992 -53.7804 -57.455 -61.1297 -64.8043 -68.6723 -72.5403 -76.4084 -80.4698 -84.5312 -88.5927 -92.4607 -96.1353 -99.6165 -102.904 -105.999 -109.093 -112.188 -115.089 -118.183 -121.277 -124.178 -127.273 -130.174 -132.688 -134.816 -136.75 -138.49 -139.844 -141.198 -142.552 -143.905 -145.259 -146.42 -147.193 -147.58 -147.387 -146.613 -145.646 -144.486 -143.325 -142.358 -141.004 -139.651 -138.49 -137.33 -136.363 -135.202 -134.042 -132.882 -131.915 -131.334 -131.334 -131.334 -130.948 -129.787 -128.433 -127.466 -126.886 -126.693 -126.499 -126.112 -125.919 -126.112 -126.499 -126.499 -126.886 -127.273 -127.66 -127.466 -127.079 -127.079 -127.273 -127.273 -126.886 -126.886 -126.693 -126.693 -126.306 -125.726 -125.145 -124.372 -123.405 -122.244 -120.891 -119.73 -118.57 -117.216 -116.056 -115.089 -114.122 -113.155 -112.381 -111.414 -110.254 -109.093 -107.546 -106.192 -104.645 -103.098 -101.357 -100.003 -98.4561 -97.1023 -95.9419 -94.7815 -93.8145 -92.6541 -91.3003 -89.9465 -88.3992 -86.852 -85.3048 -83.7576 -82.2104 -80.6632 -78.9226 -77.3754 -75.6348 -73.7008 -71.9601 -70.0261 -68.4789 -66.7383 -65.1911 -63.8373 -62.4835 -61.1297 -60.1627 -59.5825 -59.1957 -58.8089 -58.6155 -58.0353 -57.455 -56.2946 -54.9408 -53.3936 -51.653 -49.9124 -48.1718 -46.6246 -45.2708 -44.1104 -42.95 -41.9829 -41.0159 -40.0489 -39.0819 -37.9215 -36.7611 -35.6007 -34.4403 -33.4733 -32.3129 -31.1525 -29.9921 -29.0251 -27.8647 -26.8976 -25.9306 -25.157 -24.5768 -23.9966 -23.6098 -23.0296 -22.256 -21.6758 -20.9022 -19.9352 -19.1616 -18.388 -17.8078 -17.6144 -17.421 -17.421 -17.421 -17.2276 -17.0342 -16.6474 -16.0672 -15.487 -14.9068 -14.3266 -13.7464 -13.1662 -12.586 -12.0058 -11.4255 -10.8453 -10.0717 -9.29814 -8.52453 -7.94433 -7.55752 -6.97732 -6.59052 -6.20372 -5.62351 -5.23671 -4.84991 -4.2697 -3.8829 -3.4961 -3.1093 -2.72249 -2.52909 -2.33569 -2.14229 -2.14229 -2.14229 -2.14229 -2.14229 -1.94889 -1.75549 -1.75549 -1.56209 -1.36869 -1.36869 -1.36869 -1.36869 -1.36869 -1.36869 -1.36869 -1.36869 -1.36869 -1.36869 -1.56209 -1.56209 -1.75549 -1.94889 -2.33569 -2.52909 -2.9159 -3.1093 -3.3027 -3.4961 -3.6895 -3.8829 -4.0763 -4.2697 -4.46311 -4.84991 -5.04331 -5.23671 -5.43011 -5.81691 -6.01032 -6.01032 -6.20372 -6.20372 -6.20372 -6.20372 -6.20372 -6.20372 -6.39712 -6.39712 -6.59052 -6.59052 -6.78392 -6.97732 -6.97732 -7.17072 -6.97732 -6.97732 -6.97732 -6.97732 -6.97732 -6.97732 -6.97732 -6.97732 -6.97732 -6.97732 -6.97732 -6.78392 -6.78392 -6.59052 -6.59052 -6.39712 -6.39712 -6.20372 -6.20372 -6.01032 -5.81691 -5.62351 -5.23671 -5.04331 -4.65651 -4.46311 -4.0763 -3.6895 -3.1093 -2.72249 -2.33569 -1.94889 -1.56209 -1.17528 -0.981883 -0.595081 -0.208278 -0.014877 0.371926 0.758728 0.952129 1.33893 1.53233 1.72573 1.91914 2.11254 2.30594 2.49934 2.69274 2.88614 2.88614 3.07954 3.27294 3.27294 3.46635 3.46635 3.65975 3.85315 3.85315 4.04655 4.23995 4.23995 4.43335 4.62675 4.82015 5.01356 5.01356 5.20696 5.40036 5.59376 5.59376 5.78716 5.78716 5.98056 5.98056 6.17396 6.17396 6.36736 6.36736 6.36736 6.36736 6.36736 6.36736 6.36736 6.36736 6.36736 6.36736 6.36736 6.36736 6.36736 6.36736 6.17396 6.17396 6.36736 6.36736 6.36736 6.17396 5.59376 5.20696 5.78716 6.36736 6.56077 6.75417 6.75417 6.94757 6.94757 6.75417 6.94757 6.94757 6.94757 6.94757 6.94757 6.94757 6.94757 6.94757 6.94757 6.94757 6.94757 6.75417 6.75417 6.75417 6.75417 6.75417 6.75417 6.56077 6.56077 6.56077 6.56077 6.56077 6.56077 6.36736 6.56077 6.56077 6.56077 6.36736 6.56077 6.36736 6.36736 6.36736 6.36736 6.36736 6.36736 6.17396 6.17396 6.17396 5.98056 5.98056 5.98056 5.98056 5.78716 5.78716 5.78716 5.78716 5.59376 5.78716 5.59376 5.59376 5.59376 5.59376 5.59376 5.59376 5.40036 5.40036 5.40036 5.40036 5.59376 5.59376 5.59376 5.59376 5.59376 5.59376 5.59376 5.59376 5.78716 5.59376 5.59376 5.78716 5.59376 5.59376 5.78716 5.78716 5.78716 5.78716 5.78716 5.78716 5.59376 5.78716 5.78716 5.78716 5.78716 5.59376 5.59376 5.59376 5.59376 5.59376 5.40036 5.40036 5.40036 5.40036 5.20696 5.20696 5.20696 5.01356 5.01356 5.01356 4.82015 4.82015 4.82015 4.62675 4.62675 4.62675 4.62675 4.62675 4.62675 4.62675 4.62675 4.43335 4.43335 4.43335 4.43335 4.43335 4.23995 4.23995 4.23995 4.23995 4.23995 4.04655 4.23995 4.04655 4.04655 4.04655 4.04655 3.85315 3.85315 3.85315 3.85315 3.85315 3.65975 3.65975 3.46635 3.46635 3.27294 3.27294 3.27294 3.27294 3.27294 3.07954 3.07954 3.07954 2.88614 2.88614 2.88614 2.69274 2.69274 2.69274 2.69274 2.69274 2.69274 2.69274 2.69274 2.69274 2.49934 2.49934 2.49934 2.49934 2.49934 2.49934 2.49934 2.49934 2.49934 2.30594 2.30594 2.30594 2.30594 2.30594 2.30594 2.30594 2.30594 2.30594 2.30594 2.30594 2.30594 2.30594 2.30594 2.11254 2.11254 2.11254 2.11254 2.11254 2.11254 1.91914 1.91914 1.72573 1.72573 1.72573 1.72573 1.53233 1.53233 1.53233 1.33893 1.14553 0.952129 0.758728 0.758728 0.371926 0.178524 -0.014877 -0.208278 -0.401679 -0.595081 -0.788482 -0.981883 -1.17528 -1.36869 -1.75549 -1.75549 -1.94889 -2.14229 -2.33569 -2.52909 -2.72249 -2.72249 -2.9159 -3.1093 -3.1093 -3.1093 -3.3027 -3.3027 -3.3027 -3.4961 -3.4961 -3.4961 -3.4961 -3.6895 -3.6895 -3.6895 -3.8829 -3.8829 -3.8829 -3.8829 -4.0763 -4.0763 -4.0763 -4.2697 -4.46311 -4.46311 -4.46311 -4.46311 -4.46311 -4.46311 -4.46311 -4.65651 -4.65651 -4.65651 -4.65651 -4.65651 -4.65651 -4.65651 -4.65651 -4.65651 -4.84991 -4.84991 -4.84991 -4.84991 -4.84991 -4.84991 -4.84991 -4.84991 -4.84991 -5.04331 -5.04331 -5.04331 -5.04331 -5.04331 -5.23671 -5.23671 -5.23671 -5.23671 -5.43011 -5.43011 -5.43011 -5.62351 -5.62351 -5.62351 -5.81691 -5.81691 -6.01032 -6.01032 -6.01032 -6.20372 -6.20372 -6.20372 -6.20372 -6.20372 -6.39712 -6.39712 -6.39712 -6.39712 -6.59052 -6.59052 -6.59052 -6.59052 -6.78392 -6.78392 -6.78392 -6.78392 -6.97732 -6.97732 -6.97732 -7.17072 -7.17072 -7.36412 -7.36412 -7.55752 -7.55752 -7.75093 -7.75093 -7.94433 -7.94433 -7.94433 -8.13773 -8.13773 -8.13773 -8.13773 -8.33113 -8.33113 -8.33113 -8.33113 -8.52453 -8.71793 -8.71793 -8.71793 -8.91133 -8.91133 -9.10473 -9.10473 -9.29814 -9.29814 -9.49154 -9.49154 -9.68494 -9.68494 -9.87834 -9.87834 -10.0717 -10.0717 -10.2651 -10.2651 -10.2651 -10.4585 -10.6519 -10.6519 -10.8453 -10.8453 -11.0387 -11.2321 -11.4255 -11.619 -11.8124 -12.0058 -12.3926 -12.7794 -13.1662 -13.7464 -14.52 -14.9068 -15.2936 -15.2936 -14.9068 -14.52 -13.7464 -12.9728 -12.0058 -11.0387 -10.0717 -9.10473 -7.94433 -7.17072 -6.59052 -6.39712 -6.39712 -6.59052 -6.97732 -7.55752 -8.33113 -9.10473 -10.0717 -10.8453 -11.4255 -12.1992 -12.7794 -13.1662 -13.553 -13.9398 -14.1332 -14.3266 -14.3266 -14.52 -14.52 -14.52 -14.52 -14.52 -14.3266 -14.1332 -14.1332 -13.9398 -13.7464 -13.7464 -13.7464 -13.7464 -13.7464 -13.7464 -13.7464 -13.7464 -13.9398 -13.9398 -14.1332 -14.3266 -14.1332 -14.1332 -14.3266 -14.3266 -14.3266 -14.3266 -14.52 -14.3266 -14.3266 -14.3266 -14.3266 -14.1332 -14.1332 -14.1332 -14.1332 -14.1332 -13.9398 -14.1332 -13.9398 -13.9398 -14.1332 -14.1332 -14.1332 -14.1332 -14.1332 -13.9398 -13.9398 -13.7464 -13.7464 -13.553 -13.3596 -13.3596 -13.1662 -12.9728 -12.7794 -12.586 -12.1992 -12.0058 -12.0058 -11.619 -11.619 -11.4255 -11.2321 -11.2321 -11.0387 -11.0387 -11.0387 -11.0387 -11.0387 -11.0387 -11.2321 -11.2321 -11.4255 -11.4255 -11.619 -11.619 -11.8124 -12.0058 -12.1992 -12.1992 -12.3926 -12.586 -12.7794 -12.7794 -12.9728 -12.9728 -13.1662 -13.1662 -13.1662 -13.1662 -13.1662 -13.1662 -13.1662 -13.1662 -13.1662 -12.9728 -12.9728 -12.9728 -12.9728 -12.7794 -12.7794 -12.7794 -12.7794 -12.586 -12.586 -12.586 -12.586 -12.586 -12.3926 -12.3926 -12.3926 -12.3926 -12.1992 -12.3926 -12.1992 -12.1992 -12.1992 -12.1992 -12.1992 -12.1992 -12.1992 -12.1992 -12.1992 -12.1992 -12.1992 -12.1992 -12.1992 -12.1992 -12.1992 -12.1992 -12.1992 -12.1992 -12.3926 -12.3926 -12.3926 -12.1992 -12.1992 -12.1992 -12.1992 -12.1992 -12.3926 -12.1992 -12.1992 -12.1992 -12.3926 -12.3926 -12.3926 -12.586 -12.586 -12.7794 -12.7794 -12.7794 -12.9728 -12.9728 -12.9728 -13.1662 -12.9728 -12.9728 -13.1662 -12.9728 -12.9728 -12.9728 -12.9728 -12.9728 -12.9728 -12.7794 -12.7794 -12.7794 -12.7794 -12.7794 -12.586 -12.586 -12.586 -12.586 -12.586 -12.3926 -12.3926 -12.3926 -12.3926 -12.3926 -12.1992 -12.1992 -12.1992 -12.1992 -12.0058 -12.0058 -12.0058 -12.1992 -12.1992 -12.0058 -12.0058 -12.0058 -12.0058 -12.0058 -12.0058 -12.0058 -11.8124 -11.8124 -11.8124 -11.619 -11.619 -11.619 -11.619 -11.4255 -11.4255 -11.4255 -11.2321 -11.2321 -11.2321 -11.0387 -11.0387 -11.0387 -11.0387 -11.0387 -11.0387 -10.8453 -10.8453 -10.8453 -10.8453 -10.6519 -10.6519 -10.6519 -10.6519 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.8453 -10.6519 -10.8453 -10.8453 -10.8453 -10.6519 -10.8453 -10.8453 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.8453 -10.8453 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.6519 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.2651 -10.2651 -10.2651 -10.2651 -10.0717 -9.87834 -9.87834 -9.87834 -9.87834 -9.68494 -9.68494 -9.68494 -9.68494 -9.49154 -9.49154 -9.49154 -9.49154 -9.49154 -9.49154 -9.49154 -9.49154 -9.49154 -9.49154 -9.49154 -9.49154 -9.49154 -9.68494 -9.68494 -9.68494 -9.49154 -9.68494 -9.68494 -9.49154 -9.49154 -9.68494 -9.68494 -9.68494 -9.49154 -9.49154 -9.49154 -9.49154 -9.49154 -9.68494 -9.68494 -9.68494 -9.68494 -9.68494 -9.49154 -9.49154 -9.68494 -9.68494 -9.68494 -9.68494 -9.49154 -9.49154 -9.29814 -9.29814 -9.29814 -9.29814 -9.29814 -9.29814 -9.29814 -9.29814 -9.29814 -9.49154 -9.49154 -9.49154 -9.49154 -9.49154 -9.49154 -9.68494 -9.68494 -9.49154 -9.49154 -9.49154 -9.29814 -9.29814 -9.29814 -9.29814 -9.29814 -9.29814 -9.10473 -9.10473 -8.91133 -9.10473 -9.10473 -9.10473 -9.29814 -9.29814 -9.29814 -9.49154 -9.49154 -9.49154 -9.49154 -9.68494 -9.68494 -9.87834 -9.87834 -9.87834 -10.0717 -10.0717 -10.0717 -10.2651 -10.2651 -10.2651 -10.2651 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.4585 -10.2651 -10.2651 -10.2651 -10.2651 -10.2651 -10.2651 -10.2651 -10.2651 -10.0717 -10.0717 -10.0717 -10.0717 -10.0717 -10.0717 -10.0717 -10.0717 -10.0717 -9.87834 -9.87834 -9.87834 -9.87834 -9.87834 -9.87834 -9.87834 -9.87834 -9.87834 -9.87834 -9.87834 -9.87834 -9.87834 -9.68494 -9.68494 -9.68494 -9.68494 -9.87834 -9.87834 -9.87834 -9.68494 -9.68494 -9.87834 -9.87834 -9.87834 -9.68494 -9.68494 -9.68494 -9.68494 -9.68494 -9.68494 -9.87834 -9.87834 -9.68494 -9.68494 -9.87834 -9.87834 -9.87834 -9.87834 -9.87834 -9.87834 -9.87834 -10.0717 -10.0717 -10.0717 -10.0717 -10.0717 -10.0717 -10.0717 -10.0717 -10.0717 -10.0717 -10.0717 -10.0717 -10.0717 -10.0717 -10.0717 -10.0717 -9.87834 -9.87834 -9.87834 -9.87834 -9.87834 -9.87834 -9.87834 -9.87834 -9.68494 -9.68494 -9.68494 -9.49154 -9.49154 -9.49154 -9.29814 -9.29814 -9.29814 -9.29814 -9.10473 -9.10473 -8.91133 -8.91133 -8.91133 -8.71793 -8.71793 -8.52453 -8.52453 -8.52453 -8.52453 -8.52453 -8.52453 -8.52453 -8.52453 -8.52453 -8.52453 -8.52453 -8.52453 -8.52453 -8.52453 -8.52453 -8.52453 -8.52453 -8.52453 -8.52453 -8.33113 -8.33113 -8.52453 -8.52453 -8.52453 -8.52453 -8.33113 -8.33113 -8.33113 -8.33113 -8.52453 -8.33113 -8.33113 -8.33113 -8.13773 -8.13773 -8.13773 -8.13773 -8.13773 -8.13773 -8.13773 -8.13773 -8.13773 -8.13773 -8.13773 -8.13773 -8.13773 -8.13773 -8.13773 -7.94433 -7.94433 -8.13773 -8.13773 -8.13773 -8.13773 -7.94433 -7.94433 -8.13773 -8.13773 -8.13773 -8.13773 -8.13773 -8.13773 -8.13773 -7.94433 -7.94433 -7.94433 -7.94433 -7.94433 -7.94433 -7.94433 -7.75093 -7.75093 -7.75093 -7.75093 -7.55752 -7.55752 -7.55752 -7.55752 -7.55752 -7.55752 -7.36412 -7.36412 -7.36412 -7.36412 -7.17072 -7.17072 -7.17072 -7.36412 -7.17072 -7.17072 -7.17072 -7.17072 -7.17072 -7.17072 -7.17072 -7.17072 -7.17072 -7.17072 -7.36412 -7.36412 -7.17072 -7.36412 -7.17072 -7.17072 -7.17072 -7.17072 -7.17072 -7.17072 -7.17072 -7.17072 -6.97732 -6.97732 -6.97732 -6.97732 -6.78392 -6.78392 -6.78392 -6.78392 -6.78392 -6.78392 -6.59052 -6.59052 -6.59052 -6.59052 -6.59052 -6.59052 -6.59052 -6.59052 -6.59052 -6.59052 -6.59052 -6.59052 -6.59052 -6.59052 -6.59052 -6.39712 -6.39712 -6.39712 -6.39712 -6.39712 -6.39712 -6.39712 -6.39712 -6.39712 -6.39712 -6.39712 -6.39712 -6.39712 -6.20372 -6.20372 -6.01032 -6.01032 -6.01032 -6.01032 -6.01032 -6.01032 -6.01032 -6.01032 -6.01032 -6.01032 -6.01032 -5.81691 -5.81691 -6.01032 -5.81691 -5.81691 -6.01032 -5.81691 -6.01032 -5.81691 -5.81691 -5.81691 -5.81691 -5.81691 -5.81691 -5.81691 -5.81691 -5.81691 -5.81691 -6.01032 -5.81691 -5.81691 -5.81691 -5.81691 -6.01032 -6.01032 -6.01032 -6.01032 -6.01032 -6.01032 -6.01032 -6.01032 -6.01032 -6.01032 -6.01032 -6.20372 -6.20372 -6.20372 -6.01032 -6.01032 -6.01032 -6.20372 -6.01032 -6.01032 -6.01032 -6.01032 -6.01032 -6.01032 -6.01032 -6.01032 -5.81691 -6.01032 -5.81691 -5.81691 -5.81691 -5.81691 -5.81691 -5.81691 -5.81691 -5.62351 -5.62351 -5.62351 -5.62351 -5.62351 -5.62351 -5.62351 -5.62351 -5.62351 -5.43011 -5.43011 -5.43011 -5.43011 -5.62351 -5.62351 -5.43011 -5.43011 -5.43011 -5.62351 -5.62351 -5.62351 -5.62351 -5.81691 -5.62351 -5.62351 -5.62351 -5.62351 -5.62351 -5.62351 -5.62351 -5.62351 -5.62351 -5.62351 -5.62351 -5.62351 -5.62351 -5.62351 -5.43011 -5.43011 -5.43011 -5.43011 -5.23671 -5.23671 -5.23671 -5.04331 -5.04331 -5.04331 -4.84991 -4.84991 -4.84991 -4.65651 -4.65651 -4.65651 -4.46311 -4.46311 -4.2697 -4.2697 -4.0763 -4.0763 -4.0763 -3.8829 -3.8829 -3.8829 -3.6895 -3.4961 -3.4961 -3.3027 -3.3027 -3.1093 -3.1093 -2.9159 -2.72249 -2.72249 -2.72249 -2.52909 -2.33569 -2.33569 -2.14229 -1.94889 -1.75549 -1.75549 -1.56209 -1.36869 -1.17528 -0.981883 -0.981883 -0.788482 -0.595081 -0.595081 -0.401679 -0.208278 -0.208278 -0.014877 -0.014877 0.371926 0.371926 0.565327 0.758728 0.758728 0.952129 1.14553 1.14553 1.33893 1.53233 1.72573 1.91914 1.91914 2.11254 2.30594 2.30594 2.49934 2.69274 2.69274 2.88614 3.07954 3.07954 3.27294 3.46635 3.65975 3.65975 3.85315 4.04655 4.23995 4.23995 4.43335 4.62675 4.82015 5.01356 5.01356 5.20696 5.20696 5.40036 5.40036 5.59376 5.59376 5.78716 5.78716 5.98056 5.98056 6.17396 6.17396 6.36736 6.36736 6.56077 6.56077 6.75417 6.75417 6.75417 6.94757 6.94757 6.94757 7.14097 7.14097 7.14097 7.14097 7.14097 7.33437 7.33437 7.33437 7.33437 7.33437 7.52777 7.52777 7.52777 7.52777 7.52777 7.52777 7.52777 7.52777 7.52777 7.52777 7.72117 7.72117 7.72117 7.72117 7.91457 7.91457 7.91457 7.91457 7.91457 7.91457 8.10798 8.10798 8.10798 8.10798 8.30138 8.30138 8.30138 8.30138 8.49478 8.49478 8.49478 8.49478 8.68818 8.68818 8.68818 8.68818 8.68818 8.88158 8.88158 8.88158 9.07498 9.07498 9.07498 9.07498 9.26838 9.26838 9.46178 9.46178 9.46178 9.65519 9.65519 9.65519 9.84859 9.84859 9.84859 9.84859 10.042 10.042 10.042 10.2354 10.2354 10.2354 10.2354 10.4288 10.4288 10.4288 10.4288 10.4288 10.4288 10.6222 10.6222 10.6222 10.6222 10.6222 10.6222 10.8156 10.8156 10.8156 10.8156 10.8156 10.8156 10.8156 11.009 11.009 11.009 11.009</A_FLOAT64>
+      </Values>
+      <Id>11</Id>
+      <Name>CHANNEL10</Name>
+      <IndependentFlag>0</IndependentFlag>
+      <MimeType>application/x-asam.aolocalcolumn</MimeType>
+      <RawDatatype>DT_DOUBLE</RawDatatype>
+      <axistype>Yaxis</axistype>
+      <MeaQuantity>10</MeaQuantity>
+      <SubMatrix>1</SubMatrix>
+    </LocalColumn>
+    <air_filter>
+      <Id>1</Id>
+      <Name>air_filter</Name>
+      <MimeType>application/x-asam.aounitundertestpart.air_filter.air_filter</MimeType>
+      <min_bulk_material_density>0.83</min_bulk_material_density>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>1</UnitUnderTest>
+    </air_filter>
+    <air_filter>
+      <Id>2</Id>
+      <Name>air_filter</Name>
+      <MimeType>application/x-asam.aounitundertestpart.air_filter.air_filter</MimeType>
+      <min_bulk_material_density>0.83</min_bulk_material_density>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>2</UnitUnderTest>
+    </air_filter>
+    <engine>
+      <Id>1</Id>
+      <Name>engine</Name>
+      <MimeType>application/x-asam.aounitundertestpart.engine.engine</MimeType>
+      <manufacturer>Peak Motors Ltd.</manufacturer>
+      <model>Peak Turbo V16</model>
+      <type>Compression-ignition</type>
+      <power>167</power>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>1</UnitUnderTest>
+    </engine>
+    <engine>
+      <Id>2</Id>
+      <Name>engine</Name>
+      <MimeType>application/x-asam.aounitundertestpart.engine.engine</MimeType>
+      <manufacturer>Peak Motors Ltd.</manufacturer>
+      <model>Peak Turbo V16</model>
+      <type>Compression-ignition</type>
+      <power>167</power>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>2</UnitUnderTest>
+    </engine>
+    <exhaust_piping>
+      <Id>1</Id>
+      <Name>exhaust_piping</Name>
+      <MimeType>application/x-asam.aounitundertestpart.exhaust_piping.exhaust_piping</MimeType>
+      <material>Stainless steel</material>
+      <length>3.79</length>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>1</UnitUnderTest>
+    </exhaust_piping>
+    <exhaust_piping>
+      <Id>2</Id>
+      <Name>exhaust_piping</Name>
+      <MimeType>application/x-asam.aounitundertestpart.exhaust_piping.exhaust_piping</MimeType>
+      <material>Stainless steel</material>
+      <length>3.79</length>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>2</UnitUnderTest>
+    </exhaust_piping>
+    <expansion_chamber>
+      <Id>1</Id>
+      <Name>expansion_chamber</Name>
+      <MimeType>application/x-asam.aounitundertestpart.expansion_chamber.expansion_chamber</MimeType>
+      <volume>0.53</volume>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>1</UnitUnderTest>
+    </expansion_chamber>
+    <expansion_chamber>
+      <Id>2</Id>
+      <Name>expansion_chamber</Name>
+      <MimeType>application/x-asam.aounitundertestpart.expansion_chamber.expansion_chamber</MimeType>
+      <volume>0.53</volume>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>2</UnitUnderTest>
+    </expansion_chamber>
+    <gearbox>
+      <Id>1</Id>
+      <Name>gearbox</Name>
+      <MimeType>application/x-asam.aounitundertestpart.gearbox.gearbox</MimeType>
+      <transmission>Automatic</transmission>
+      <no_forward_gears>6</no_forward_gears>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>1</UnitUnderTest>
+    </gearbox>
+    <gearbox>
+      <Id>2</Id>
+      <Name>gearbox</Name>
+      <MimeType>application/x-asam.aounitundertestpart.gearbox.gearbox</MimeType>
+      <transmission>Automatic</transmission>
+      <no_forward_gears>6</no_forward_gears>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>2</UnitUnderTest>
+    </gearbox>
+    <noise_reduction_system>
+      <Id>1</Id>
+      <Name>noise_reduction_system</Name>
+      <MimeType>application/x-asam.aounitundertestpart.noise_reduction_system.noise_reduction_system</MimeType>
+      <design_family>Whisper</design_family>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>1</UnitUnderTest>
+    </noise_reduction_system>
+    <noise_reduction_system>
+      <Id>2</Id>
+      <Name>noise_reduction_system</Name>
+      <MimeType>application/x-asam.aounitundertestpart.noise_reduction_system.noise_reduction_system</MimeType>
+      <design_family>Whisper</design_family>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>2</UnitUnderTest>
+    </noise_reduction_system>
+    <silencer>
+      <Id>1</Id>
+      <Name>exhaust_silencer</Name>
+      <MimeType>application/x-asam.aounitundertestpart.silencer.exhaust_silencer</MimeType>
+      <location>Exhaust</location>
+      <manufacturer>Peak Silencers Ltd.</manufacturer>
+      <model>Lion's Roar 2013</model>
+      <type>Quadruple pipe</type>
+      <fibre_type>Biosil wool</fibre_type>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>1</UnitUnderTest>
+    </silencer>
+    <silencer>
+      <Id>2</Id>
+      <Name>intake_silencer</Name>
+      <MimeType>application/x-asam.aounitundertestpart.silencer.intake_silencer</MimeType>
+      <location>Intake</location>
+      <manufacturer>Peak Silencers Ltd.</manufacturer>
+      <model>Snake's Hiss 2013</model>
+      <fibre_type>Etype wool</fibre_type>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>1</UnitUnderTest>
+    </silencer>
+    <silencer>
+      <Id>3</Id>
+      <Name>exhaust_silencer</Name>
+      <MimeType>application/x-asam.aounitundertestpart.silencer.exhaust_silencer</MimeType>
+      <location>Exhaust</location>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>2</UnitUnderTest>
+    </silencer>
+    <silencer>
+      <Id>4</Id>
+      <Name>intake_silencer</Name>
+      <MimeType>application/x-asam.aounitundertestpart.silencer.intake_silencer</MimeType>
+      <location>Intake</location>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>2</UnitUnderTest>
+    </silencer>
+    <tyre>
+      <Id>1</Id>
+      <Name>FL_tyre</Name>
+      <MimeType>application/x-asam.aounitundertestpart.tyre.fl_tyre</MimeType>
+      <manufacturer>Tunnelsand</manufacturer>
+      <axle>1</axle>
+      <side>Left</side>
+      <size>75R15</size>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>1</UnitUnderTest>
+    </tyre>
+    <tyre>
+      <Id>2</Id>
+      <Name>FR_tyre</Name>
+      <MimeType>application/x-asam.aounitundertestpart.tyre.fr_tyre</MimeType>
+      <manufacturer>Tunnelsand</manufacturer>
+      <axle>1</axle>
+      <side>Right</side>
+      <size>75R15</size>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>1</UnitUnderTest>
+    </tyre>
+    <tyre>
+      <Id>3</Id>
+      <Name>RL_tyre</Name>
+      <MimeType>application/x-asam.aounitundertestpart.tyre.rl_tyre</MimeType>
+      <manufacturer>Tunnelsand</manufacturer>
+      <axle>2</axle>
+      <side>Left</side>
+      <size>75R15</size>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>1</UnitUnderTest>
+    </tyre>
+    <tyre>
+      <Id>4</Id>
+      <Name>RR_tyre</Name>
+      <MimeType>application/x-asam.aounitundertestpart.tyre.rr_tyre</MimeType>
+      <manufacturer>Tunnelsand</manufacturer>
+      <axle>2</axle>
+      <side>Right</side>
+      <size>75R15</size>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>1</UnitUnderTest>
+    </tyre>
+    <tyre>
+      <Id>5</Id>
+      <Name>FL_tyre</Name>
+      <MimeType>application/x-asam.aounitundertestpart.tyre.fl_tyre</MimeType>
+      <axle>1</axle>
+      <side>Left</side>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>2</UnitUnderTest>
+    </tyre>
+    <tyre>
+      <Id>6</Id>
+      <Name>FR_tyre</Name>
+      <MimeType>application/x-asam.aounitundertestpart.tyre.fr_tyre</MimeType>
+      <axle>1</axle>
+      <side>Right</side>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>2</UnitUnderTest>
+    </tyre>
+    <tyre>
+      <Id>7</Id>
+      <Name>RL_tyre</Name>
+      <MimeType>application/x-asam.aounitundertestpart.tyre.rl_tyre</MimeType>
+      <axle>2</axle>
+      <side>Left</side>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>2</UnitUnderTest>
+    </tyre>
+    <tyre>
+      <Id>8</Id>
+      <Name>RR_tyre</Name>
+      <MimeType>application/x-asam.aounitundertestpart.tyre.rr_tyre</MimeType>
+      <axle>2</axle>
+      <side>Right</side>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>2</UnitUnderTest>
+    </tyre>
+    <vehicle>
+      <Id>1</Id>
+      <Name>vehicle</Name>
+      <MimeType>application/x-asam.aounitundertestpart.vehicle.vehicle</MimeType>
+      <manufacturer>Peak Motor Vehicles</manufacturer>
+      <model>Model P</model>
+      <vehicle_type>Cabrio</vehicle_type>
+      <vehicle_category>Passenger transport</vehicle_category>
+      <maximum_authorized_mass>1950.0</maximum_authorized_mass>
+      <length>3.96</length>
+      <reference_point>Rear end</reference_point>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>1</UnitUnderTest>
+    </vehicle>
+    <vehicle>
+      <Id>2</Id>
+      <Name>vehicle</Name>
+      <MimeType>application/x-asam.aounitundertestpart.vehicle.vehicle</MimeType>
+      <manufacturer>Peak Motor Vehicles</manufacturer>
+      <model>Model P</model>
+      <vehicle_type>Cabrio</vehicle_type>
+      <vehicle_category>Passenger transport</vehicle_category>
+      <maximum_authorized_mass>1950.0</maximum_authorized_mass>
+      <length>3.96</length>
+      <reference_point>Rear end</reference_point>
+      <mass_in_running_order>1463.0</mass_in_running_order>
+      <TplUnitUnderTestComp>0</TplUnitUnderTestComp>
+      <UnitUnderTest>2</UnitUnderTest>
+    </vehicle>
+    <PBN_test_conduction>
+      <Id>1</Id>
+      <Name>test_conduction</Name>
+      <MimeType>application/x-asam.aotestsequencepart.pbn_test_conduction.test_conduction</MimeType>
+      <tested_vehicle_side>Right</tested_vehicle_side>
+      <v_test>70</v_test>
+      <accelerated>true</accelerated>
+      <TplTestSequenceComp>0</TplTestSequenceComp>
+      <TestSequence>1</TestSequence>
+    </PBN_test_conduction>
+    <PBN_test_conduction>
+      <Id>2</Id>
+      <Name>test_conduction</Name>
+      <MimeType>application/x-asam.aotestsequencepart.pbn_test_conduction.test_conduction</MimeType>
+      <tested_vehicle_side>Right</tested_vehicle_side>
+      <v_test>70</v_test>
+      <PMR>114.0</PMR>
+      <accelerated>true</accelerated>
+      <TplTestSequenceComp>0</TplTestSequenceComp>
+      <TestSequence>2</TestSequence>
+    </PBN_test_conduction>
+    <testsite>
+      <Id>1</Id>
+      <Name>testsite</Name>
+      <MimeType>application/x-asam.aotestsequencepart.testsite.testsite</MimeType>
+      <track_id>PBN Area 51</track_id>
+      <TplTestSequenceComp>0</TplTestSequenceComp>
+      <TestSequence>1</TestSequence>
+    </testsite>
+    <testsite>
+      <Id>2</Id>
+      <Name>testsite</Name>
+      <MimeType>application/x-asam.aotestsequencepart.testsite.testsite</MimeType>
+      <track_id>PBN Area 51</track_id>
+      <TplTestSequenceComp>0</TplTestSequenceComp>
+      <TestSequence>2</TestSequence>
+    </testsite>
+    <track>
+      <Id>1</Id>
+      <Name>track</Name>
+      <MimeType>application/x-asam.aotestsequencepart.track.track</MimeType>
+      <residual_voids_content>7.8</residual_voids_content>
+      <sound_absorption_coefficient>0.093</sound_absorption_coefficient>
+      <texture_depth>0.3</texture_depth>
+      <surface_homogeneity>homogenous</surface_homogeneity>
+      <last_check_texture_depth>20190703160700</last_check_texture_depth>
+      <TplTestSequenceComp>0</TplTestSequenceComp>
+      <TestSequence>1</TestSequence>
+    </track>
+    <track>
+      <Id>2</Id>
+      <Name>track</Name>
+      <MimeType>application/x-asam.aotestsequencepart.track.track</MimeType>
+      <residual_voids_content>7.8</residual_voids_content>
+      <sound_absorption_coefficient>0.093</sound_absorption_coefficient>
+      <texture_depth>0.3</texture_depth>
+      <surface_homogeneity>homogenous</surface_homogeneity>
+      <last_check_texture_depth>20140220000000</last_check_texture_depth>
+      <TplTestSequenceComp>0</TplTestSequenceComp>
+      <TestSequence>2</TestSequence>
+    </track>
+    <meteorological_measurement>
+      <Id>1</Id>
+      <Name>meteorological_measurement</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.meteorological_measurement.meteorological_measurement</MimeType>
+      <temperature>1 2</temperature>
+      <barometric_pressure>1</barometric_pressure>
+      <wind_speed>1</wind_speed>
+      <TplTestEquipmentComp>0</TplTestEquipmentComp>
+      <relative_humidity>1</relative_humidity>
+      <TestEquipment>1</TestEquipment>
+    </meteorological_measurement>
+    <meteorological_measurement>
+      <Id>2</Id>
+      <Name>meteorological_measurement</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.meteorological_measurement.meteorological_measurement</MimeType>
+      <temperature>3 4</temperature>
+      <barometric_pressure>2</barometric_pressure>
+      <wind_speed>2</wind_speed>
+      <TplTestEquipmentComp>0</TplTestEquipmentComp>
+      <relative_humidity>2</relative_humidity>
+      <TestEquipment>2</TestEquipment>
+    </meteorological_measurement>
+    <sound_measurement>
+      <Id>1</Id>
+      <Name>sound_measurement</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.sound_measurement.sound_measurement</MimeType>
+      <TplTestEquipmentComp>0</TplTestEquipmentComp>
+      <microphone>1 2</microphone>
+      <TestEquipment>1</TestEquipment>
+    </sound_measurement>
+    <sound_measurement>
+      <Id>2</Id>
+      <Name>sound_measurement</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.sound_measurement.sound_measurement</MimeType>
+      <TplTestEquipmentComp>0</TplTestEquipmentComp>
+      <microphone>3 4</microphone>
+      <TestEquipment>2</TestEquipment>
+    </sound_measurement>
+    <vehicle_measurement>
+      <Id>1</Id>
+      <Name>vehicle_measurement</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.vehicle_measurement.vehicle_measurement</MimeType>
+      <rotational_speed>1</rotational_speed>
+      <acceleration>1</acceleration>
+      <TplTestEquipmentComp>0</TplTestEquipmentComp>
+      <TestEquipment>1</TestEquipment>
+      <speed>1</speed>
+    </vehicle_measurement>
+    <vehicle_measurement>
+      <Id>2</Id>
+      <Name>vehicle_measurement</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.vehicle_measurement.vehicle_measurement</MimeType>
+      <rotational_speed>2</rotational_speed>
+      <acceleration>2</acceleration>
+      <TplTestEquipmentComp>0</TplTestEquipmentComp>
+      <TestEquipment>2</TestEquipment>
+      <speed>2</speed>
+    </vehicle_measurement>
+    <acceleration>
+      <Id>1</Id>
+      <Name>vehicle_acceleration</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.acceleration</MimeType>
+      <vehicle_measurement>1</vehicle_measurement>
+      <TplSensor>0</TplSensor>
+    </acceleration>
+    <acceleration>
+      <Id>2</Id>
+      <Name>vehicle_acceleration</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.acceleration</MimeType>
+      <vehicle_measurement>2</vehicle_measurement>
+      <TplSensor>0</TplSensor>
+    </acceleration>
+    <rotational_speed>
+      <Id>1</Id>
+      <Name>rotational_speed</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.rotational_speed</MimeType>
+      <vehicle_measurement>1</vehicle_measurement>
+      <TplSensor>0</TplSensor>
+    </rotational_speed>
+    <rotational_speed>
+      <Id>2</Id>
+      <Name>rotational_speed</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.rotational_speed</MimeType>
+      <vehicle_measurement>2</vehicle_measurement>
+      <TplSensor>0</TplSensor>
+    </rotational_speed>
+    <speed>
+      <Id>1</Id>
+      <Name>vehicle_speed</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.speed</MimeType>
+      <vehicle_measurement>1</vehicle_measurement>
+      <TplSensor>0</TplSensor>
+    </speed>
+    <speed>
+      <Id>2</Id>
+      <Name>vehicle_speed</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.speed</MimeType>
+      <vehicle_measurement>2</vehicle_measurement>
+      <TplSensor>0</TplSensor>
+    </speed>
+    <microphone>
+      <Id>1</Id>
+      <Name>background_noise</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.microphone</MimeType>
+      <sound_measurement>1</sound_measurement>
+      <TplSensor>0</TplSensor>
+    </microphone>
+    <microphone>
+      <Id>2</Id>
+      <Name>vehicle_noise</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.microphone</MimeType>
+      <sound_measurement>1</sound_measurement>
+      <TplSensor>0</TplSensor>
+    </microphone>
+    <microphone>
+      <Id>3</Id>
+      <Name>background_noise</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.microphone</MimeType>
+      <sound_measurement>2</sound_measurement>
+      <TplSensor>0</TplSensor>
+    </microphone>
+    <microphone>
+      <Id>4</Id>
+      <Name>vehicle_noise</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.microphone</MimeType>
+      <sound_measurement>2</sound_measurement>
+      <TplSensor>0</TplSensor>
+    </microphone>
+    <barometric_pressure>
+      <Id>1</Id>
+      <Name>atmospheric_pressure</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.barometric_pressure</MimeType>
+      <TplSensor>0</TplSensor>
+      <meteorological_measurement>1</meteorological_measurement>
+    </barometric_pressure>
+    <barometric_pressure>
+      <Id>2</Id>
+      <Name>atmospheric_pressure</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.barometric_pressure</MimeType>
+      <TplSensor>0</TplSensor>
+      <meteorological_measurement>2</meteorological_measurement>
+    </barometric_pressure>
+    <relative_humidity>
+      <Id>1</Id>
+      <Name>humidity</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.relative_humidity</MimeType>
+      <TplSensor>0</TplSensor>
+      <meteorological_measurement>1</meteorological_measurement>
+    </relative_humidity>
+    <relative_humidity>
+      <Id>2</Id>
+      <Name>humidity</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.relative_humidity</MimeType>
+      <TplSensor>0</TplSensor>
+      <meteorological_measurement>2</meteorological_measurement>
+    </relative_humidity>
+    <temperature>
+      <Id>1</Id>
+      <Name>ambient_air_temperature</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.temperature</MimeType>
+      <TplSensor>0</TplSensor>
+      <meteorological_measurement>1</meteorological_measurement>
+    </temperature>
+    <temperature>
+      <Id>2</Id>
+      <Name>track_surface_temperature</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.temperature</MimeType>
+      <TplSensor>0</TplSensor>
+      <meteorological_measurement>1</meteorological_measurement>
+    </temperature>
+    <temperature>
+      <Id>3</Id>
+      <Name>ambient_air_temperature</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.temperature</MimeType>
+      <TplSensor>0</TplSensor>
+      <meteorological_measurement>2</meteorological_measurement>
+    </temperature>
+    <temperature>
+      <Id>4</Id>
+      <Name>track_surface_temperature</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.temperature</MimeType>
+      <TplSensor>0</TplSensor>
+      <meteorological_measurement>2</meteorological_measurement>
+    </temperature>
+    <wind_speed>
+      <Id>1</Id>
+      <Name>wind_speed</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.wind_speed</MimeType>
+      <TplSensor>0</TplSensor>
+      <meteorological_measurement>1</meteorological_measurement>
+    </wind_speed>
+    <wind_speed>
+      <Id>2</Id>
+      <Name>wind_speed</Name>
+      <MimeType>application/x-asam.aotestequipmentpart.wind_speed</MimeType>
+      <TplSensor>0</TplSensor>
+      <meteorological_measurement>2</meteorological_measurement>
+    </wind_speed>
+  </instance_data>
+</atfx_file>
diff --git a/org.eclipse.mdm.application/build.gradle b/org.eclipse.mdm.application/build.gradle
new file mode 100644
index 0000000..f5b6044
--- /dev/null
+++ b/org.eclipse.mdm.application/build.gradle
@@ -0,0 +1,131 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+ 
+
+import org.apache.tools.ant.taskdefs.condition.Os
+import org.apache.tools.ant.filters.ConcatFilter
+
+plugins {
+	id "com.moowork.node" version "1.3.1"
+}
+
+description = 'MDM Web Application'
+
+System.setProperty('file.encoding', 'UTF-8')
+
+task map_tslint(type: Copy) {
+	File tsLintFile = file("${project.buildDir}/node/coverage/tslint_out.json")
+	File mappedTsLintFile = file("${project.buildDir}/node/coverage/tslint_out_mapped.json")
+
+	if (tsLintFile.exists()) {
+		String contents = tsLintFile.getText('UTF-8')
+		contents = contents.replaceAll( 'src/app', 'src/main/webapp/src/app' )
+		mappedTsLintFile.write(contents, 'UTF-8')
+	}
+}
+
+sonarqube {
+	properties {
+		property "sonar.sources", "src/main/webapp/src,src/main/java"
+		property "sonar.exclusions", "src/main/webapp/node_modules/**, src/main/webapp/coverage/**, src/main/webapp/dist/**,**/*.spec.ts, **/*.js"
+		property "sonar.tests", "src/main/webapp/src"
+		property "sonar.test.inclusions", "**/*.spec.ts"
+
+		property "sonar.ts.tslint.configPath", "src/main/webapp"
+		property "sonar.ts.tslint.projectPath", "src/main/webapp"
+		property "sonar.ts.tslint.outputPath", "${project.buildDir}/node/coverage/tslint_out_mapped.json"
+		property "sonar.ts.coverage.lcovReportpath", "${project.buildDir}/node/coverage/lcov.info"
+	}
+}
+
+dependencies {
+	runtime 'org.glassfish.jersey.containers:jersey-container-servlet:2.23.2'
+	compile 'com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.9.2'
+
+	compile project(':org.eclipse.mdm.businessobjects')
+	compile project(':org.eclipse.mdm.filerelease')
+	compile project(':org.eclipse.mdm.property')
+	compile project(':org.eclipse.mdm.freetextindexer')
+	compile project(':org.eclipse.mdm.preferences')
+}
+
+jar {
+	metaInf { from '../NOTICE.txt' }
+	metaInf { from '../LICENSE.txt' }
+}
+
+task copy_websources(type: Copy) {
+
+	from('./src/main/webapp') {
+		exclude 'dist'
+		exclude 'node_modules'
+		exclude 'NOTICE.html'
+	}
+
+	into "${project.buildDir}/node"
+}
+
+task copyNoticeFile() {
+  file("${project.buildDir}/node/src/app/").mkdirs()
+  def html = file("${project.buildDir}/node/src/app/NOTICE.html")
+  html.text = '<pre>' + file('../NOTICE.txt').text + '</pre>'
+}
+
+
+node {
+	version = '10.14.0'
+	npmVersion = '6.4.1'
+	distBaseUrl = 'https://nodejs.org/dist'
+	download = true
+	workDir = file("${project.buildDir}/node/nodejs")
+	npmWorkDir = file("${project.buildDir}/node")
+	nodeModulesDir = file("${project.buildDir}/node")
+	if (!nodeModulesDir.isDirectory()) {
+		nodeModulesDir.mkdirs()
+	}
+}
+
+npm_install { args = ["${project.buildDir}"] }
+
+task runBuild(type: NpmTask) {
+	args = ['run', 'ci_build']
+	inputs.dir 'src'
+	outputs.dir 'build'
+}
+
+task copy_loginsites(type: Copy) {
+	from 	"${project.buildDir}/node/src/login.jsp",
+			"${project.buildDir}/node/src/login.css",
+			"${project.buildDir}/node/src/error.jsp"
+
+	into	 "${project.buildDir}/node/dist"
+}
+
+task copyFilesForRunningWithoutNpm(type: Copy){
+	from	"${project.buildDir}/node/src/index.html"
+	into	"${project.buildDir}/node/dist"
+}
+
+if (hasProperty('skipNode')) {
+  compileJava.dependsOn(copy_loginsites)
+} else {
+	compileJava.dependsOn(copy_loginsites)
+	map_tslint.dependsOn(runBuild)
+	copy_loginsites.dependsOn(runBuild)
+	runBuild.dependsOn(npmInstall)
+	npmInstall.dependsOn(copy_websources)
+	npmInstall.dependsOn(copyNoticeFile)
+	copy_websources.dependsOn(npmSetup)
+	npmSetup.dependsOn(nodeSetup)
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/AccessControlResponseFilter.java b/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/AccessControlResponseFilter.java
new file mode 100644
index 0000000..2489e18
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/AccessControlResponseFilter.java
@@ -0,0 +1,45 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.application;
+
+import javax.annotation.Priority;
+import javax.ws.rs.Priorities;
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerResponseContext;
+import javax.ws.rs.container.ContainerResponseFilter;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.Provider;
+
+@Provider
+@Priority(Priorities.HEADER_DECORATOR)
+public class AccessControlResponseFilter implements ContainerResponseFilter {
+
+	@Override
+	public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
+
+		final MultivaluedMap<String, Object> responseHeaders = responseContext.getHeaders();
+		final MultivaluedMap<String, String> requestHeaders = requestContext.getHeaders();
+
+		responseHeaders.add("Access-Control-Allow-Origin", "*");
+		responseHeaders.add("Access-Control-Allow-Headers", "Authorization, Origin, X-Requested-With, Content-Type");
+		responseHeaders.add("Access-Control-Expose-Headers", "Location, Content-Disposition");
+		responseHeaders.add("Access-Control-Allow-Methods", "POST, PUT, GET, DELETE, HEAD, OPTIONS");
+
+		requestHeaders.add("Access-Control-Allow-Origin", "*");
+		requestHeaders.add("Access-Control-Allow-Headers", "Authorization, Origin, X-Requested-With, Content-Type");
+		requestHeaders.add("Access-Control-Expose-Headers", "Location, Content-Disposition");
+		requestHeaders.add("Access-Control-Allow-Methods", "POST, PUT, GET, DELETE, HEAD, OPTIONS");
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/ApplicationConfig.java b/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/ApplicationConfig.java
new file mode 100644
index 0000000..2e2a064
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/ApplicationConfig.java
@@ -0,0 +1,31 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.application;
+
+import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+
+/**
+ * Application configuration
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@ApplicationPath("mdm")
+public class ApplicationConfig extends Application {
+
+	public ApplicationConfig() {
+	}
+}
diff --git a/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/MDMRequestFilter.java b/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/MDMRequestFilter.java
new file mode 100644
index 0000000..4d3c881
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/MDMRequestFilter.java
@@ -0,0 +1,109 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.application;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Splitter;
+import com.google.common.io.ByteStreams;
+
+/**
+ * MDMRequestFilter
+ * 
+ * For the angular web client all URLs that are routed by angular have to
+ * fallback to index.html. Thus this filter tests, if the the requested URL is
+ * in the configured passThroughPrefixes or if the URL matches a real file. If
+ * this is the case the filter passes the processing to the next filter,
+ * otherwise the contents of index.html is returned.
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+public class MDMRequestFilter implements Filter {
+
+	private static final Logger LOG = LoggerFactory.getLogger(MDMRequestFilter.class);
+
+	private List<String> passThroughPrefixes = new ArrayList<>();
+
+	@Override
+	public void init(FilterConfig filterConfig) throws ServletException {
+		String passThrough = filterConfig.getInitParameter("passThroughPrefixes");
+		if (passThrough == null) {
+			passThroughPrefixes.add("mdm");
+		} else {
+			Splitter.on(',').trimResults().split(passThrough.toLowerCase()).forEach(passThroughPrefixes::add);
+		}
+
+		LOG.debug("Returning index.html for all requests except requests prefixed with: {}.", passThroughPrefixes);
+	}
+
+	@Override
+	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+			throws IOException, ServletException {
+		if (request instanceof HttpServletRequest) {
+			HttpServletRequest httpRequest = (HttpServletRequest) request;
+
+			String requestedPath = httpRequest.getServletPath().toLowerCase();
+			if (!matchesPassthrough(requestedPath)) {
+				InputStream in = request.getServletContext().getResourceAsStream(requestedPath);
+				if (in == null) {
+					response.setContentType("text/html");
+					in = request.getServletContext().getResourceAsStream("/index.html");
+					ByteStreams.copy(in, response.getOutputStream());
+					return;
+				}
+			}
+			chain.doFilter(request, response);
+		}
+	}
+
+	/**
+	 * Checks if the requestedURL has a prefix that is configured in
+	 * passThroughPrefix.
+	 * 
+	 * @param requestedURL the requested URL
+	 * @return true, if the requested URL is in the configured passThroughPrefix
+	 *         list.
+	 */
+	private boolean matchesPassthrough(String requestedURL) {
+		String trimmedURL = requestedURL.trim();
+		for (String e : passThroughPrefixes) {
+			if (trimmedURL.startsWith(e)) {
+				return true;
+			}
+		}
+
+		return false;
+	}
+
+	@Override
+	public void destroy() {
+	}
+
+}
diff --git a/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/logout/MDMLogoutServlet.java b/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/logout/MDMLogoutServlet.java
new file mode 100644
index 0000000..2d2131d
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/logout/MDMLogoutServlet.java
@@ -0,0 +1,57 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.application.logout;
+
+import java.io.IOException;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.mdm.property.GlobalPropertyService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * MDMLogoutServlet
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@WebServlet(name = "MDMLogoutServlet", urlPatterns = { "/mdm/logout" })
+public class MDMLogoutServlet extends HttpServlet {
+
+	private static final long serialVersionUID = -2243639870075761399L;
+	private static final Logger LOG = LoggerFactory.getLogger(MDMLogoutServlet.class);
+
+	@Inject
+	private GlobalPropertyService propertyService;
+
+	@Override
+	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		req.logout();
+		req.getSession().invalidate();
+
+		String r = propertyService.getGlobalPropertyMap(null).getOrDefault("application.logoutRedirect",
+				req.getContextPath());
+
+		LOG.info("Logged out, redirecting to {}", r);
+		resp.sendRedirect(r);
+	}
+
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/.editorconfig b/org.eclipse.mdm.application/src/main/webapp/.editorconfig
new file mode 100644
index 0000000..6e87a00
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/.editorconfig
@@ -0,0 +1,13 @@
+# Editor configuration, see http://editorconfig.org
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+max_line_length = off
+trim_trailing_whitespace = false
diff --git a/org.eclipse.mdm.application/src/main/webapp/.gitignore b/org.eclipse.mdm.application/src/main/webapp/.gitignore
new file mode 100644
index 0000000..0742f7a
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/.gitignore
@@ -0,0 +1,41 @@
+# See http://help.github.com/ignore-files/ for more about ignoring files.
+
+# compiled output
+/dist
+/tmp
+/coverage
+
+# dependencies
+/node_modules
+
+# IDEs and editors
+/.idea
+.project
+.classpath
+.c9/
+*.launch
+.settings/
+
+# IDE - VSCode
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+
+# misc
+/.sass-cache
+/connect.lock
+/coverage/*
+/libpeerconnection.log
+npm-debug.log
+testem.log
+/typings
+
+# e2e
+/e2e/*.js
+/e2e/*.map
+
+#System Files
+.DS_Store
+Thumbs.db
diff --git a/org.eclipse.mdm.application/src/main/webapp/.vscode/launch.json b/org.eclipse.mdm.application/src/main/webapp/.vscode/launch.json
new file mode 100644
index 0000000..1348ba4
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/.vscode/launch.json
@@ -0,0 +1,15 @@
+{
+    // Use IntelliSense to learn about possible attributes.
+    // Hover to view descriptions of existing attributes.
+    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+    "version": "0.2.0",
+    "configurations": [
+        {
+            "type": "chrome",
+            "request": "launch",
+            "name": "Launch Chrome against localhost",
+            "url": "http://localhost:4200",
+            "webRoot": "${workspaceFolder}"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/README.md b/org.eclipse.mdm.application/src/main/webapp/README.md
new file mode 100644
index 0000000..6cea79e
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/README.md
@@ -0,0 +1,43 @@
+# Webapp
+
+This project was generated with [angular-cli](https://github.com/angular/angular-cli) version 1.0.0-beta.28.3.
+
+## Development server
+Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
+
+## Code scaffolding
+
+Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive/pipe/service/class/module`.
+
+## Build
+
+Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `-prod` flag for a production build.
+
+## Running unit tests
+
+Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
+
+## Running end-to-end tests
+
+Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).
+Before running the tests make sure you are serving the app via `ng serve`.
+
+## Deploying to GitHub Pages
+
+Run `ng github-pages:deploy` to deploy to GitHub Pages.
+
+## Further help
+
+To get more help on the `angular-cli` use `ng help` or go check out the [Angular-CLI README](https://github.com/angular/angular-cli/blob/master/README.md).
+
+## Copyright and License ##
+Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+
+ See the NOTICE file(s) distributed with this work for additional
+ information regarding copyright ownership.
+
+ This program and the accompanying materials are made available under the
+ terms of the Eclipse Public License v. 2.0 which is available at
+ http://www.eclipse.org/legal/epl-2.0.
+
+ SPDX-License-Identifier: EPL-2.0
diff --git a/org.eclipse.mdm.application/src/main/webapp/README_I18N.md b/org.eclipse.mdm.application/src/main/webapp/README_I18N.md
new file mode 100644
index 0000000..22ce293
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/README_I18N.md
@@ -0,0 +1,149 @@
+# General
+
+The [ngx-translate library](https://github.com/ngx-translate/core) is used for internationalization. 
+This library basically provides functionality for replacing keys (as placeholders for the text to be translated)
+in HTML or TypeScript files with values (the actual translations) defined as key-value pairs in separate JSON files (one for each language to be supported). The JSON files (in UTF8 character encoding) should be placed in the _src/assets/i18n_ directory. It is suggested the 2-letter ISO language codes be used for the file names, the file name extension "json" is mandatory.
+
+Key/value replacement is performed at runtime of the web application, and it is possible to switch between languages at runtime (see below).
+
+For details, please refer to the ngx-translate documentation at the link above.
+
+
+## Recommendations
+
+The keys for the texts to be translated should follow the pattern 
+
+`<directory>.<filename>.<descriptive key>`
+
+where _directory_ is the directory within the _app_ folder containing the respective file, _filename_ the root file name (omitting the file name extension and  qualifiers such as "component" or "module"), and _descriptive key_ a name for the key preferably so chosen as to give some indication about its usage or meaning. Key names should be in English, with dashes (-) replacing spaces between words. For clarity, consider using prefixes such as "title" for dialog titles, "btn" for button texts, "lbl" for labels, "tooltip" for tooltip texts, "err" for error messages, etc.  
+
+Examples: 
+
+* `search.mdm-search.btn-apply-changes`
+* `details.sensor.err-cannot-load-descriptive-data`
+
+For the sake of uniformity, it is recommended to use the _translate_ pipe in HTML files:
+
+```html
+<h4 class="modal-title">{{ 'tableview.editview.title-view-editor' | translate }}</h4>
+```
+
+Using the _TranslateService.instant()_ method, a translation for a key can be obtained in the language currently selected at the time of the method call. A typical application scenario for this is a message etc. shown in response to an event triggered by user action (e.g., a button click):
+
+```typescript
+saveBasket(e: Event) {
+    if (e) {
+      e.stopPropagation();
+    }
+    if (this.baskets.find(f => f.name === this.basketName) != undefined) {
+      this.childSaveModal.hide();
+      this.overwriteDialogComponent.showOverwriteModal(
+        this.translateService.instant('basket.mdm-basket.item-save-shopping-basket')).subscribe(
+          needSave => this.saveBasket2(needSave),
+          error => {
+            this.saveBasket2(false);
+            this.notificationService.notifyError(this.translateService.instant('basket.mdm-basket.err-save-shopping-basket'), error);
+        });
+    } else {
+      this.saveBasket2(true);
+    }
+  }
+```
+
+A function _streamTranslate_ is defined in mdm-core.module.ts which accepts a translation key and returns an Observable:
+
+```typescript
+export function streamTranslate(translateService: TranslateService, keys: string | Array<string>, params?: any): Observable<any> {
+  return translateService.onLangChange.pipe( startWith({}),
+      switchMap(() => params ? translateService.get(keys, params) : translateService.get(keys)) );
+}
+```
+By subscribing to that observable, a change of language in the application can be detected and the current translation for the key passed can be obtained. This is especially useful for class variables containing text to be localized, which is then guaranteed to always be in the language currently selected. Example (see below for an explanation of the marker function _TRANSLATE_):
+
+```typescript
+import { TranslateService } from '@ngx-translate/core';
+import { streamTranslate, TRANSLATE } from '../core/mdm-core.module';
+
+export class MDMNavigatorComponent implements OnInit {
+
+  loadingNode = <TreeNode>{
+    label: 'Loading subordinate items...',
+    leaf: true,
+    icon: 'fa fa-spinner fa-pulse fa-fw'
+  };
+  
+  [...]
+
+  contextMenuItems: MenuItem[] = [
+    { label: 'Add to shopping basket', icon: 'fa fa-shopping-cart', command: (event) => this.addSelectionToBasket() }
+  ];
+
+  constructor(private translateService: TranslateService) {
+  }
+
+  ngOnInit() {
+    streamTranslate(this.translateService, TRANSLATE('navigator.mdm-navigator.loading-subordinate-items')).subscribe(
+            (msg: string) => this.loadingNode.label = msg);
+    streamTranslate(this.translateService, TRANSLATE('navigator.mdm-navigator.add-to-shopping-basket')).subscribe(
+            (msg: string) => this.contextMenuItems[0].label = msg);
+  }
+  
+  [...]
+}
+```
+  
+Please also note that a suitable default value should be provided for the text if there is the possibility of it being needed before the translation library has been fully initialized. These default texts should be in English.
+
+
+
+## Language selection in the web application
+
+The user can select the language for the UI from a list presented in the web application's main menu bar.
+The entries for this list are defined in the _languages_ array of the _AppComponent_ class. For each language, a _SelectItem_ must be added to this array (label: the name of the language _in that language itself_, value: the name of the JSON file with the translations, excluding the "json" extension):
+
+```typescript
+export class AppComponent implements OnInit {
+  [...]
+ 
+  languages = <SelectItem[]> [
+    { label: 'English', value: 'en' },
+    { label: 'Deutsch', value: 'de' },
+    { label: 'Français', value: 'fr' },
+  ];
+  
+  [...]
+}
+```
+
+
+# Extracting translation keys from source files
+
+Using the [ngx-translate-extract](https://github.com/biesbjerg/ngx-translate-extract) library, translation keys can be automatically extracted from the source files and collected in a JSON file for use with ngx-translate. Documentation for ngx-translate-extract is available at the link above. 
+
+A script (_extract-translations_) which extracts the keys to two files (_en.json_ and _de.json_ for English and German, respectively) has been defined in _package.json_ and can be invoked on the command line by _npm run extract-translations_. 
+
+```typescript
+"extract-translations": "ngx-translate-extract --input ./src --output ./src/assets/i18n/en.json ./src/assets/i18n/de.json --clean --sort --format namespaced-json --marker TRANSLATE"
+
+```
+
+In this script, a marker function (_TRANSLATE_, defined in mdm-core.module.ts) is specified for marking translation keys outside the methods provided by ngx-translate. Whenever a translation key is used in an ngx-translate method (such as _instant()_) or in conjunction with the _translate_ pipe or directive, ngx-translate-extract automatically extracts that key to the JSON file. Keys located elsewhere in a typescript file must, if they are to be included in the JSON file, be marked using a marker function, which should not do anything but return the string passed into it:
+
+```typescript
+export function TRANSLATE(str: string) {
+  return str;
+}
+```
+
+At each extraction run, new keys found in the sources are added to the JSON file(s), keys no longer used in the source files removed from the JSON file(s), and all other keys in the JSON file(s) left untouched, together with any already existing translations for these. 
+
+The script can, of course, be modified as needed. Please note that some of the ways to specify the target JSON files mentioned in the ngx-translate-extract documentation appear to be non-functional (e.g., the _{en,de}.json_ notation for creating two files, _en.json_ and _de.json_).
+
+
+
+
+
+
+
+
+
diff --git a/org.eclipse.mdm.application/src/main/webapp/angular.json b/org.eclipse.mdm.application/src/main/webapp/angular.json
new file mode 100644
index 0000000..40981c4
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/angular.json
@@ -0,0 +1,150 @@
+{
+  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
+  "version": 1,
+  "newProjectRoot": "projects",
+  "projects": {
+    "openMDM-Web": {
+      "root": "",
+      "sourceRoot": "src",
+      "projectType": "application",
+      "prefix": "mdm5",
+      "schematics": {},
+      "architect": {
+        "build": {
+          "builder": "@angular-devkit/build-angular:browser",
+          "options": {
+            "outputPath": "dist",
+            "index": "src/index.html",
+            "main": "src/main.ts",
+            "polyfills": "src/polyfills.ts",
+            "tsConfig": "src/tsconfig.app.json",
+            "assets": [
+              "src/assets",
+              "src/favicon.ico"
+            ],
+            "styles": [
+              "node_modules/primeicons/primeicons.css",
+              "node_modules/primeng/resources/themes/nova-light/theme.css",
+              "node_modules/primeng/resources/primeng.min.css",
+              "node_modules/primeflex/primeflex.css",
+              "node_modules/font-awesome/css/font-awesome.min.css",
+              "node_modules/bootstrap/dist/css/bootstrap.min.css",
+              "src/styles.css"
+            ],
+            "scripts": [
+              "node_modules/chart.js/dist/Chart.js"
+            ],
+            "es5BrowserSupport": true
+          },
+          "configurations": {
+            "production": {
+              "fileReplacements": [
+                {
+                  "replace": "src/environments/environment.ts",
+                  "with": "src/environments/environment.prod.ts"
+                }
+              ],
+              "optimization": true,
+              "outputHashing": "all",
+              "sourceMap": false,
+              "extractCss": true,
+              "namedChunks": false,
+              "aot": true,
+              "extractLicenses": true,
+              "vendorChunk": false,
+              "buildOptimizer": true,
+              "budgets": [
+                {
+                  "type": "initial",
+                  "maximumWarning": "2mb",
+                  "maximumError": "5mb"
+                }
+              ]
+            }
+          }
+        },
+        "serve": {
+          "builder": "@angular-devkit/build-angular:dev-server",
+          "options": {
+            "browserTarget": "openMDM-Web:build",
+            "proxyConfig": "proxies/development.config.json"
+          },
+          "configurations": {
+            "production": {
+              "browserTarget": "openMDM-Web:build:production"
+            }
+          }
+        },
+        "extract-i18n": {
+          "builder": "@angular-devkit/build-angular:extract-i18n",
+          "options": {
+            "browserTarget": "openMDM-Web:build"
+          }
+        },
+        "test": {
+          "builder": "@angular-devkit/build-angular:karma",
+          "options": {
+            "main": "src/test.ts",
+            "polyfills": "src/polyfills.ts",
+            "tsConfig": "src/tsconfig.spec.json",
+            "karmaConfig": "src/karma.conf.js",
+            "styles": [
+              "node_modules/primeicons/primeicons.css",
+              "node_modules/primeng/resources/themes/nova-light/theme.css",
+              "node_modules/primeng/resources/primeng.min.css",
+              "node_modules/font-awesome/css/font-awesome.min.css",
+              "node_modules/bootstrap/dist/css/bootstrap.min.css",
+              "src/styles.css"
+            ],
+            "scripts": [],
+            "assets": [
+              "src/assets",
+              "src/favicon.ico"
+            ]
+          }
+        },
+        "lint": {
+          "builder": "@angular-devkit/build-angular:tslint",
+          "options": {
+            "tsConfig": [
+              "src/tsconfig.app.json",
+              "src/tsconfig.spec.json"
+            ],
+            "exclude": [
+              "**/node_modules/**"
+            ]
+          }
+        }
+      }
+    },
+    "openMDM-Web-e2e": {
+      "root": "e2e/",
+      "projectType": "application",
+      "prefix": "",
+      "architect": {
+        "e2e": {
+          "builder": "@angular-devkit/build-angular:protractor",
+          "options": {
+            "protractorConfig": "e2e/protractor.conf.js",
+            "devServerTarget": "openMDM-Web:serve"
+          },
+          "configurations": {
+            "production": {
+              "devServerTarget": "openMDM-Web:serve:production"
+            }
+          }
+        },
+        "lint": {
+          "builder": "@angular-devkit/build-angular:tslint",
+          "options": {
+            "tsConfig": "e2e/tsconfig.e2e.json",
+            "exclude": [
+              "**/node_modules/**"
+            ]
+          }
+        }
+      }
+    }
+  },
+  "defaultProject": "openMDM-Web"
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/e2e/app.e2e-spec.ts b/org.eclipse.mdm.application/src/main/webapp/e2e/app.e2e-spec.ts
new file mode 100644
index 0000000..48533e9
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/e2e/app.e2e-spec.ts
@@ -0,0 +1,28 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { WebappPage } from './app.po';
+
+describe('webapp App', function() {
+  let page: WebappPage;
+
+  beforeEach(() => {
+    page = new WebappPage();
+  });
+
+  it('should display message saying app works', () => {
+    page.navigateTo();
+    expect(page.getParagraphText()).toEqual('app works!');
+  });
+});
diff --git a/org.eclipse.mdm.application/src/main/webapp/e2e/app.po.ts b/org.eclipse.mdm.application/src/main/webapp/e2e/app.po.ts
new file mode 100644
index 0000000..0e327c8
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/e2e/app.po.ts
@@ -0,0 +1,25 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { browser, element, by } from 'protractor';
+
+export class WebappPage {
+  navigateTo() {
+    return browser.get('/');
+  }
+
+  getParagraphText() {
+    return element(by.css('app-root h1')).getText();
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/e2e/protractor.conf.js b/org.eclipse.mdm.application/src/main/webapp/e2e/protractor.conf.js
new file mode 100644
index 0000000..001c7c0
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/e2e/protractor.conf.js
@@ -0,0 +1,45 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+// Protractor configuration file, see link for more information
+// https://github.com/angular/protractor/blob/master/lib/config.ts
+
+const { SpecReporter } = require('jasmine-spec-reporter');
+
+exports.config = {
+  allScriptsTimeout: 11000,
+  specs: [
+    './e2e/**/*.e2e-spec.ts'
+  ],
+  capabilities: {
+    'browserName': 'chrome'
+  },
+  directConnect: true,
+  baseUrl: 'http://localhost:4200/',
+  framework: 'jasmine',
+  jasmineNodeOpts: {
+    showColors: true,
+    defaultTimeoutInterval: 30000,
+    print: function() {}
+  },
+  beforeLaunch: function() {
+    require('ts-node').register({
+      project: 'e2e/tsconfig.e2e.json'
+    });
+  },
+  onPrepare() {
+    jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
+  }
+};
diff --git a/org.eclipse.mdm.application/src/main/webapp/e2e/tsconfig.e2e.json b/org.eclipse.mdm.application/src/main/webapp/e2e/tsconfig.e2e.json
new file mode 100644
index 0000000..656bdb1
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/e2e/tsconfig.e2e.json
@@ -0,0 +1,16 @@
+{
+  "compileOnSave": false,
+  "compilerOptions": {
+    "declaration": false,
+    "emitDecoratorMetadata": true,
+    "experimentalDecorators": true,
+    "module": "commonjs",
+    "moduleResolution": "node",
+    "outDir": "../dist/out-tsc-e2e",
+    "sourceMap": true,
+    "target": "es5",
+    "typeRoots": [
+      "../node_modules/@types"
+    ]
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/package-lock.json b/org.eclipse.mdm.application/src/main/webapp/package-lock.json
new file mode 100644
index 0000000..315531b
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/package-lock.json
@@ -0,0 +1,11479 @@
+{
+  "name": "openMDM-Web",
+  "version": "5.1.0M8",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "@angular-devkit/architect": {
+      "version": "0.13.1",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.13.1.tgz",
+      "integrity": "sha512-QDmIbqde75ZZSEFbw6Q6kQWq4cY6C7D67yujXw6XTyubDNAs1tyXJyxTIB8vjSlEKwRizTTDd/B0ZXVcke3Mvw==",
+      "dev": true,
+      "requires": {
+        "@angular-devkit/core": "7.3.1",
+        "rxjs": "6.3.3"
+      }
+    },
+    "@angular-devkit/build-angular": {
+      "version": "0.13.1",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.13.1.tgz",
+      "integrity": "sha512-vkKwMVQ+NNCcVR3HFMffS+Mq4b2afXeUjI+02N38hBuFTppnC83uivUB6Uu2NUk5NTSQA4BnJlG5CbMs6N4QYg==",
+      "dev": true,
+      "requires": {
+        "@angular-devkit/architect": "0.13.1",
+        "@angular-devkit/build-optimizer": "0.13.1",
+        "@angular-devkit/build-webpack": "0.13.1",
+        "@angular-devkit/core": "7.3.1",
+        "@ngtools/webpack": "7.3.1",
+        "ajv": "6.7.0",
+        "autoprefixer": "9.4.6",
+        "circular-dependency-plugin": "5.0.2",
+        "clean-css": "4.2.1",
+        "copy-webpack-plugin": "4.6.0",
+        "file-loader": "3.0.1",
+        "glob": "7.1.3",
+        "istanbul-instrumenter-loader": "3.0.1",
+        "karma-source-map-support": "1.3.0",
+        "less": "3.9.0",
+        "less-loader": "4.1.0",
+        "license-webpack-plugin": "2.1.0",
+        "loader-utils": "1.2.3",
+        "mini-css-extract-plugin": "0.5.0",
+        "minimatch": "3.0.4",
+        "node-sass": "4.11.0",
+        "opn": "5.4.0",
+        "parse5": "4.0.0",
+        "postcss": "7.0.14",
+        "postcss-import": "12.0.1",
+        "postcss-loader": "3.0.0",
+        "raw-loader": "1.0.0",
+        "rxjs": "6.3.3",
+        "sass-loader": "7.1.0",
+        "semver": "5.6.0",
+        "source-map-loader": "0.2.4",
+        "source-map-support": "0.5.10",
+        "speed-measure-webpack-plugin": "1.3.0",
+        "stats-webpack-plugin": "0.7.0",
+        "style-loader": "0.23.1",
+        "stylus": "0.54.5",
+        "stylus-loader": "3.0.2",
+        "terser-webpack-plugin": "1.2.2",
+        "tree-kill": "1.2.1",
+        "webpack": "4.29.0",
+        "webpack-dev-middleware": "3.5.1",
+        "webpack-dev-server": "3.1.14",
+        "webpack-merge": "4.2.1",
+        "webpack-sources": "1.3.0",
+        "webpack-subresource-integrity": "1.1.0-rc.6"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        },
+        "parse5": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+          "integrity": "sha1-bXhlbj2o14tOwLkG98CO8d/j9gg=",
+          "dev": true
+        },
+        "semver": {
+          "version": "5.6.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+          "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+          "dev": true
+        }
+      }
+    },
+    "@angular-devkit/build-optimizer": {
+      "version": "0.13.1",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.13.1.tgz",
+      "integrity": "sha512-LmvHiI3H451aVWY5Ac6Fqz0i1eX/mUfWN+uJvo8NaL6Jc0HKYX2o3l4ODr8UUECWWctUC9AMD522ZMwAvnvsKQ==",
+      "dev": true,
+      "requires": {
+        "loader-utils": "1.2.3",
+        "source-map": "0.5.6",
+        "typescript": "3.2.4",
+        "webpack-sources": "1.3.0"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        },
+        "source-map": {
+          "version": "0.5.6",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
+          "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
+          "dev": true
+        },
+        "typescript": {
+          "version": "3.2.4",
+          "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz",
+          "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==",
+          "dev": true
+        }
+      }
+    },
+    "@angular-devkit/build-webpack": {
+      "version": "0.13.1",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.13.1.tgz",
+      "integrity": "sha512-OGwC7bAl3u+w7Glw+OqIrN7OD1BkDXgrWbeQSpKAmsx6VdNPCnI4NPS+JldWNp70LVlE2nQlJUhtEqMVfBMnlg==",
+      "dev": true,
+      "requires": {
+        "@angular-devkit/architect": "0.13.1",
+        "@angular-devkit/core": "7.3.1",
+        "rxjs": "6.3.3"
+      }
+    },
+    "@angular-devkit/core": {
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.1.tgz",
+      "integrity": "sha512-56XDWWfIzOAkEk69lBLgmCYybPUA4yjunhmMlCk7vVdb7gbQUyzNjFD04Uj0GjlejatAQ5F76tRwygD9C+3RXQ==",
+      "dev": true,
+      "requires": {
+        "ajv": "6.7.0",
+        "chokidar": "2.0.4",
+        "fast-json-stable-stringify": "2.0.0",
+        "rxjs": "6.3.3",
+        "source-map": "0.7.3"
+      }
+    },
+    "@angular-devkit/schematics": {
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.3.1.tgz",
+      "integrity": "sha512-cd7usiasfSgw75INz72/VssrLr9tiVRYfo1TEdvr9ww0GuQbuQpB33xbV8W135eAV8+wzQ3Ce8ohaDHibvj6Yg==",
+      "dev": true,
+      "requires": {
+        "@angular-devkit/core": "7.3.1",
+        "rxjs": "6.3.3"
+      }
+    },
+    "@angular/animations": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-7.2.4.tgz",
+      "integrity": "sha512-Wx6cqU6koFOASlyl4aCygtbtROoehU6OKwV2EZTkfzHx6Eu/QyTiSa5kyoApVM5LMmCNeb8SxJMSAnKXztNl0A==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@angular/cdk": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-7.1.1.tgz",
+      "integrity": "sha1-aRayMDr14KVqm2T/TVRkLPGRxU8=",
+      "requires": {
+        "parse5": "^5.0.0",
+        "tslib": "^1.7.1"
+      }
+    },
+    "@angular/cli": {
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.3.1.tgz",
+      "integrity": "sha512-8EvXYRhTqTaTk5PKv7VZxIWJiyG51R9RC9gtpRFx4bbnurqBHdEUxGMmaRsGT8QDbfvVsWnuakE0eeW1CrfZAQ==",
+      "dev": true,
+      "requires": {
+        "@angular-devkit/architect": "0.13.1",
+        "@angular-devkit/core": "7.3.1",
+        "@angular-devkit/schematics": "7.3.1",
+        "@schematics/angular": "7.3.1",
+        "@schematics/update": "0.13.1",
+        "@yarnpkg/lockfile": "1.1.0",
+        "ini": "1.3.5",
+        "inquirer": "6.2.1",
+        "npm-package-arg": "6.1.0",
+        "opn": "5.4.0",
+        "pacote": "9.4.0",
+        "semver": "5.6.0",
+        "symbol-observable": "1.2.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.6.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+          "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+          "dev": true
+        }
+      }
+    },
+    "@angular/common": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/common/-/common-7.2.4.tgz",
+      "integrity": "sha512-3/i8RtnLTx/90gJHk5maE8zwsSiHgHvLItaa0qVfNlWiU0eCId/PL6TgDkut5vN9SQYL0oxhxFaVd35HmwsmuQ==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@angular/compiler": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-7.2.4.tgz",
+      "integrity": "sha512-+zyMzPCL45ePEV9nrnYJvhAVgp2Y19bDaq0f0YdZAqAjgDqHzXGGR6wX8GueyJWmUYWx5vwK6Apla4HwDrYA1w==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@angular/compiler-cli": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.2.4.tgz",
+      "integrity": "sha512-UhLosSeuwFIfaGqGcYOh9WSOuzEpeuhIRAOt81MeqOQEqkoreUjfxrQq8XWNkdqsPZHtiptF5ZwXlMBxlj9jJg==",
+      "dev": true,
+      "requires": {
+        "canonical-path": "1.0.0",
+        "chokidar": "^1.4.2",
+        "convert-source-map": "^1.5.1",
+        "dependency-graph": "^0.7.2",
+        "magic-string": "^0.25.0",
+        "minimist": "^1.2.0",
+        "reflect-metadata": "^0.1.2",
+        "shelljs": "^0.8.1",
+        "source-map": "^0.6.1",
+        "tslib": "^1.9.0",
+        "yargs": "9.0.1"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "anymatch": {
+          "version": "1.3.2",
+          "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+          "integrity": "sha1-VT3Lj5HjyImEXf26NMd3IbkLnXo=",
+          "dev": true,
+          "requires": {
+            "micromatch": "^2.1.5",
+            "normalize-path": "^2.0.0"
+          }
+        },
+        "arr-diff": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+          "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+          "dev": true,
+          "requires": {
+            "arr-flatten": "^1.0.1"
+          }
+        },
+        "array-unique": {
+          "version": "0.2.1",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+          "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+          "dev": true
+        },
+        "braces": {
+          "version": "1.8.5",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+          "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+          "dev": true,
+          "requires": {
+            "expand-range": "^1.8.1",
+            "preserve": "^0.2.0",
+            "repeat-element": "^1.1.2"
+          }
+        },
+        "camelcase": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+          "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+          "dev": true
+        },
+        "chokidar": {
+          "version": "1.7.0",
+          "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+          "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+          "dev": true,
+          "requires": {
+            "anymatch": "^1.3.0",
+            "async-each": "^1.0.0",
+            "fsevents": "^1.0.0",
+            "glob-parent": "^2.0.0",
+            "inherits": "^2.0.1",
+            "is-binary-path": "^1.0.0",
+            "is-glob": "^2.0.0",
+            "path-is-absolute": "^1.0.0",
+            "readdirp": "^2.0.0"
+          }
+        },
+        "cross-spawn": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^4.0.1",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        },
+        "execa": {
+          "version": "0.7.0",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+          "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^5.0.1",
+            "get-stream": "^3.0.0",
+            "is-stream": "^1.1.0",
+            "npm-run-path": "^2.0.0",
+            "p-finally": "^1.0.0",
+            "signal-exit": "^3.0.0",
+            "strip-eof": "^1.0.0"
+          }
+        },
+        "expand-brackets": {
+          "version": "0.1.5",
+          "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+          "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+          "dev": true,
+          "requires": {
+            "is-posix-bracket": "^0.1.0"
+          }
+        },
+        "extglob": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+          "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        },
+        "glob-parent": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+          "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+          "dev": true,
+          "requires": {
+            "is-glob": "^2.0.0"
+          }
+        },
+        "is-extglob": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+          "dev": true
+        },
+        "is-glob": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        },
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        },
+        "load-json-file": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+          "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "parse-json": "^2.2.0",
+            "pify": "^2.0.0",
+            "strip-bom": "^3.0.0"
+          }
+        },
+        "mem": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+          "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^1.0.0"
+          }
+        },
+        "micromatch": {
+          "version": "2.3.11",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+          "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+          "dev": true,
+          "requires": {
+            "arr-diff": "^2.0.0",
+            "array-unique": "^0.2.1",
+            "braces": "^1.8.2",
+            "expand-brackets": "^0.1.4",
+            "extglob": "^0.3.1",
+            "filename-regex": "^2.0.0",
+            "is-extglob": "^1.0.0",
+            "is-glob": "^2.0.1",
+            "kind-of": "^3.0.2",
+            "normalize-path": "^2.0.1",
+            "object.omit": "^2.0.0",
+            "parse-glob": "^3.0.4",
+            "regex-cache": "^0.4.2"
+          }
+        },
+        "os-locale": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+          "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=",
+          "dev": true,
+          "requires": {
+            "execa": "^0.7.0",
+            "lcid": "^1.0.0",
+            "mem": "^1.1.0"
+          }
+        },
+        "path-type": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+          "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+          "dev": true,
+          "requires": {
+            "pify": "^2.0.0"
+          }
+        },
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+          "dev": true
+        },
+        "read-pkg": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+          "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+          "dev": true,
+          "requires": {
+            "load-json-file": "^2.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^2.0.0"
+          }
+        },
+        "read-pkg-up": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+          "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+          "dev": true,
+          "requires": {
+            "find-up": "^2.0.0",
+            "read-pkg": "^2.0.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        },
+        "string-width": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+          "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
+          "dev": true,
+          "requires": {
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^4.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        },
+        "strip-bom": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+          "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+          "dev": true
+        },
+        "which-module": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+          "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+          "dev": true
+        },
+        "y18n": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+          "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+          "dev": true
+        },
+        "yargs": {
+          "version": "9.0.1",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz",
+          "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=",
+          "dev": true,
+          "requires": {
+            "camelcase": "^4.1.0",
+            "cliui": "^3.2.0",
+            "decamelize": "^1.1.1",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^2.0.0",
+            "read-pkg-up": "^2.0.0",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^1.0.1",
+            "set-blocking": "^2.0.0",
+            "string-width": "^2.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^3.2.1",
+            "yargs-parser": "^7.0.0"
+          }
+        },
+        "yargs-parser": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
+          "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
+          "dev": true,
+          "requires": {
+            "camelcase": "^4.1.0"
+          }
+        }
+      }
+    },
+    "@angular/core": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/core/-/core-7.2.4.tgz",
+      "integrity": "sha512-kfAxhIxl89PmB7y81FR/RAv0yWRFcEYxEnTwV+o8jKGfemAXtQ0g/Vh+lJR0SD/TBgFilMxotN1mhwH4A8GShw==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@angular/forms": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.2.4.tgz",
+      "integrity": "sha512-DAtOrdlTRsgvmZrsvczCAkY8dhTwZb5DXBmPuSXh0UR9lvEiCgNHGbwEiIiIkAHpw1wSeXZrq0qyy/oJRvf18g==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@angular/http": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/http/-/http-7.2.4.tgz",
+      "integrity": "sha512-kazJREm7MtSCYbE+9zU/CcUXI5Csu53PooeQlAp80/TOHqry6fVKIMHCI892Db9ScY2ds0SzbyTmrxEQo7PP1A==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@angular/language-service": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-7.2.4.tgz",
+      "integrity": "sha512-A9Rud/27hHMSUUjpgn57nVeLsoYgdvFwJhtlZA/oCuSpmlD+LqqBsEpPhivwn++u44+DSrFXsic29jlFnsBotw==",
+      "dev": true
+    },
+    "@angular/platform-browser": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-7.2.4.tgz",
+      "integrity": "sha512-Klt8aKR5SP9bqfMfpSY5vQOY7AQEs8JGuZOk5Bfc2dUtYT2IEIvK2IqO8v2rcFRVO13HOPUxl328efyHqLgI7g==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@angular/platform-browser-dynamic": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.2.4.tgz",
+      "integrity": "sha512-J/xWlmaYOPUoCHZ5TiIRiyYa4uRMtCz3aGdBfY8k/NWtNo8SCYaS3aut7Sk4RS5rK8aAVi+aYFlY5YOrlW+Hbg==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@angular/router": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/router/-/router-7.2.4.tgz",
+      "integrity": "sha512-T8Uqf2H1SV1MQI38WwYJ4aa+4NNnvlp2Tp/rkfg6tKcp/cLkKqE6OOfiy9lmW+i/624v8tMgYoBMOUNBjAG23g==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@biesbjerg/ngx-translate-extract": {
+      "version": "2.3.4",
+      "resolved": "https://registry.npmjs.org/@biesbjerg/ngx-translate-extract/-/ngx-translate-extract-2.3.4.tgz",
+      "integrity": "sha512-FzOdm5Jr2TMgdzTW+c6CGIgMQMCAXCyN6JYzz+hfnYjcvPrYbyR05AhM08W70nXD3a2RnbqjImNjEEcXY9pZ/g==",
+      "dev": true,
+      "requires": {
+        "chalk": "2.0.1",
+        "cheerio": "1.0.0-rc.2",
+        "flat": "2.0.1",
+        "fs": "0.0.1-security",
+        "gettext-parser": "1.2.2",
+        "glob": "7.1.2",
+        "mkdirp": "0.5.1",
+        "path": "0.12.7",
+        "typescript": "2.4.1",
+        "yargs": "8.0.2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "camelcase": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+          "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz",
+          "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^3.1.0",
+            "escape-string-regexp": "^1.0.5",
+            "supports-color": "^4.0.0"
+          }
+        },
+        "cross-spawn": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^4.0.1",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        },
+        "execa": {
+          "version": "0.7.0",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+          "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^5.0.1",
+            "get-stream": "^3.0.0",
+            "is-stream": "^1.1.0",
+            "npm-run-path": "^2.0.0",
+            "p-finally": "^1.0.0",
+            "signal-exit": "^3.0.0",
+            "strip-eof": "^1.0.0"
+          }
+        },
+        "glob": {
+          "version": "7.1.2",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+          "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "has-flag": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+          "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+          "dev": true
+        },
+        "load-json-file": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+          "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "parse-json": "^2.2.0",
+            "pify": "^2.0.0",
+            "strip-bom": "^3.0.0"
+          }
+        },
+        "mem": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+          "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^1.0.0"
+          }
+        },
+        "os-locale": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+          "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+          "dev": true,
+          "requires": {
+            "execa": "^0.7.0",
+            "lcid": "^1.0.0",
+            "mem": "^1.1.0"
+          }
+        },
+        "path-type": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+          "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+          "dev": true,
+          "requires": {
+            "pify": "^2.0.0"
+          }
+        },
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+          "dev": true
+        },
+        "read-pkg": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+          "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+          "dev": true,
+          "requires": {
+            "load-json-file": "^2.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^2.0.0"
+          }
+        },
+        "read-pkg-up": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+          "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+          "dev": true,
+          "requires": {
+            "find-up": "^2.0.0",
+            "read-pkg": "^2.0.0"
+          }
+        },
+        "string-width": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+          "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+          "dev": true,
+          "requires": {
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^4.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        },
+        "strip-bom": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+          "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "4.5.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+          "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^2.0.0"
+          }
+        },
+        "typescript": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.4.1.tgz",
+          "integrity": "sha1-w8yxbdqgsjFN4DHn5v7onlujRrw=",
+          "dev": true
+        },
+        "which-module": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+          "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+          "dev": true
+        },
+        "y18n": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+          "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+          "dev": true
+        },
+        "yargs": {
+          "version": "8.0.2",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
+          "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
+          "dev": true,
+          "requires": {
+            "camelcase": "^4.1.0",
+            "cliui": "^3.2.0",
+            "decamelize": "^1.1.1",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^2.0.0",
+            "read-pkg-up": "^2.0.0",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^1.0.1",
+            "set-blocking": "^2.0.0",
+            "string-width": "^2.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^3.2.1",
+            "yargs-parser": "^7.0.0"
+          }
+        },
+        "yargs-parser": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
+          "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
+          "dev": true,
+          "requires": {
+            "camelcase": "^4.1.0"
+          }
+        }
+      }
+    },
+    "@ngtools/webpack": {
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.3.1.tgz",
+      "integrity": "sha512-EGQRjgDf5XP+Fm1MdZNRFiPd9e1vhl11BhjkwqkAsewic4eoz6fqXfj/Osz1hQy8xU+2dPPf/byQ/+nY3E02Zg==",
+      "dev": true,
+      "requires": {
+        "@angular-devkit/core": "7.3.1",
+        "enhanced-resolve": "4.1.0",
+        "rxjs": "6.3.3",
+        "tree-kill": "1.2.1",
+        "webpack-sources": "1.3.0"
+      }
+    },
+    "@ngx-translate/core": {
+      "version": "11.0.1",
+      "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-11.0.1.tgz",
+      "integrity": "sha1-zs761B8GNo9YWdrEj+yPzESFYV8=",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@ngx-translate/http-loader": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-4.0.0.tgz",
+      "integrity": "sha1-ilVSSK1LfVE0YPzsnaJbBEeWLx0=",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@schematics/angular": {
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.3.1.tgz",
+      "integrity": "sha512-0Ne8APPlTAjKg5CSZqluwCuW/5yPjr3ALCWzqwPxN0suE745usThtasBmqrjw0RMIt8nRqRgtg54Z7lCPO9ZFg==",
+      "dev": true,
+      "requires": {
+        "@angular-devkit/core": "7.3.1",
+        "@angular-devkit/schematics": "7.3.1",
+        "typescript": "3.2.4"
+      },
+      "dependencies": {
+        "typescript": {
+          "version": "3.2.4",
+          "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz",
+          "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==",
+          "dev": true
+        }
+      }
+    },
+    "@schematics/update": {
+      "version": "0.13.1",
+      "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.13.1.tgz",
+      "integrity": "sha512-EHOqolT/d/jRGuVTCUESLpk8JNpuaPlsVHfeK7Kdp/t0wSEnmtOelZX4+leS25lGXDaDUF3138ntjrZR4n6bGw==",
+      "dev": true,
+      "requires": {
+        "@angular-devkit/core": "7.3.1",
+        "@angular-devkit/schematics": "7.3.1",
+        "@yarnpkg/lockfile": "1.1.0",
+        "ini": "1.3.5",
+        "pacote": "9.4.0",
+        "rxjs": "6.3.3",
+        "semver": "5.6.0",
+        "semver-intersect": "1.4.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.6.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+          "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+          "dev": true
+        }
+      }
+    },
+    "@types/jasmine": {
+      "version": "2.8.8",
+      "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.8.tgz",
+      "integrity": "sha512-OJSUxLaxXsjjhob2DBzqzgrkLmukM3+JMpRp0r0E4HTdT1nwDCWhaswjYxazPij6uOdzHCJfNbDjmQ1/rnNbCg==",
+      "dev": true
+    },
+    "@types/jasminewd2": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.3.tgz",
+      "integrity": "sha512-hYDVmQZT5VA2kigd4H4bv7vl/OhlympwREUemqBdOqtrYTo5Ytm12a5W5/nGgGYdanGVxj0x/VhZ7J3hOg/YKg==",
+      "dev": true,
+      "requires": {
+        "@types/jasmine": "*"
+      }
+    },
+    "@types/node": {
+      "version": "8.9.4",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-8.9.4.tgz",
+      "integrity": "sha512-dSvD36qnQs78G1BPsrZFdPpvLgMW/dnvr5+nTW2csMs5TiP9MOXrjUbnMZOEwnIuBklXtn7b6TPA2Cuq07bDHA==",
+      "dev": true
+    },
+    "@types/q": {
+      "version": "0.0.32",
+      "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz",
+      "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=",
+      "dev": true
+    },
+    "@types/selenium-webdriver": {
+      "version": "3.0.14",
+      "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.14.tgz",
+      "integrity": "sha1-CyCiNw5rG4MiycPfyqQJ5sfAwKk=",
+      "dev": true
+    },
+    "@types/source-list-map": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz",
+      "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==",
+      "dev": true
+    },
+    "@types/webpack-sources": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.5.tgz",
+      "integrity": "sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w==",
+      "dev": true,
+      "requires": {
+        "@types/node": "*",
+        "@types/source-list-map": "*",
+        "source-map": "^0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "@webassemblyjs/ast": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz",
+      "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/helper-module-context": "1.7.11",
+        "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+        "@webassemblyjs/wast-parser": "1.7.11"
+      }
+    },
+    "@webassemblyjs/floating-point-hex-parser": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz",
+      "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-api-error": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz",
+      "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-buffer": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz",
+      "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-code-frame": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz",
+      "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/wast-printer": "1.7.11"
+      }
+    },
+    "@webassemblyjs/helper-fsm": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz",
+      "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-module-context": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz",
+      "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz",
+      "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-wasm-section": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz",
+      "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/helper-buffer": "1.7.11",
+        "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+        "@webassemblyjs/wasm-gen": "1.7.11"
+      }
+    },
+    "@webassemblyjs/ieee754": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz",
+      "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==",
+      "dev": true,
+      "requires": {
+        "@xtuc/ieee754": "^1.2.0"
+      }
+    },
+    "@webassemblyjs/leb128": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz",
+      "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==",
+      "dev": true,
+      "requires": {
+        "@xtuc/long": "4.2.1"
+      }
+    },
+    "@webassemblyjs/utf8": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz",
+      "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==",
+      "dev": true
+    },
+    "@webassemblyjs/wasm-edit": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz",
+      "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/helper-buffer": "1.7.11",
+        "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+        "@webassemblyjs/helper-wasm-section": "1.7.11",
+        "@webassemblyjs/wasm-gen": "1.7.11",
+        "@webassemblyjs/wasm-opt": "1.7.11",
+        "@webassemblyjs/wasm-parser": "1.7.11",
+        "@webassemblyjs/wast-printer": "1.7.11"
+      }
+    },
+    "@webassemblyjs/wasm-gen": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz",
+      "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+        "@webassemblyjs/ieee754": "1.7.11",
+        "@webassemblyjs/leb128": "1.7.11",
+        "@webassemblyjs/utf8": "1.7.11"
+      }
+    },
+    "@webassemblyjs/wasm-opt": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz",
+      "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/helper-buffer": "1.7.11",
+        "@webassemblyjs/wasm-gen": "1.7.11",
+        "@webassemblyjs/wasm-parser": "1.7.11"
+      }
+    },
+    "@webassemblyjs/wasm-parser": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz",
+      "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/helper-api-error": "1.7.11",
+        "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+        "@webassemblyjs/ieee754": "1.7.11",
+        "@webassemblyjs/leb128": "1.7.11",
+        "@webassemblyjs/utf8": "1.7.11"
+      }
+    },
+    "@webassemblyjs/wast-parser": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz",
+      "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/floating-point-hex-parser": "1.7.11",
+        "@webassemblyjs/helper-api-error": "1.7.11",
+        "@webassemblyjs/helper-code-frame": "1.7.11",
+        "@webassemblyjs/helper-fsm": "1.7.11",
+        "@xtuc/long": "4.2.1"
+      }
+    },
+    "@webassemblyjs/wast-printer": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz",
+      "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/wast-parser": "1.7.11",
+        "@xtuc/long": "4.2.1"
+      }
+    },
+    "@xtuc/ieee754": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+      "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=",
+      "dev": true
+    },
+    "@xtuc/long": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz",
+      "integrity": "sha1-XIXWYvdvodNFdXZsXc1mFavNMNg=",
+      "dev": true
+    },
+    "@yarnpkg/lockfile": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
+      "integrity": "sha1-53qX+9NFt22DJF7c0X05OxtB+zE=",
+      "dev": true
+    },
+    "JSONStream": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+      "integrity": "sha1-MgjB8I06TZkmGrZPkjArwV4RHKA=",
+      "dev": true,
+      "requires": {
+        "jsonparse": "^1.2.0",
+        "through": ">=2.2.7 <3"
+      }
+    },
+    "abbrev": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+      "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=",
+      "dev": true,
+      "optional": true
+    },
+    "accepts": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+      "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+      "dev": true,
+      "requires": {
+        "mime-types": "~2.1.18",
+        "negotiator": "0.6.1"
+      }
+    },
+    "acorn": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.0.tgz",
+      "integrity": "sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw==",
+      "dev": true
+    },
+    "acorn-dynamic-import": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz",
+      "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==",
+      "dev": true
+    },
+    "adm-zip": {
+      "version": "0.4.13",
+      "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz",
+      "integrity": "sha1-WX4vjMNnIVHhMH0+lc3bx1ZyMUo=",
+      "dev": true
+    },
+    "after": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+      "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
+      "dev": true
+    },
+    "agent-base": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
+      "integrity": "sha1-2J5ZmfeXh1Z0wH2H8mD8Qeg+jKk=",
+      "dev": true,
+      "requires": {
+        "es6-promisify": "^5.0.0"
+      }
+    },
+    "agentkeepalive": {
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz",
+      "integrity": "sha1-oROSTdP6JKC8O3gQjEUMKr7gD2c=",
+      "dev": true,
+      "requires": {
+        "humanize-ms": "^1.2.1"
+      }
+    },
+    "ajv": {
+      "version": "6.7.0",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz",
+      "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==",
+      "dev": true,
+      "requires": {
+        "fast-deep-equal": "^2.0.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
+      }
+    },
+    "ajv-errors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+      "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=",
+      "dev": true
+    },
+    "ajv-keywords": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz",
+      "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==",
+      "dev": true
+    },
+    "amdefine": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+      "dev": true
+    },
+    "ansi-colors": {
+      "version": "3.2.3",
+      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
+      "integrity": "sha1-V9NbhoboUeLMBMQD8cACA5dqGBM=",
+      "dev": true
+    },
+    "ansi-escapes": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+      "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+      "dev": true
+    },
+    "ansi-html": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+      "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+      "dev": true
+    },
+    "ansi-regex": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+      "dev": true
+    },
+    "ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "dev": true,
+      "requires": {
+        "color-convert": "^1.9.0"
+      }
+    },
+    "anymatch": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+      "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
+      "dev": true,
+      "requires": {
+        "micromatch": "^3.1.4",
+        "normalize-path": "^2.1.1"
+      }
+    },
+    "app-root-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.1.0.tgz",
+      "integrity": "sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo=",
+      "dev": true
+    },
+    "append-transform": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz",
+      "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=",
+      "dev": true,
+      "requires": {
+        "default-require-extensions": "^1.0.0"
+      }
+    },
+    "aproba": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+      "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=",
+      "dev": true
+    },
+    "are-we-there-yet": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+      "integrity": "sha1-SzXClE8GKov82mZBB2A1D+nd/CE=",
+      "dev": true,
+      "requires": {
+        "delegates": "^1.0.0",
+        "readable-stream": "^2.0.6"
+      }
+    },
+    "argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=",
+      "dev": true,
+      "requires": {
+        "sprintf-js": "~1.0.2"
+      }
+    },
+    "arr-diff": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+      "dev": true
+    },
+    "arr-flatten": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+      "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=",
+      "dev": true
+    },
+    "arr-union": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+      "dev": true
+    },
+    "array-find-index": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+      "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+      "dev": true,
+      "optional": true
+    },
+    "array-flatten": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+      "integrity": "sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=",
+      "dev": true
+    },
+    "array-slice": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
+      "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
+      "dev": true
+    },
+    "array-union": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+      "dev": true,
+      "requires": {
+        "array-uniq": "^1.0.1"
+      }
+    },
+    "array-uniq": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+      "dev": true
+    },
+    "array-unique": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+      "dev": true
+    },
+    "arraybuffer.slice": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
+      "integrity": "sha1-O7xCdd1YTMGxCAm4nU6LY6aednU=",
+      "dev": true
+    },
+    "arrify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+      "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+      "dev": true
+    },
+    "asap": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+      "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
+      "dev": true,
+      "optional": true
+    },
+    "asn1": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+      "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=",
+      "dev": true,
+      "requires": {
+        "safer-buffer": "~2.1.0"
+      }
+    },
+    "asn1.js": {
+      "version": "4.10.1",
+      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+      "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.0.0",
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
+      }
+    },
+    "assert": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+      "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+      "dev": true,
+      "requires": {
+        "util": "0.10.3"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+          "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+          "dev": true
+        },
+        "util": {
+          "version": "0.10.3",
+          "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+          "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+          "dev": true,
+          "requires": {
+            "inherits": "2.0.1"
+          }
+        }
+      }
+    },
+    "assert-plus": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+      "dev": true
+    },
+    "assign-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+      "dev": true
+    },
+    "async": {
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
+      "integrity": "sha1-skWiPKcZMAROxT+kaqAKPofGphA=",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.10"
+      }
+    },
+    "async-each": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+      "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+      "dev": true
+    },
+    "async-foreach": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+      "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
+      "dev": true,
+      "optional": true
+    },
+    "async-limiter": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+      "integrity": "sha1-ePrtjD0HSrgfIrTphdeehzj3IPg=",
+      "dev": true
+    },
+    "asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+      "dev": true
+    },
+    "atob": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+      "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=",
+      "dev": true
+    },
+    "autoprefixer": {
+      "version": "9.4.6",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.6.tgz",
+      "integrity": "sha512-Yp51mevbOEdxDUy5WjiKtpQaecqYq9OqZSL04rSoCiry7Tc5I9FEyo3bfxiTJc1DfHeKwSFCUYbBAiOQ2VGfiw==",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.4.1",
+        "caniuse-lite": "^1.0.30000929",
+        "normalize-range": "^0.1.2",
+        "num2fraction": "^1.2.2",
+        "postcss": "^7.0.13",
+        "postcss-value-parser": "^3.3.1"
+      }
+    },
+    "aws-sign2": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+      "dev": true
+    },
+    "aws4": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+      "integrity": "sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8=",
+      "dev": true
+    },
+    "babel-code-frame": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+      "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+      "dev": true,
+      "requires": {
+        "chalk": "^1.1.3",
+        "esutils": "^2.0.2",
+        "js-tokens": "^3.0.2"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+          "dev": true
+        }
+      }
+    },
+    "babel-generator": {
+      "version": "6.26.1",
+      "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+      "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=",
+      "dev": true,
+      "requires": {
+        "babel-messages": "^6.23.0",
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "detect-indent": "^4.0.0",
+        "jsesc": "^1.3.0",
+        "lodash": "^4.17.4",
+        "source-map": "^0.5.7",
+        "trim-right": "^1.0.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "dev": true
+        }
+      }
+    },
+    "babel-messages": {
+      "version": "6.23.0",
+      "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+      "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-runtime": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+      "dev": true,
+      "requires": {
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.11.0"
+      }
+    },
+    "babel-template": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+      "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.26.0",
+        "babel-traverse": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "babylon": "^6.18.0",
+        "lodash": "^4.17.4"
+      }
+    },
+    "babel-traverse": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+      "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+      "dev": true,
+      "requires": {
+        "babel-code-frame": "^6.26.0",
+        "babel-messages": "^6.23.0",
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "babylon": "^6.18.0",
+        "debug": "^2.6.8",
+        "globals": "^9.18.0",
+        "invariant": "^2.2.2",
+        "lodash": "^4.17.4"
+      }
+    },
+    "babel-types": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+      "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.26.0",
+        "esutils": "^2.0.2",
+        "lodash": "^4.17.4",
+        "to-fast-properties": "^1.0.3"
+      }
+    },
+    "babylon": {
+      "version": "6.18.0",
+      "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+      "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=",
+      "dev": true
+    },
+    "backo2": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+      "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
+      "dev": true
+    },
+    "balanced-match": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+      "dev": true
+    },
+    "base": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+      "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=",
+      "dev": true,
+      "requires": {
+        "cache-base": "^1.0.1",
+        "class-utils": "^0.3.5",
+        "component-emitter": "^1.2.1",
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.1",
+        "mixin-deep": "^1.2.0",
+        "pascalcase": "^0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        }
+      }
+    },
+    "base64-arraybuffer": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+      "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
+      "dev": true
+    },
+    "base64-js": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
+      "integrity": "sha1-yrHmEY8FEJXli1KBrqjBzSK/wOM=",
+      "dev": true
+    },
+    "base64id": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
+      "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
+      "dev": true
+    },
+    "batch": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+      "dev": true
+    },
+    "bcrypt-pbkdf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+      "dev": true,
+      "requires": {
+        "tweetnacl": "^0.14.3"
+      }
+    },
+    "better-assert": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+      "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+      "dev": true,
+      "requires": {
+        "callsite": "1.0.0"
+      }
+    },
+    "big.js": {
+      "version": "5.2.2",
+      "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+      "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+      "dev": true
+    },
+    "binary-extensions": {
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz",
+      "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==",
+      "dev": true
+    },
+    "blob": {
+      "version": "0.0.5",
+      "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
+      "integrity": "sha1-1oDu7yX4zZGtUz9bAe7UjmTK9oM=",
+      "dev": true
+    },
+    "block-stream": {
+      "version": "0.0.9",
+      "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+      "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "inherits": "~2.0.0"
+      }
+    },
+    "blocking-proxy": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz",
+      "integrity": "sha1-gdb9H+E6TA1pV99/kbdemNrEDLI=",
+      "dev": true,
+      "requires": {
+        "minimist": "^1.2.0"
+      }
+    },
+    "bluebird": {
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
+      "integrity": "sha1-fQHG+WFsmlGrD4xUmnnf5uwz76c=",
+      "dev": true
+    },
+    "bn.js": {
+      "version": "4.11.8",
+      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+      "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=",
+      "dev": true
+    },
+    "body-parser": {
+      "version": "1.18.3",
+      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
+      "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
+      "dev": true,
+      "requires": {
+        "bytes": "3.0.0",
+        "content-type": "~1.0.4",
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "http-errors": "~1.6.3",
+        "iconv-lite": "0.4.23",
+        "on-finished": "~2.3.0",
+        "qs": "6.5.2",
+        "raw-body": "2.3.3",
+        "type-is": "~1.6.16"
+      }
+    },
+    "bonjour": {
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+      "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+      "dev": true,
+      "requires": {
+        "array-flatten": "^2.1.0",
+        "deep-equal": "^1.0.1",
+        "dns-equal": "^1.0.0",
+        "dns-txt": "^2.0.2",
+        "multicast-dns": "^6.0.1",
+        "multicast-dns-service-types": "^1.1.0"
+      }
+    },
+    "boolbase": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+      "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+      "dev": true
+    },
+    "bootstrap": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.1.3.tgz",
+      "integrity": "sha512-rDFIzgXcof0jDyjNosjv4Sno77X4KuPeFxG2XZZv1/Kc8DRVGVADdoQyyOVDwPqL36DDmtCQbrpMCqvpPLJQ0w=="
+    },
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
+      "dev": true,
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "braces": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+      "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=",
+      "dev": true,
+      "requires": {
+        "arr-flatten": "^1.1.0",
+        "array-unique": "^0.3.2",
+        "extend-shallow": "^2.0.1",
+        "fill-range": "^4.0.0",
+        "isobject": "^3.0.1",
+        "repeat-element": "^1.1.2",
+        "snapdragon": "^0.8.1",
+        "snapdragon-node": "^2.0.1",
+        "split-string": "^3.0.2",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "brorand": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+      "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+      "dev": true
+    },
+    "browserify-aes": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+      "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=",
+      "dev": true,
+      "requires": {
+        "buffer-xor": "^1.0.3",
+        "cipher-base": "^1.0.0",
+        "create-hash": "^1.1.0",
+        "evp_bytestokey": "^1.0.3",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "browserify-cipher": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+      "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=",
+      "dev": true,
+      "requires": {
+        "browserify-aes": "^1.0.4",
+        "browserify-des": "^1.0.0",
+        "evp_bytestokey": "^1.0.0"
+      }
+    },
+    "browserify-des": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+      "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=",
+      "dev": true,
+      "requires": {
+        "cipher-base": "^1.0.1",
+        "des.js": "^1.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
+    "browserify-rsa": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+      "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.1.0",
+        "randombytes": "^2.0.1"
+      }
+    },
+    "browserify-sign": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+      "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.1.1",
+        "browserify-rsa": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "create-hmac": "^1.1.2",
+        "elliptic": "^6.0.0",
+        "inherits": "^2.0.1",
+        "parse-asn1": "^5.0.0"
+      }
+    },
+    "browserify-zlib": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+      "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=",
+      "dev": true,
+      "requires": {
+        "pako": "~1.0.5"
+      }
+    },
+    "browserslist": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz",
+      "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==",
+      "dev": true,
+      "requires": {
+        "caniuse-lite": "^1.0.30000929",
+        "electron-to-chromium": "^1.3.103",
+        "node-releases": "^1.1.3"
+      }
+    },
+    "browserstack": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.2.tgz",
+      "integrity": "sha512-+6AFt9HzhKykcPF79W6yjEUJcdvZOV0lIXdkORXMJftGrDl0OKWqRF4GHqpDNkxiceDT/uB7Fb/aDwktvXX7dg==",
+      "dev": true,
+      "requires": {
+        "https-proxy-agent": "^2.2.1"
+      }
+    },
+    "buffer": {
+      "version": "4.9.1",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+      "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+      "dev": true,
+      "requires": {
+        "base64-js": "^1.0.2",
+        "ieee754": "^1.1.4",
+        "isarray": "^1.0.0"
+      }
+    },
+    "buffer-alloc": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+      "integrity": "sha1-iQ3ZDZI6hz4I4Q5f1RpX5bfM4Ow=",
+      "dev": true,
+      "requires": {
+        "buffer-alloc-unsafe": "^1.1.0",
+        "buffer-fill": "^1.0.0"
+      }
+    },
+    "buffer-alloc-unsafe": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+      "integrity": "sha1-vX3CauKXLQ7aJTvgYdupkjScGfA=",
+      "dev": true
+    },
+    "buffer-fill": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+      "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
+      "dev": true
+    },
+    "buffer-from": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+      "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=",
+      "dev": true
+    },
+    "buffer-indexof": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+      "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=",
+      "dev": true
+    },
+    "buffer-xor": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+      "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+      "dev": true
+    },
+    "builtin-modules": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+      "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+      "dev": true
+    },
+    "builtin-status-codes": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+      "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+      "dev": true
+    },
+    "builtins": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz",
+      "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=",
+      "dev": true
+    },
+    "bytes": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+      "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+      "dev": true
+    },
+    "cacache": {
+      "version": "10.0.4",
+      "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
+      "integrity": "sha1-ZFI2eZnv+dQYiu/ZoU6dfGomNGA=",
+      "dev": true,
+      "requires": {
+        "bluebird": "^3.5.1",
+        "chownr": "^1.0.1",
+        "glob": "^7.1.2",
+        "graceful-fs": "^4.1.11",
+        "lru-cache": "^4.1.1",
+        "mississippi": "^2.0.0",
+        "mkdirp": "^0.5.1",
+        "move-concurrently": "^1.0.1",
+        "promise-inflight": "^1.0.1",
+        "rimraf": "^2.6.2",
+        "ssri": "^5.2.4",
+        "unique-filename": "^1.1.0",
+        "y18n": "^4.0.0"
+      }
+    },
+    "cache-base": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+      "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=",
+      "dev": true,
+      "requires": {
+        "collection-visit": "^1.0.0",
+        "component-emitter": "^1.2.1",
+        "get-value": "^2.0.6",
+        "has-value": "^1.0.0",
+        "isobject": "^3.0.1",
+        "set-value": "^2.0.0",
+        "to-object-path": "^0.3.0",
+        "union-value": "^1.0.0",
+        "unset-value": "^1.0.0"
+      }
+    },
+    "callsite": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+      "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
+      "dev": true
+    },
+    "camelcase": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+      "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+      "dev": true,
+      "optional": true
+    },
+    "camelcase-keys": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+      "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "camelcase": "^2.0.0",
+        "map-obj": "^1.0.0"
+      }
+    },
+    "caniuse-lite": {
+      "version": "1.0.30000936",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000936.tgz",
+      "integrity": "sha512-orX4IdpbFhdNO7bTBhSbahp1EBpqzBc+qrvTRVUFfZgA4zta7TdM6PN5ZxkEUgDnz36m+PfWGcdX7AVfFWItJw==",
+      "dev": true
+    },
+    "canonical-path": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz",
+      "integrity": "sha1-/LRwwjlY3vhQgYVr56hukE8YDR0=",
+      "dev": true
+    },
+    "caseless": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+      "dev": true
+    },
+    "chalk": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+      "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=",
+      "dev": true,
+      "requires": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      }
+    },
+    "chardet": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+      "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=",
+      "dev": true
+    },
+    "chart.js": {
+      "version": "2.9.3",
+      "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.3.tgz",
+      "integrity": "sha512-+2jlOobSk52c1VU6fzkh3UwqHMdSlgH1xFv9FKMqHiNCpXsGPQa/+81AFa+i3jZ253Mq9aAycPwDjnn1XbRNNw==",
+      "requires": {
+        "chartjs-color": "^2.1.0",
+        "moment": "^2.10.2"
+      }
+    },
+    "chartjs-color": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz",
+      "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==",
+      "requires": {
+        "chartjs-color-string": "^0.6.0",
+        "color-convert": "^1.9.3"
+      }
+    },
+    "chartjs-color-string": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz",
+      "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==",
+      "requires": {
+        "color-name": "^1.0.0"
+      }
+    },
+    "cheerio": {
+      "version": "1.0.0-rc.2",
+      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz",
+      "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=",
+      "dev": true,
+      "requires": {
+        "css-select": "~1.2.0",
+        "dom-serializer": "~0.1.0",
+        "entities": "~1.1.1",
+        "htmlparser2": "^3.9.1",
+        "lodash": "^4.15.0",
+        "parse5": "^3.0.1"
+      },
+      "dependencies": {
+        "parse5": {
+          "version": "3.0.3",
+          "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
+          "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
+          "dev": true,
+          "requires": {
+            "@types/node": "*"
+          }
+        }
+      }
+    },
+    "chokidar": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
+      "integrity": "sha1-NW/04rDo5D4yLRijckYLvPOszSY=",
+      "dev": true,
+      "requires": {
+        "anymatch": "^2.0.0",
+        "async-each": "^1.0.0",
+        "braces": "^2.3.0",
+        "fsevents": "^1.2.2",
+        "glob-parent": "^3.1.0",
+        "inherits": "^2.0.1",
+        "is-binary-path": "^1.0.0",
+        "is-glob": "^4.0.0",
+        "lodash.debounce": "^4.0.8",
+        "normalize-path": "^2.1.1",
+        "path-is-absolute": "^1.0.0",
+        "readdirp": "^2.0.0",
+        "upath": "^1.0.5"
+      }
+    },
+    "chownr": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
+      "integrity": "sha1-VHJri4//TfBTxCGH6AH7RBLfFJQ=",
+      "dev": true
+    },
+    "chrome-trace-event": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz",
+      "integrity": "sha1-Rakb0sIMlBHwljtarrmhuV4JzEg=",
+      "dev": true,
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "cipher-base": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+      "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "circular-dependency-plugin": {
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.0.2.tgz",
+      "integrity": "sha1-2haMCzfntDVj+5+RLBwAfCEzie8=",
+      "dev": true
+    },
+    "circular-json": {
+      "version": "0.5.9",
+      "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz",
+      "integrity": "sha1-kydjroj0996teg0JyKUaR0OlOx0=",
+      "dev": true
+    },
+    "class-transformer": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.1.6.tgz",
+      "integrity": "sha1-ETnBSTEcDITe08AOKoeeNHn2D6A="
+    },
+    "class-utils": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+      "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=",
+      "dev": true,
+      "requires": {
+        "arr-union": "^3.1.0",
+        "define-property": "^0.2.5",
+        "isobject": "^3.0.0",
+        "static-extend": "^0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "clean-css": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz",
+      "integrity": "sha1-LUEe92uFabbQyEBo2r6FsKpeXBc=",
+      "dev": true,
+      "requires": {
+        "source-map": "~0.6.0"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "cli-cursor": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+      "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+      "dev": true,
+      "requires": {
+        "restore-cursor": "^2.0.0"
+      }
+    },
+    "cli-width": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+      "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+      "dev": true
+    },
+    "cliui": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+      "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+      "dev": true,
+      "requires": {
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1",
+        "wrap-ansi": "^2.0.0"
+      }
+    },
+    "clone": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+      "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+      "dev": true
+    },
+    "clone-deep": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz",
+      "integrity": "sha1-ANs6Hhc2VnMNEYjD1qztbX6pdxM=",
+      "dev": true,
+      "requires": {
+        "for-own": "^1.0.0",
+        "is-plain-object": "^2.0.4",
+        "kind-of": "^6.0.0",
+        "shallow-clone": "^1.0.0"
+      }
+    },
+    "co": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+      "dev": true
+    },
+    "code-point-at": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+      "dev": true
+    },
+    "codelyzer": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.5.0.tgz",
+      "integrity": "sha1-pl3e7soolGUyU6ib+iKRGP+fWbE=",
+      "dev": true,
+      "requires": {
+        "app-root-path": "^2.1.0",
+        "css-selector-tokenizer": "^0.7.0",
+        "cssauron": "^1.4.0",
+        "semver-dsl": "^1.0.1",
+        "source-map": "^0.5.7",
+        "sprintf-js": "^1.1.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "dev": true
+        },
+        "sprintf-js": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
+          "integrity": "sha1-2hdlJiv4wPVxdJ8q1sJjACB65nM=",
+          "dev": true
+        }
+      }
+    },
+    "collection-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+      "dev": true,
+      "requires": {
+        "map-visit": "^1.0.0",
+        "object-visit": "^1.0.0"
+      }
+    },
+    "color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+      "requires": {
+        "color-name": "1.1.3"
+      }
+    },
+    "color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+    },
+    "colors": {
+      "version": "1.1.2",
+      "resolved": "http://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+      "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+      "dev": true
+    },
+    "combine-lists": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz",
+      "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.5.0"
+      }
+    },
+    "combined-stream": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
+      "integrity": "sha1-LR0kMXr7ir6V1tLAsHtXgTU52Cg=",
+      "dev": true,
+      "requires": {
+        "delayed-stream": "~1.0.0"
+      }
+    },
+    "commander": {
+      "version": "2.17.1",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+      "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=",
+      "dev": true
+    },
+    "commondir": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+      "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+      "dev": true
+    },
+    "component-bind": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+      "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
+      "dev": true
+    },
+    "component-emitter": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+      "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+      "dev": true
+    },
+    "component-inherit": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+      "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
+      "dev": true
+    },
+    "compressible": {
+      "version": "2.0.15",
+      "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz",
+      "integrity": "sha1-hXqasKfloH2Ng37UP+Le//ZP4hI=",
+      "dev": true,
+      "requires": {
+        "mime-db": ">= 1.36.0 < 2"
+      }
+    },
+    "compression": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz",
+      "integrity": "sha1-J+DhdqryYPfywoE8PkQK258Zk9s=",
+      "dev": true,
+      "requires": {
+        "accepts": "~1.3.5",
+        "bytes": "3.0.0",
+        "compressible": "~2.0.14",
+        "debug": "2.6.9",
+        "on-headers": "~1.0.1",
+        "safe-buffer": "5.1.2",
+        "vary": "~1.1.2"
+      }
+    },
+    "concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+      "dev": true
+    },
+    "concat-stream": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+      "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=",
+      "dev": true,
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.2.2",
+        "typedarray": "^0.0.6"
+      }
+    },
+    "connect": {
+      "version": "3.6.6",
+      "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
+      "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.9",
+        "finalhandler": "1.1.0",
+        "parseurl": "~1.3.2",
+        "utils-merge": "1.0.1"
+      },
+      "dependencies": {
+        "finalhandler": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
+          "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
+          "dev": true,
+          "requires": {
+            "debug": "2.6.9",
+            "encodeurl": "~1.0.1",
+            "escape-html": "~1.0.3",
+            "on-finished": "~2.3.0",
+            "parseurl": "~1.3.2",
+            "statuses": "~1.3.1",
+            "unpipe": "~1.0.0"
+          }
+        },
+        "statuses": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+          "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+          "dev": true
+        }
+      }
+    },
+    "connect-history-api-fallback": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+      "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
+      "dev": true
+    },
+    "console-browserify": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+      "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+      "dev": true,
+      "requires": {
+        "date-now": "^0.1.4"
+      }
+    },
+    "console-control-strings": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+      "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+      "dev": true
+    },
+    "constants-browserify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+      "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+      "dev": true
+    },
+    "content-disposition": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
+      "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=",
+      "dev": true
+    },
+    "content-type": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+      "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=",
+      "dev": true
+    },
+    "convert-source-map": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+      "integrity": "sha1-UbU3qMQ+DwTewZk7/83VBOdYrCA=",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "~5.1.1"
+      }
+    },
+    "cookie": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+      "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+      "dev": true
+    },
+    "cookie-signature": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+      "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+      "dev": true
+    },
+    "copy-concurrently": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+      "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.1.1",
+        "fs-write-stream-atomic": "^1.0.8",
+        "iferr": "^0.1.5",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.5.4",
+        "run-queue": "^1.0.0"
+      }
+    },
+    "copy-descriptor": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+      "dev": true
+    },
+    "copy-webpack-plugin": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz",
+      "integrity": "sha1-5/QN2KaEd9QF3Rt6hUquMksVi64=",
+      "dev": true,
+      "requires": {
+        "cacache": "^10.0.4",
+        "find-cache-dir": "^1.0.0",
+        "globby": "^7.1.1",
+        "is-glob": "^4.0.0",
+        "loader-utils": "^1.1.0",
+        "minimatch": "^3.0.4",
+        "p-limit": "^1.0.0",
+        "serialize-javascript": "^1.4.0"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        }
+      }
+    },
+    "core-js": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.0.tgz",
+      "integrity": "sha1-HjB5Pp7leCswfjf/oi2g6s3dhNQ="
+    },
+    "core-util-is": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+      "dev": true
+    },
+    "cosmiconfig": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz",
+      "integrity": "sha1-dgORVJWAu9LfHlYrwXexPCkJctw=",
+      "dev": true,
+      "requires": {
+        "is-directory": "^0.3.1",
+        "js-yaml": "^3.9.0",
+        "parse-json": "^4.0.0",
+        "require-from-string": "^2.0.1"
+      },
+      "dependencies": {
+        "parse-json": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+          "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+          "dev": true,
+          "requires": {
+            "error-ex": "^1.3.1",
+            "json-parse-better-errors": "^1.0.1"
+          }
+        }
+      }
+    },
+    "create-ecdh": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+      "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.1.0",
+        "elliptic": "^6.0.0"
+      }
+    },
+    "create-hash": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+      "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=",
+      "dev": true,
+      "requires": {
+        "cipher-base": "^1.0.1",
+        "inherits": "^2.0.1",
+        "md5.js": "^1.3.4",
+        "ripemd160": "^2.0.1",
+        "sha.js": "^2.4.0"
+      }
+    },
+    "create-hmac": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+      "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=",
+      "dev": true,
+      "requires": {
+        "cipher-base": "^1.0.3",
+        "create-hash": "^1.1.0",
+        "inherits": "^2.0.1",
+        "ripemd160": "^2.0.0",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
+      }
+    },
+    "cross-spawn": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
+      "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "lru-cache": "^4.0.1",
+        "which": "^1.2.9"
+      }
+    },
+    "crypto-browserify": {
+      "version": "3.12.0",
+      "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+      "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=",
+      "dev": true,
+      "requires": {
+        "browserify-cipher": "^1.0.0",
+        "browserify-sign": "^4.0.0",
+        "create-ecdh": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "create-hmac": "^1.1.0",
+        "diffie-hellman": "^5.0.0",
+        "inherits": "^2.0.1",
+        "pbkdf2": "^3.0.3",
+        "public-encrypt": "^4.0.0",
+        "randombytes": "^2.0.0",
+        "randomfill": "^1.0.3"
+      }
+    },
+    "css-parse": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz",
+      "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=",
+      "dev": true
+    },
+    "css-select": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+      "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+      "dev": true,
+      "requires": {
+        "boolbase": "~1.0.0",
+        "css-what": "2.1",
+        "domutils": "1.5.1",
+        "nth-check": "~1.0.1"
+      }
+    },
+    "css-selector-tokenizer": {
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz",
+      "integrity": "sha1-oXcnGovKUBkXL0+JH8bu2cv2jV0=",
+      "dev": true,
+      "requires": {
+        "cssesc": "^0.1.0",
+        "fastparse": "^1.1.1",
+        "regexpu-core": "^1.0.0"
+      }
+    },
+    "css-what": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
+      "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
+      "dev": true
+    },
+    "cssauron": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz",
+      "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=",
+      "dev": true,
+      "requires": {
+        "through": "X.X.X"
+      }
+    },
+    "cssesc": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz",
+      "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=",
+      "dev": true
+    },
+    "currently-unhandled": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+      "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "array-find-index": "^1.0.1"
+      }
+    },
+    "custom-event": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
+      "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=",
+      "dev": true
+    },
+    "cyclist": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
+      "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=",
+      "dev": true
+    },
+    "dashdash": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "date-format": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz",
+      "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=",
+      "dev": true
+    },
+    "date-now": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+      "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+      "dev": true
+    },
+    "debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+      "dev": true,
+      "requires": {
+        "ms": "2.0.0"
+      }
+    },
+    "decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+      "dev": true
+    },
+    "decode-uri-component": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+      "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+      "dev": true
+    },
+    "deep-equal": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+      "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
+      "dev": true
+    },
+    "default-gateway": {
+      "version": "2.7.2",
+      "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.7.2.tgz",
+      "integrity": "sha1-t+8znl4CSwRUZ69APVA0jbRkLQ8=",
+      "dev": true,
+      "requires": {
+        "execa": "^0.10.0",
+        "ip-regex": "^2.1.0"
+      }
+    },
+    "default-require-extensions": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz",
+      "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=",
+      "dev": true,
+      "requires": {
+        "strip-bom": "^2.0.0"
+      }
+    },
+    "define-property": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+      "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=",
+      "dev": true,
+      "requires": {
+        "is-descriptor": "^1.0.2",
+        "isobject": "^3.0.1"
+      },
+      "dependencies": {
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        }
+      }
+    },
+    "del": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
+      "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
+      "dev": true,
+      "requires": {
+        "globby": "^6.1.0",
+        "is-path-cwd": "^1.0.0",
+        "is-path-in-cwd": "^1.0.0",
+        "p-map": "^1.1.1",
+        "pify": "^3.0.0",
+        "rimraf": "^2.2.8"
+      },
+      "dependencies": {
+        "globby": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+          "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+          "dev": true,
+          "requires": {
+            "array-union": "^1.0.1",
+            "glob": "^7.0.3",
+            "object-assign": "^4.0.1",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          },
+          "dependencies": {
+            "pify": {
+              "version": "2.3.0",
+              "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+              "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+              "dev": true
+            }
+          }
+        }
+      }
+    },
+    "delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+      "dev": true
+    },
+    "delegates": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+      "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+      "dev": true
+    },
+    "depd": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+      "dev": true
+    },
+    "dependency-graph": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz",
+      "integrity": "sha1-kdud5utyaZIJ2IrqTB/VIhysHEk=",
+      "dev": true
+    },
+    "des.js": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+      "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
+      }
+    },
+    "destroy": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+      "dev": true
+    },
+    "detect-indent": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+      "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+      "dev": true,
+      "requires": {
+        "repeating": "^2.0.0"
+      }
+    },
+    "detect-node": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
+      "integrity": "sha1-AU7o+PZpxcWAI9pkuBecCDooxGw=",
+      "dev": true
+    },
+    "di": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
+      "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=",
+      "dev": true
+    },
+    "diff": {
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+      "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=",
+      "dev": true
+    },
+    "diffie-hellman": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+      "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.1.0",
+        "miller-rabin": "^4.0.0",
+        "randombytes": "^2.0.0"
+      }
+    },
+    "dir-glob": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
+      "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
+      "dev": true,
+      "requires": {
+        "path-type": "^3.0.0"
+      }
+    },
+    "dns-equal": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+      "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+      "dev": true
+    },
+    "dns-packet": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz",
+      "integrity": "sha1-EqpCaYEHW+UAuRDu3NC0fdfe2lo=",
+      "dev": true,
+      "requires": {
+        "ip": "^1.1.0",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "dns-txt": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
+      "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+      "dev": true,
+      "requires": {
+        "buffer-indexof": "^1.0.0"
+      }
+    },
+    "dom-serialize": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz",
+      "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=",
+      "dev": true,
+      "requires": {
+        "custom-event": "~1.0.0",
+        "ent": "~2.2.0",
+        "extend": "^3.0.0",
+        "void-elements": "^2.0.0"
+      }
+    },
+    "dom-serializer": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
+      "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
+      "dev": true,
+      "requires": {
+        "domelementtype": "^1.3.0",
+        "entities": "^1.1.1"
+      }
+    },
+    "domain-browser": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+      "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=",
+      "dev": true
+    },
+    "domelementtype": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+      "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+      "dev": true
+    },
+    "domhandler": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+      "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+      "dev": true,
+      "requires": {
+        "domelementtype": "1"
+      }
+    },
+    "domutils": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+      "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+      "dev": true,
+      "requires": {
+        "dom-serializer": "0",
+        "domelementtype": "1"
+      }
+    },
+    "duplexify": {
+      "version": "3.7.1",
+      "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+      "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "^1.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0",
+        "stream-shift": "^1.0.0"
+      }
+    },
+    "ecc-jsbn": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+      "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+      "dev": true,
+      "requires": {
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.1.0"
+      }
+    },
+    "ee-first": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+      "dev": true
+    },
+    "electron-to-chromium": {
+      "version": "1.3.113",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz",
+      "integrity": "sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==",
+      "dev": true
+    },
+    "elliptic": {
+      "version": "6.4.1",
+      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
+      "integrity": "sha1-wtC3d2kRuGcixjLDwGxg8vgZk5o=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.4.0",
+        "brorand": "^1.0.1",
+        "hash.js": "^1.0.0",
+        "hmac-drbg": "^1.0.0",
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.0"
+      }
+    },
+    "emojis-list": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+      "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+      "dev": true
+    },
+    "encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+      "dev": true
+    },
+    "encoding": {
+      "version": "0.1.12",
+      "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
+      "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+      "dev": true,
+      "requires": {
+        "iconv-lite": "~0.4.13"
+      }
+    },
+    "end-of-stream": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+      "integrity": "sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=",
+      "dev": true,
+      "requires": {
+        "once": "^1.4.0"
+      }
+    },
+    "engine.io": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz",
+      "integrity": "sha1-tgKBw1SEpw7gNR6g6/+D7IyVIqI=",
+      "dev": true,
+      "requires": {
+        "accepts": "~1.3.4",
+        "base64id": "1.0.0",
+        "cookie": "0.3.1",
+        "debug": "~3.1.0",
+        "engine.io-parser": "~2.1.0",
+        "ws": "~3.3.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "engine.io-client": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz",
+      "integrity": "sha1-b1TAR13khxWKGnx30QF4cItq3TY=",
+      "dev": true,
+      "requires": {
+        "component-emitter": "1.2.1",
+        "component-inherit": "0.0.3",
+        "debug": "~3.1.0",
+        "engine.io-parser": "~2.1.1",
+        "has-cors": "1.1.0",
+        "indexof": "0.0.1",
+        "parseqs": "0.0.5",
+        "parseuri": "0.0.5",
+        "ws": "~3.3.1",
+        "xmlhttprequest-ssl": "~1.5.4",
+        "yeast": "0.1.2"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "engine.io-parser": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz",
+      "integrity": "sha1-dXq5cPvy37Mse3SwMyFtVznveaY=",
+      "dev": true,
+      "requires": {
+        "after": "0.8.2",
+        "arraybuffer.slice": "~0.0.7",
+        "base64-arraybuffer": "0.1.5",
+        "blob": "0.0.5",
+        "has-binary2": "~1.0.2"
+      }
+    },
+    "enhanced-resolve": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
+      "integrity": "sha1-Qcfgv9/nSsH/4eV61qXGyfN0Kn8=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "memory-fs": "^0.4.0",
+        "tapable": "^1.0.0"
+      }
+    },
+    "ent": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
+      "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=",
+      "dev": true
+    },
+    "entities": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+      "integrity": "sha1-vfpzUplmTfr9NFKe1PhSKidf6lY=",
+      "dev": true
+    },
+    "err-code": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz",
+      "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=",
+      "dev": true
+    },
+    "errno": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+      "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=",
+      "dev": true,
+      "requires": {
+        "prr": "~1.0.1"
+      }
+    },
+    "error-ex": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+      "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=",
+      "dev": true,
+      "requires": {
+        "is-arrayish": "^0.2.1"
+      }
+    },
+    "es6-promise": {
+      "version": "4.2.5",
+      "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz",
+      "integrity": "sha1-2m0NVpLvtGHggsFIF/4kJ9j10FQ=",
+      "dev": true
+    },
+    "es6-promisify": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
+      "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
+      "dev": true,
+      "requires": {
+        "es6-promise": "^4.0.3"
+      }
+    },
+    "escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+      "dev": true
+    },
+    "escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+      "dev": true
+    },
+    "eslint-scope": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz",
+      "integrity": "sha1-UL8wcekzi83EMzF5Sgy1M/ATYXI=",
+      "dev": true,
+      "requires": {
+        "esrecurse": "^4.1.0",
+        "estraverse": "^4.1.1"
+      }
+    },
+    "esrecurse": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+      "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=",
+      "dev": true,
+      "requires": {
+        "estraverse": "^4.1.0"
+      }
+    },
+    "estraverse": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+      "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+      "dev": true
+    },
+    "esutils": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+      "dev": true
+    },
+    "etag": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+      "dev": true
+    },
+    "eventemitter3": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz",
+      "integrity": "sha1-CQtNbNvWRe0Qv3UNS1QHlC17oWM=",
+      "dev": true
+    },
+    "events": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz",
+      "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==",
+      "dev": true
+    },
+    "eventsource": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz",
+      "integrity": "sha1-j7xyyT/NNAiAkLwKTmT0tc7m2NA=",
+      "dev": true,
+      "requires": {
+        "original": "^1.0.0"
+      }
+    },
+    "evp_bytestokey": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+      "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=",
+      "dev": true,
+      "requires": {
+        "md5.js": "^1.3.4",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "execa": {
+      "version": "0.10.0",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz",
+      "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==",
+      "dev": true,
+      "requires": {
+        "cross-spawn": "^6.0.0",
+        "get-stream": "^3.0.0",
+        "is-stream": "^1.1.0",
+        "npm-run-path": "^2.0.0",
+        "p-finally": "^1.0.0",
+        "signal-exit": "^3.0.0",
+        "strip-eof": "^1.0.0"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "6.0.5",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+          "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+          "dev": true,
+          "requires": {
+            "nice-try": "^1.0.4",
+            "path-key": "^2.0.1",
+            "semver": "^5.5.0",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        }
+      }
+    },
+    "exit": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+      "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+      "dev": true
+    },
+    "expand-braces": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz",
+      "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=",
+      "dev": true,
+      "requires": {
+        "array-slice": "^0.2.3",
+        "array-unique": "^0.2.1",
+        "braces": "^0.1.2"
+      },
+      "dependencies": {
+        "array-unique": {
+          "version": "0.2.1",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+          "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+          "dev": true
+        },
+        "braces": {
+          "version": "0.1.5",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz",
+          "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=",
+          "dev": true,
+          "requires": {
+            "expand-range": "^0.1.0"
+          }
+        },
+        "expand-range": {
+          "version": "0.1.1",
+          "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz",
+          "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=",
+          "dev": true,
+          "requires": {
+            "is-number": "^0.1.1",
+            "repeat-string": "^0.2.2"
+          }
+        },
+        "is-number": {
+          "version": "0.1.1",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz",
+          "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=",
+          "dev": true
+        },
+        "repeat-string": {
+          "version": "0.2.2",
+          "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz",
+          "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=",
+          "dev": true
+        }
+      }
+    },
+    "expand-brackets": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+      "dev": true,
+      "requires": {
+        "debug": "^2.3.3",
+        "define-property": "^0.2.5",
+        "extend-shallow": "^2.0.1",
+        "posix-character-classes": "^0.1.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "expand-range": {
+      "version": "1.8.2",
+      "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+      "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+      "dev": true,
+      "requires": {
+        "fill-range": "^2.1.0"
+      },
+      "dependencies": {
+        "fill-range": {
+          "version": "2.2.4",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+          "integrity": "sha1-6x53OrsFbc2N8r/favWbizqTZWU=",
+          "dev": true,
+          "requires": {
+            "is-number": "^2.1.0",
+            "isobject": "^2.0.0",
+            "randomatic": "^3.0.0",
+            "repeat-element": "^1.1.2",
+            "repeat-string": "^1.5.2"
+          }
+        },
+        "is-number": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+          "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          }
+        },
+        "isobject": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+          "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+          "dev": true,
+          "requires": {
+            "isarray": "1.0.0"
+          }
+        },
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "express": {
+      "version": "4.16.4",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
+      "integrity": "sha1-/d72GSYQniTFFeqX/S8b2/Yt8S4=",
+      "dev": true,
+      "requires": {
+        "accepts": "~1.3.5",
+        "array-flatten": "1.1.1",
+        "body-parser": "1.18.3",
+        "content-disposition": "0.5.2",
+        "content-type": "~1.0.4",
+        "cookie": "0.3.1",
+        "cookie-signature": "1.0.6",
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "finalhandler": "1.1.1",
+        "fresh": "0.5.2",
+        "merge-descriptors": "1.0.1",
+        "methods": "~1.1.2",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.2",
+        "path-to-regexp": "0.1.7",
+        "proxy-addr": "~2.0.4",
+        "qs": "6.5.2",
+        "range-parser": "~1.2.0",
+        "safe-buffer": "5.1.2",
+        "send": "0.16.2",
+        "serve-static": "1.13.2",
+        "setprototypeof": "1.1.0",
+        "statuses": "~1.4.0",
+        "type-is": "~1.6.16",
+        "utils-merge": "1.0.1",
+        "vary": "~1.1.2"
+      },
+      "dependencies": {
+        "array-flatten": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+          "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+          "dev": true
+        }
+      }
+    },
+    "extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=",
+      "dev": true
+    },
+    "extend-shallow": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+      "dev": true,
+      "requires": {
+        "assign-symbols": "^1.0.0",
+        "is-extendable": "^1.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+          "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
+          "dev": true,
+          "requires": {
+            "is-plain-object": "^2.0.4"
+          }
+        }
+      }
+    },
+    "external-editor": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
+      "integrity": "sha1-WGbbKal4Jtvkvzr9JAcOrZ6kOic=",
+      "dev": true,
+      "requires": {
+        "chardet": "^0.7.0",
+        "iconv-lite": "^0.4.24",
+        "tmp": "^0.0.33"
+      },
+      "dependencies": {
+        "iconv-lite": {
+          "version": "0.4.24",
+          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+          "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+          "dev": true,
+          "requires": {
+            "safer-buffer": ">= 2.1.2 < 3"
+          }
+        }
+      }
+    },
+    "extglob": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+      "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=",
+      "dev": true,
+      "requires": {
+        "array-unique": "^0.3.2",
+        "define-property": "^1.0.0",
+        "expand-brackets": "^2.1.4",
+        "extend-shallow": "^2.0.1",
+        "fragment-cache": "^0.2.1",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        }
+      }
+    },
+    "extract-zip": {
+      "version": "1.6.7",
+      "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
+      "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=",
+      "dev": true,
+      "requires": {
+        "concat-stream": "1.6.2",
+        "debug": "2.6.9",
+        "mkdirp": "0.5.1",
+        "yauzl": "2.4.1"
+      }
+    },
+    "extsprintf": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+      "dev": true
+    },
+    "fast-deep-equal": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+      "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+      "dev": true
+    },
+    "fast-json-stable-stringify": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+      "dev": true
+    },
+    "fastparse": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
+      "integrity": "sha1-kXKMWllC7O2FMSg8eUQe5BIsNak=",
+      "dev": true
+    },
+    "faye-websocket": {
+      "version": "0.10.0",
+      "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+      "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+      "dev": true,
+      "requires": {
+        "websocket-driver": ">=0.5.1"
+      }
+    },
+    "fd-slicer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
+      "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
+      "dev": true,
+      "requires": {
+        "pend": "~1.2.0"
+      }
+    },
+    "figgy-pudding": {
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
+      "integrity": "sha1-hiRwESkBxyeg5JWoB0S9W6odZ5A=",
+      "dev": true
+    },
+    "figures": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+      "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+      "dev": true,
+      "requires": {
+        "escape-string-regexp": "^1.0.5"
+      }
+    },
+    "file-loader": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz",
+      "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.0.2",
+        "schema-utils": "^1.0.0"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        }
+      }
+    },
+    "file-saver": {
+      "version": "1.3.3",
+      "resolved": "http://registry.npmjs.org/file-saver/-/file-saver-1.3.3.tgz",
+      "integrity": "sha1-zdTETTqiZOrC9o7BZbx5HDSvEjI="
+    },
+    "filename-regex": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+      "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+      "dev": true
+    },
+    "fileset": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz",
+      "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=",
+      "dev": true,
+      "requires": {
+        "glob": "^7.0.3",
+        "minimatch": "^3.0.3"
+      }
+    },
+    "fill-range": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^2.0.1",
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1",
+        "to-regex-range": "^2.1.0"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "finalhandler": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
+      "integrity": "sha1-7r9O2EAHnIP0JJA4ydcDAIMBsQU=",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.9",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.2",
+        "statuses": "~1.4.0",
+        "unpipe": "~1.0.0"
+      }
+    },
+    "find-cache-dir": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
+      "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+      "dev": true,
+      "requires": {
+        "commondir": "^1.0.1",
+        "make-dir": "^1.0.0",
+        "pkg-dir": "^2.0.0"
+      }
+    },
+    "find-up": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+      "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+      "dev": true,
+      "requires": {
+        "locate-path": "^2.0.0"
+      }
+    },
+    "flat": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/flat/-/flat-2.0.1.tgz",
+      "integrity": "sha1-cOKRiKdL4MPIlAnu0fqVd5B64y8=",
+      "dev": true,
+      "requires": {
+        "is-buffer": "~1.1.2"
+      }
+    },
+    "flush-write-stream": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+      "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.3.6"
+      }
+    },
+    "follow-redirects": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz",
+      "integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==",
+      "dev": true,
+      "requires": {
+        "debug": "=3.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "font-awesome": {
+      "version": "4.7.0",
+      "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
+      "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM="
+    },
+    "for-in": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+      "dev": true
+    },
+    "for-own": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+      "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+      "dev": true,
+      "requires": {
+        "for-in": "^1.0.1"
+      }
+    },
+    "forever-agent": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+      "dev": true
+    },
+    "form-data": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+      "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=",
+      "dev": true,
+      "requires": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.6",
+        "mime-types": "^2.1.12"
+      }
+    },
+    "forwarded": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+      "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+      "dev": true
+    },
+    "fragment-cache": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+      "dev": true,
+      "requires": {
+        "map-cache": "^0.2.2"
+      }
+    },
+    "fresh": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+      "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+      "dev": true
+    },
+    "from2": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+      "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0"
+      }
+    },
+    "fs": {
+      "version": "0.0.1-security",
+      "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz",
+      "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=",
+      "dev": true
+    },
+    "fs-access": {
+      "version": "1.0.1",
+      "resolved": "http://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz",
+      "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=",
+      "dev": true,
+      "requires": {
+        "null-check": "^1.0.0"
+      }
+    },
+    "fs-extra": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz",
+      "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "jsonfile": "^2.1.0",
+        "klaw": "^1.0.0"
+      }
+    },
+    "fs-minipass": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
+      "integrity": "sha1-BsJ3IYRU7CiN93raVKA7hwKqy50=",
+      "dev": true,
+      "requires": {
+        "minipass": "^2.2.1"
+      }
+    },
+    "fs-write-stream-atomic": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+      "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "iferr": "^0.1.5",
+        "imurmurhash": "^0.1.4",
+        "readable-stream": "1 || 2"
+      }
+    },
+    "fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+      "dev": true
+    },
+    "fsevents": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz",
+      "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "nan": "^2.9.2",
+        "node-pre-gyp": "^0.10.0"
+      },
+      "dependencies": {
+        "abbrev": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "ansi-regex": {
+          "version": "2.1.1",
+          "bundled": true,
+          "dev": true
+        },
+        "aproba": {
+          "version": "1.2.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "are-we-there-yet": {
+          "version": "1.1.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "delegates": "^1.0.0",
+            "readable-stream": "^2.0.6"
+          }
+        },
+        "balanced-match": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true
+        },
+        "brace-expansion": {
+          "version": "1.1.11",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "balanced-match": "^1.0.0",
+            "concat-map": "0.0.1"
+          }
+        },
+        "chownr": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "code-point-at": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true
+        },
+        "concat-map": {
+          "version": "0.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "console-control-strings": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true
+        },
+        "core-util-is": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "debug": {
+          "version": "2.6.9",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "deep-extend": {
+          "version": "0.6.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "delegates": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "detect-libc": {
+          "version": "1.0.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "fs-minipass": {
+          "version": "1.2.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minipass": "^2.2.1"
+          }
+        },
+        "fs.realpath": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "gauge": {
+          "version": "2.7.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "aproba": "^1.0.3",
+            "console-control-strings": "^1.0.0",
+            "has-unicode": "^2.0.0",
+            "object-assign": "^4.1.0",
+            "signal-exit": "^3.0.0",
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.1",
+            "wide-align": "^1.1.0"
+          }
+        },
+        "glob": {
+          "version": "7.1.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "has-unicode": {
+          "version": "2.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "iconv-lite": {
+          "version": "0.4.24",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "safer-buffer": ">= 2.1.2 < 3"
+          }
+        },
+        "ignore-walk": {
+          "version": "3.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minimatch": "^3.0.4"
+          }
+        },
+        "inflight": {
+          "version": "1.0.6",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "once": "^1.3.0",
+            "wrappy": "1"
+          }
+        },
+        "inherits": {
+          "version": "2.0.3",
+          "bundled": true,
+          "dev": true
+        },
+        "ini": {
+          "version": "1.3.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "minimatch": {
+          "version": "3.0.4",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        },
+        "minimist": {
+          "version": "0.0.8",
+          "bundled": true,
+          "dev": true
+        },
+        "minipass": {
+          "version": "2.3.5",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.0"
+          }
+        },
+        "minizlib": {
+          "version": "1.2.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minipass": "^2.2.1"
+          }
+        },
+        "mkdirp": {
+          "version": "0.5.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "minimist": "0.0.8"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "needle": {
+          "version": "2.2.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "debug": "^2.1.2",
+            "iconv-lite": "^0.4.4",
+            "sax": "^1.2.4"
+          }
+        },
+        "node-pre-gyp": {
+          "version": "0.10.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "detect-libc": "^1.0.2",
+            "mkdirp": "^0.5.1",
+            "needle": "^2.2.1",
+            "nopt": "^4.0.1",
+            "npm-packlist": "^1.1.6",
+            "npmlog": "^4.0.2",
+            "rc": "^1.2.7",
+            "rimraf": "^2.6.1",
+            "semver": "^5.3.0",
+            "tar": "^4"
+          }
+        },
+        "nopt": {
+          "version": "4.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "abbrev": "1",
+            "osenv": "^0.1.4"
+          }
+        },
+        "npm-bundled": {
+          "version": "1.0.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "npm-packlist": {
+          "version": "1.2.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ignore-walk": "^3.0.1",
+            "npm-bundled": "^1.0.1"
+          }
+        },
+        "npmlog": {
+          "version": "4.1.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "are-we-there-yet": "~1.1.2",
+            "console-control-strings": "~1.1.0",
+            "gauge": "~2.7.3",
+            "set-blocking": "~2.0.0"
+          }
+        },
+        "number-is-nan": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "object-assign": {
+          "version": "4.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "once": {
+          "version": "1.4.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "wrappy": "1"
+          }
+        },
+        "os-homedir": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "os-tmpdir": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "osenv": {
+          "version": "0.1.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "os-homedir": "^1.0.0",
+            "os-tmpdir": "^1.0.0"
+          }
+        },
+        "path-is-absolute": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "process-nextick-args": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "rc": {
+          "version": "1.2.8",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "deep-extend": "^0.6.0",
+            "ini": "~1.3.0",
+            "minimist": "^1.2.0",
+            "strip-json-comments": "~2.0.1"
+          },
+          "dependencies": {
+            "minimist": {
+              "version": "1.2.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            }
+          }
+        },
+        "readable-stream": {
+          "version": "2.3.6",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "rimraf": {
+          "version": "2.6.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        },
+        "safe-buffer": {
+          "version": "5.1.2",
+          "bundled": true,
+          "dev": true
+        },
+        "safer-buffer": {
+          "version": "2.1.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "sax": {
+          "version": "1.2.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "semver": {
+          "version": "5.6.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "set-blocking": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "signal-exit": {
+          "version": "3.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "strip-json-comments": {
+          "version": "2.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "tar": {
+          "version": "4.4.8",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "chownr": "^1.1.1",
+            "fs-minipass": "^1.2.5",
+            "minipass": "^2.3.4",
+            "minizlib": "^1.1.1",
+            "mkdirp": "^0.5.0",
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.2"
+          }
+        },
+        "util-deprecate": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "wide-align": {
+          "version": "1.1.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "string-width": "^1.0.2 || 2"
+          }
+        },
+        "wrappy": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true
+        },
+        "yallist": {
+          "version": "3.0.3",
+          "bundled": true,
+          "dev": true
+        }
+      }
+    },
+    "fstream": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
+      "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "inherits": "~2.0.0",
+        "mkdirp": ">=0.5 0",
+        "rimraf": "2"
+      }
+    },
+    "gauge": {
+      "version": "2.7.4",
+      "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+      "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.0.3",
+        "console-control-strings": "^1.0.0",
+        "has-unicode": "^2.0.0",
+        "object-assign": "^4.1.0",
+        "signal-exit": "^3.0.0",
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1",
+        "wide-align": "^1.1.0"
+      }
+    },
+    "gaze": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
+      "integrity": "sha1-xEFzPhO5J6yMD/C0w7Az8ogSkko=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "globule": "^1.0.0"
+      }
+    },
+    "genfun": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz",
+      "integrity": "sha1-ndlxCgaQClxKW/V6yl2k5S/nZTc=",
+      "dev": true
+    },
+    "get-caller-file": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+      "integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=",
+      "dev": true
+    },
+    "get-stdin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+      "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+      "dev": true
+    },
+    "get-stream": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+      "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+      "dev": true
+    },
+    "get-value": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+      "dev": true
+    },
+    "getpass": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "gettext-parser": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.2.2.tgz",
+      "integrity": "sha1-HvDadcHnWa4wicc++k0Z5AKYdI4=",
+      "dev": true,
+      "requires": {
+        "encoding": "0.1.12"
+      }
+    },
+    "glob": {
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+      "integrity": "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=",
+      "dev": true,
+      "requires": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      }
+    },
+    "glob-base": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+      "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+      "dev": true,
+      "requires": {
+        "glob-parent": "^2.0.0",
+        "is-glob": "^2.0.0"
+      },
+      "dependencies": {
+        "glob-parent": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+          "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+          "dev": true,
+          "requires": {
+            "is-glob": "^2.0.0"
+          }
+        },
+        "is-extglob": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+          "dev": true
+        },
+        "is-glob": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        }
+      }
+    },
+    "glob-parent": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+      "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+      "dev": true,
+      "requires": {
+        "is-glob": "^3.1.0",
+        "path-dirname": "^1.0.0"
+      },
+      "dependencies": {
+        "is-glob": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^2.1.0"
+          }
+        }
+      }
+    },
+    "globals": {
+      "version": "9.18.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+      "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=",
+      "dev": true
+    },
+    "globby": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
+      "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
+      "dev": true,
+      "requires": {
+        "array-union": "^1.0.1",
+        "dir-glob": "^2.0.0",
+        "glob": "^7.1.2",
+        "ignore": "^3.3.5",
+        "pify": "^3.0.0",
+        "slash": "^1.0.0"
+      }
+    },
+    "globule": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
+      "integrity": "sha1-Xf+xsZHyLSB5epNptJ6rTpg5aW0=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "glob": "~7.1.1",
+        "lodash": "~4.17.10",
+        "minimatch": "~3.0.2"
+      }
+    },
+    "graceful-fs": {
+      "version": "4.1.15",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+      "integrity": "sha1-/7cD4QZuig7qpMi4C6klPu77+wA=",
+      "dev": true
+    },
+    "handle-thing": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz",
+      "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==",
+      "dev": true
+    },
+    "handlebars": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz",
+      "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==",
+      "dev": true,
+      "requires": {
+        "async": "^2.5.0",
+        "optimist": "^0.6.1",
+        "source-map": "^0.6.1",
+        "uglify-js": "^3.1.4"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "har-schema": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+      "dev": true
+    },
+    "har-validator": {
+      "version": "5.1.3",
+      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+      "integrity": "sha1-HvievT5JllV2de7ZiTEQ3DUPoIA=",
+      "dev": true,
+      "requires": {
+        "ajv": "^6.5.5",
+        "har-schema": "^2.0.0"
+      }
+    },
+    "has-ansi": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      }
+    },
+    "has-binary2": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
+      "integrity": "sha1-d3asYn8+p3JQz8My2rfd9eT10R0=",
+      "dev": true,
+      "requires": {
+        "isarray": "2.0.1"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+          "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+          "dev": true
+        }
+      }
+    },
+    "has-cors": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+      "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
+      "dev": true
+    },
+    "has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+      "dev": true
+    },
+    "has-unicode": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+      "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+      "dev": true
+    },
+    "has-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+      "dev": true,
+      "requires": {
+        "get-value": "^2.0.6",
+        "has-values": "^1.0.0",
+        "isobject": "^3.0.0"
+      }
+    },
+    "has-values": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+      "dev": true,
+      "requires": {
+        "is-number": "^3.0.0",
+        "kind-of": "^4.0.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "hash-base": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+      "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "hash.js": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+      "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.3",
+        "minimalistic-assert": "^1.0.1"
+      }
+    },
+    "hasha": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz",
+      "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=",
+      "dev": true,
+      "requires": {
+        "is-stream": "^1.0.1",
+        "pinkie-promise": "^2.0.0"
+      }
+    },
+    "hmac-drbg": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+      "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+      "dev": true,
+      "requires": {
+        "hash.js": "^1.0.3",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.1"
+      }
+    },
+    "hosted-git-info": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+      "integrity": "sha1-l/I2l3vW4SVAiTD/bePuxigewEc=",
+      "dev": true
+    },
+    "hpack.js": {
+      "version": "2.1.6",
+      "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+      "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "obuf": "^1.0.0",
+        "readable-stream": "^2.0.1",
+        "wbuf": "^1.1.0"
+      }
+    },
+    "html-entities": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+      "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=",
+      "dev": true
+    },
+    "htmlparser2": {
+      "version": "3.10.1",
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+      "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+      "dev": true,
+      "requires": {
+        "domelementtype": "^1.3.1",
+        "domhandler": "^2.3.0",
+        "domutils": "^1.5.1",
+        "entities": "^1.1.1",
+        "inherits": "^2.0.1",
+        "readable-stream": "^3.1.1"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.2.0.tgz",
+          "integrity": "sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        }
+      }
+    },
+    "http-cache-semantics": {
+      "version": "3.8.1",
+      "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz",
+      "integrity": "sha1-ObDhat2bYFvwqe89nar0hDtMrNI=",
+      "dev": true
+    },
+    "http-deceiver": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+      "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+      "dev": true
+    },
+    "http-errors": {
+      "version": "1.6.3",
+      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+      "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+      "dev": true,
+      "requires": {
+        "depd": "~1.1.2",
+        "inherits": "2.0.3",
+        "setprototypeof": "1.1.0",
+        "statuses": ">= 1.4.0 < 2"
+      }
+    },
+    "http-parser-js": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz",
+      "integrity": "sha1-1l7b7ehDSdDcMDIIFaFdOcw8u9g=",
+      "dev": true
+    },
+    "http-proxy": {
+      "version": "1.17.0",
+      "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz",
+      "integrity": "sha1-etOElGWPhGBeL220Q230EPTlvpo=",
+      "dev": true,
+      "requires": {
+        "eventemitter3": "^3.0.0",
+        "follow-redirects": "^1.0.0",
+        "requires-port": "^1.0.0"
+      }
+    },
+    "http-proxy-agent": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz",
+      "integrity": "sha1-5IIb7vWyFCogJr1zkm/lN2McVAU=",
+      "dev": true,
+      "requires": {
+        "agent-base": "4",
+        "debug": "3.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "http-proxy-middleware": {
+      "version": "0.18.0",
+      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz",
+      "integrity": "sha1-CYfmu1pWBuWmkWjY+WeofxXdiqs=",
+      "dev": true,
+      "requires": {
+        "http-proxy": "^1.16.2",
+        "is-glob": "^4.0.0",
+        "lodash": "^4.17.5",
+        "micromatch": "^3.1.9"
+      }
+    },
+    "http-signature": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+      "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "jsprim": "^1.2.2",
+        "sshpk": "^1.7.0"
+      }
+    },
+    "https-browserify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+      "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+      "dev": true
+    },
+    "https-proxy-agent": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz",
+      "integrity": "sha1-UVUpcPoE1yPgTFbQQXjD+SWSu8A=",
+      "dev": true,
+      "requires": {
+        "agent-base": "^4.1.0",
+        "debug": "^3.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+          "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
+          "dev": true
+        }
+      }
+    },
+    "humanize-ms": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
+      "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=",
+      "dev": true,
+      "requires": {
+        "ms": "^2.0.0"
+      }
+    },
+    "iconv-lite": {
+      "version": "0.4.23",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+      "integrity": "sha1-KXhx9jvlB63Pv8pxXQzQ7thOmmM=",
+      "dev": true,
+      "requires": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      }
+    },
+    "ieee754": {
+      "version": "1.1.12",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
+      "integrity": "sha1-UL8k5bnIu5ivSWTJQc2wkY2ntgs=",
+      "dev": true
+    },
+    "iferr": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+      "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+      "dev": true
+    },
+    "ignore": {
+      "version": "3.3.10",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+      "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=",
+      "dev": true
+    },
+    "ignore-walk": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
+      "integrity": "sha1-qD5i59JyrA47VRqqgoMaGbafgvg=",
+      "dev": true,
+      "requires": {
+        "minimatch": "^3.0.4"
+      }
+    },
+    "image-size": {
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+      "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
+      "dev": true,
+      "optional": true
+    },
+    "immediate": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+      "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=",
+      "dev": true
+    },
+    "import-cwd": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
+      "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
+      "dev": true,
+      "requires": {
+        "import-from": "^2.1.0"
+      }
+    },
+    "import-from": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz",
+      "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
+      "dev": true,
+      "requires": {
+        "resolve-from": "^3.0.0"
+      }
+    },
+    "import-local": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
+      "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=",
+      "dev": true,
+      "requires": {
+        "pkg-dir": "^3.0.0",
+        "resolve-cwd": "^2.0.0"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+          "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+          "dev": true,
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+          "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
+          "dev": true,
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "p-limit": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz",
+          "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==",
+          "dev": true,
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+          "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "p-try": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
+          "integrity": "sha1-hQgLuHxkaI+keZb+j3376CEXYLE=",
+          "dev": true
+        },
+        "pkg-dir": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+          "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
+          "dev": true,
+          "requires": {
+            "find-up": "^3.0.0"
+          }
+        }
+      }
+    },
+    "imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+      "dev": true
+    },
+    "in-publish": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
+      "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
+      "dev": true,
+      "optional": true
+    },
+    "indent-string": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+      "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "repeating": "^2.0.0"
+      }
+    },
+    "indexof": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+      "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+      "dev": true
+    },
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "dev": true,
+      "requires": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "inherits": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+      "dev": true
+    },
+    "ini": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+      "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=",
+      "dev": true
+    },
+    "inquirer": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz",
+      "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==",
+      "dev": true,
+      "requires": {
+        "ansi-escapes": "^3.0.0",
+        "chalk": "^2.0.0",
+        "cli-cursor": "^2.1.0",
+        "cli-width": "^2.0.0",
+        "external-editor": "^3.0.0",
+        "figures": "^2.0.0",
+        "lodash": "^4.17.10",
+        "mute-stream": "0.0.7",
+        "run-async": "^2.2.0",
+        "rxjs": "^6.1.0",
+        "string-width": "^2.1.0",
+        "strip-ansi": "^5.0.0",
+        "through": "^2.3.6"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+          "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
+          "dev": true,
+          "requires": {
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^4.0.0"
+          },
+          "dependencies": {
+            "strip-ansi": {
+              "version": "4.0.0",
+              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+              "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^3.0.0"
+              }
+            }
+          }
+        },
+        "strip-ansi": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz",
+          "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^4.0.0"
+          },
+          "dependencies": {
+            "ansi-regex": {
+              "version": "4.0.0",
+              "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz",
+              "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==",
+              "dev": true
+            }
+          }
+        }
+      }
+    },
+    "internal-ip": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz",
+      "integrity": "sha1-31yZh24dLrLqLXT1IOP2aaAOzic=",
+      "dev": true,
+      "requires": {
+        "default-gateway": "^2.6.0",
+        "ipaddr.js": "^1.5.2"
+      }
+    },
+    "interpret": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
+      "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
+      "dev": true
+    },
+    "invariant": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+      "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=",
+      "dev": true,
+      "requires": {
+        "loose-envify": "^1.0.0"
+      }
+    },
+    "invert-kv": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+      "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+      "dev": true
+    },
+    "ip": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+      "dev": true
+    },
+    "ip-regex": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+      "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+      "dev": true
+    },
+    "ipaddr.js": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
+      "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=",
+      "dev": true
+    },
+    "is-accessor-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "is-arrayish": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+      "dev": true
+    },
+    "is-binary-path": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+      "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+      "dev": true,
+      "requires": {
+        "binary-extensions": "^1.0.0"
+      }
+    },
+    "is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+      "dev": true
+    },
+    "is-data-descriptor": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "is-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+      "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
+      "dev": true,
+      "requires": {
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+          "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
+          "dev": true
+        }
+      }
+    },
+    "is-directory": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+      "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+      "dev": true
+    },
+    "is-dotfile": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+      "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+      "dev": true
+    },
+    "is-equal-shallow": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+      "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+      "dev": true,
+      "requires": {
+        "is-primitive": "^2.0.0"
+      }
+    },
+    "is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+      "dev": true
+    },
+    "is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+      "dev": true
+    },
+    "is-finite": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+      "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+      "dev": true,
+      "requires": {
+        "number-is-nan": "^1.0.0"
+      }
+    },
+    "is-fullwidth-code-point": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+      "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+      "dev": true,
+      "requires": {
+        "number-is-nan": "^1.0.0"
+      }
+    },
+    "is-glob": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+      "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+      "dev": true,
+      "requires": {
+        "is-extglob": "^2.1.1"
+      }
+    },
+    "is-number": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "is-path-cwd": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+      "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+      "dev": true
+    },
+    "is-path-in-cwd": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
+      "integrity": "sha1-WsSLNF72dTOb1sekipEhELJBz1I=",
+      "dev": true,
+      "requires": {
+        "is-path-inside": "^1.0.0"
+      }
+    },
+    "is-path-inside": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+      "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+      "dev": true,
+      "requires": {
+        "path-is-inside": "^1.0.1"
+      }
+    },
+    "is-plain-object": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+      "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "is-posix-bracket": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+      "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+      "dev": true
+    },
+    "is-primitive": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+      "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+      "dev": true
+    },
+    "is-promise": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+      "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+      "dev": true
+    },
+    "is-stream": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+      "dev": true
+    },
+    "is-typedarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+      "dev": true
+    },
+    "is-utf8": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+      "dev": true
+    },
+    "is-windows": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+      "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=",
+      "dev": true
+    },
+    "is-wsl": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+      "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+      "dev": true
+    },
+    "isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+      "dev": true
+    },
+    "isbinaryfile": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz",
+      "integrity": "sha1-XW3vPt6/boyoyunDAYOoBLX4voA=",
+      "dev": true,
+      "requires": {
+        "buffer-alloc": "^1.2.0"
+      }
+    },
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "dev": true
+    },
+    "isobject": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+      "dev": true
+    },
+    "isstream": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+      "dev": true
+    },
+    "istanbul-api": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz",
+      "integrity": "sha1-qGx3DSsD4R4/d4zXrt2C0nIgkqo=",
+      "dev": true,
+      "requires": {
+        "async": "^2.1.4",
+        "fileset": "^2.0.2",
+        "istanbul-lib-coverage": "^1.2.1",
+        "istanbul-lib-hook": "^1.2.2",
+        "istanbul-lib-instrument": "^1.10.2",
+        "istanbul-lib-report": "^1.1.5",
+        "istanbul-lib-source-maps": "^1.2.6",
+        "istanbul-reports": "^1.5.1",
+        "js-yaml": "^3.7.0",
+        "mkdirp": "^0.5.1",
+        "once": "^1.4.0"
+      }
+    },
+    "istanbul-instrumenter-loader": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.1.tgz",
+      "integrity": "sha1-mVe9WSUrNz+uXFK3tRiOb94qCUk=",
+      "dev": true,
+      "requires": {
+        "convert-source-map": "^1.5.0",
+        "istanbul-lib-instrument": "^1.7.3",
+        "loader-utils": "^1.1.0",
+        "schema-utils": "^0.3.0"
+      },
+      "dependencies": {
+        "ajv": {
+          "version": "5.5.2",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+          "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+          "dev": true,
+          "requires": {
+            "co": "^4.6.0",
+            "fast-deep-equal": "^1.0.0",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.3.0"
+          }
+        },
+        "fast-deep-equal": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+          "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+          "dev": true
+        },
+        "json-schema-traverse": {
+          "version": "0.3.1",
+          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+          "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+          "dev": true
+        },
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        },
+        "schema-utils": {
+          "version": "0.3.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz",
+          "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
+          "dev": true,
+          "requires": {
+            "ajv": "^5.0.0"
+          }
+        }
+      }
+    },
+    "istanbul-lib-coverage": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz",
+      "integrity": "sha1-zPftzQoLubj3Kf7rCTBHD5r2ZPA=",
+      "dev": true
+    },
+    "istanbul-lib-hook": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz",
+      "integrity": "sha1-vGvwfxKmQfvxyFOR0Nqo8K6mv4Y=",
+      "dev": true,
+      "requires": {
+        "append-transform": "^0.4.0"
+      }
+    },
+    "istanbul-lib-instrument": {
+      "version": "1.10.2",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz",
+      "integrity": "sha1-H1XtEKw8R/K93dUweTUSZ1TQqco=",
+      "dev": true,
+      "requires": {
+        "babel-generator": "^6.18.0",
+        "babel-template": "^6.16.0",
+        "babel-traverse": "^6.18.0",
+        "babel-types": "^6.18.0",
+        "babylon": "^6.18.0",
+        "istanbul-lib-coverage": "^1.2.1",
+        "semver": "^5.3.0"
+      }
+    },
+    "istanbul-lib-report": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz",
+      "integrity": "sha1-8qZX/GKC+WFwqvKB6zCkWPf0Fww=",
+      "dev": true,
+      "requires": {
+        "istanbul-lib-coverage": "^1.2.1",
+        "mkdirp": "^0.5.1",
+        "path-parse": "^1.0.5",
+        "supports-color": "^3.1.2"
+      },
+      "dependencies": {
+        "has-flag": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "3.2.3",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^1.0.0"
+          }
+        }
+      }
+    },
+    "istanbul-lib-source-maps": {
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz",
+      "integrity": "sha1-N7n/ZhWA+PyhEjJ1LuQuCMZnXY8=",
+      "dev": true,
+      "requires": {
+        "debug": "^3.1.0",
+        "istanbul-lib-coverage": "^1.2.1",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.6.1",
+        "source-map": "^0.5.3"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+          "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "dev": true
+        }
+      }
+    },
+    "istanbul-reports": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz",
+      "integrity": "sha1-l+Tb87UV6MSEyuoV1lJO69P/Tho=",
+      "dev": true,
+      "requires": {
+        "handlebars": "^4.0.3"
+      }
+    },
+    "jasmine-core": {
+      "version": "2.99.1",
+      "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz",
+      "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=",
+      "dev": true
+    },
+    "jasmine-spec-reporter": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1.tgz",
+      "integrity": "sha1-HWMq7ANBZwrTJPkrqEtLMrNeniI=",
+      "dev": true,
+      "requires": {
+        "colors": "1.1.2"
+      }
+    },
+    "jasminewd2": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz",
+      "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=",
+      "dev": true
+    },
+    "js-base64": {
+      "version": "2.5.1",
+      "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz",
+      "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==",
+      "dev": true,
+      "optional": true
+    },
+    "js-tokens": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+      "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+      "dev": true
+    },
+    "js-yaml": {
+      "version": "3.12.0",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
+      "integrity": "sha1-6u1lbsg0TxD1J8a/obbiJE3hZ9E=",
+      "dev": true,
+      "requires": {
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
+      },
+      "dependencies": {
+        "esprima": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+          "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=",
+          "dev": true
+        }
+      }
+    },
+    "jsbn": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+      "dev": true
+    },
+    "jsesc": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+      "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+      "dev": true
+    },
+    "json-parse-better-errors": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+      "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=",
+      "dev": true
+    },
+    "json-schema": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+      "dev": true
+    },
+    "json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=",
+      "dev": true
+    },
+    "json-stringify-safe": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+      "dev": true
+    },
+    "json3": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+      "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
+      "dev": true
+    },
+    "json5": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+      "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+      "dev": true,
+      "requires": {
+        "minimist": "^1.2.0"
+      }
+    },
+    "jsonfile": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+      "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
+    "jsonparse": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+      "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+      "dev": true
+    },
+    "jsprim": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "1.0.0",
+        "extsprintf": "1.3.0",
+        "json-schema": "0.2.3",
+        "verror": "1.10.0"
+      }
+    },
+    "jszip": {
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz",
+      "integrity": "sha1-48KmxtcGrG5gMxQDbUPNQL7v3zc=",
+      "dev": true,
+      "requires": {
+        "core-js": "~2.3.0",
+        "es6-promise": "~3.0.2",
+        "lie": "~3.1.0",
+        "pako": "~1.0.2",
+        "readable-stream": "~2.0.6"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz",
+          "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=",
+          "dev": true
+        },
+        "es6-promise": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz",
+          "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=",
+          "dev": true
+        },
+        "process-nextick-args": {
+          "version": "1.0.7",
+          "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+          "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "2.0.6",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+          "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~1.0.6",
+            "string_decoder": "~0.10.x",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+          "dev": true
+        }
+      }
+    },
+    "karma": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/karma/-/karma-3.1.1.tgz",
+      "integrity": "sha512-NetT3wPCQMNB36uiL9LLyhrOt8SQwrEKt0xD3+KpTCfm0VxVyUJdPL5oTq2Ic5ouemgL/Iz4wqXEbF3zea9kQQ==",
+      "dev": true,
+      "requires": {
+        "bluebird": "^3.3.0",
+        "body-parser": "^1.16.1",
+        "chokidar": "^2.0.3",
+        "colors": "^1.1.0",
+        "combine-lists": "^1.0.0",
+        "connect": "^3.6.0",
+        "core-js": "^2.2.0",
+        "di": "^0.0.1",
+        "dom-serialize": "^2.2.0",
+        "expand-braces": "^0.1.1",
+        "glob": "^7.1.1",
+        "graceful-fs": "^4.1.2",
+        "http-proxy": "^1.13.0",
+        "isbinaryfile": "^3.0.0",
+        "lodash": "^4.17.4",
+        "log4js": "^3.0.0",
+        "mime": "^2.3.1",
+        "minimatch": "^3.0.2",
+        "optimist": "^0.6.1",
+        "qjobs": "^1.1.4",
+        "range-parser": "^1.2.0",
+        "rimraf": "^2.6.0",
+        "safe-buffer": "^5.0.1",
+        "socket.io": "2.1.1",
+        "source-map": "^0.6.1",
+        "tmp": "0.0.33",
+        "useragent": "2.2.1"
+      },
+      "dependencies": {
+        "mime": {
+          "version": "2.4.0",
+          "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz",
+          "integrity": "sha1-4FH9iBNYWF8yed8zP+aU2gvP/dY=",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "karma-chrome-launcher": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz",
+      "integrity": "sha1-zxudBxNswY/iOTJ9JGVMPbw2is8=",
+      "dev": true,
+      "requires": {
+        "fs-access": "^1.0.0",
+        "which": "^1.2.1"
+      }
+    },
+    "karma-coverage-istanbul-reporter": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.0.1.tgz",
+      "integrity": "sha512-UcgrHkFehI5+ivMouD8NH/UOHiX4oCAtwaANylzPFdcAuD52fnCUuelacq2gh8tZ4ydhU3+xiXofSq7j5Ehygw==",
+      "dev": true,
+      "requires": {
+        "istanbul-api": "^1.3.1",
+        "minimatch": "^3.0.4"
+      }
+    },
+    "karma-jasmine": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.2.tgz",
+      "integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=",
+      "dev": true
+    },
+    "karma-jasmine-html-reporter": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2.tgz",
+      "integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=",
+      "dev": true,
+      "requires": {
+        "karma-jasmine": "^1.0.2"
+      }
+    },
+    "karma-mocha-reporter": {
+      "version": "2.2.5",
+      "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz",
+      "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.1.0",
+        "log-symbols": "^2.1.0",
+        "strip-ansi": "^4.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        }
+      }
+    },
+    "karma-phantomjs-launcher": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz",
+      "integrity": "sha1-0jyjSAG9qYY60xjju0vUBisTrNI=",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.0.1",
+        "phantomjs-prebuilt": "^2.1.7"
+      }
+    },
+    "karma-source-map-support": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.3.0.tgz",
+      "integrity": "sha1-Nt1NjKFUtirOlWliNvrjfK8Kfd4=",
+      "dev": true,
+      "requires": {
+        "source-map-support": "^0.5.5"
+      }
+    },
+    "kew": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz",
+      "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=",
+      "dev": true
+    },
+    "killable": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
+      "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=",
+      "dev": true
+    },
+    "kind-of": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+      "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=",
+      "dev": true
+    },
+    "klaw": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
+      "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.9"
+      }
+    },
+    "lcid": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+      "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+      "dev": true,
+      "requires": {
+        "invert-kv": "^1.0.0"
+      }
+    },
+    "less": {
+      "version": "3.9.0",
+      "resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz",
+      "integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==",
+      "dev": true,
+      "requires": {
+        "clone": "^2.1.2",
+        "errno": "^0.1.1",
+        "graceful-fs": "^4.1.2",
+        "image-size": "~0.5.0",
+        "mime": "^1.4.1",
+        "mkdirp": "^0.5.0",
+        "promise": "^7.1.1",
+        "request": "^2.83.0",
+        "source-map": "~0.6.0"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "less-loader": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz",
+      "integrity": "sha1-LBNSxbCaT4QQFJAnT9UWdN5BNj4=",
+      "dev": true,
+      "requires": {
+        "clone": "^2.1.1",
+        "loader-utils": "^1.1.0",
+        "pify": "^3.0.0"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        }
+      }
+    },
+    "license-webpack-plugin": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.1.0.tgz",
+      "integrity": "sha512-vDiBeMWxjE9n6TabQ9J4FH8urFdsRK0Nvxn1cit9biCiR9aq1zBR0X2BlAkEiIG6qPamLeU0GzvIgLkrFc398A==",
+      "dev": true,
+      "requires": {
+        "@types/webpack-sources": "^0.1.5",
+        "webpack-sources": "^1.2.0"
+      }
+    },
+    "lie": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
+      "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=",
+      "dev": true,
+      "requires": {
+        "immediate": "~3.0.5"
+      }
+    },
+    "load-json-file": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+      "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "parse-json": "^2.2.0",
+        "pify": "^2.0.0",
+        "pinkie-promise": "^2.0.0",
+        "strip-bom": "^2.0.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+          "dev": true
+        }
+      }
+    },
+    "loader-runner": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
+      "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
+      "dev": true
+    },
+    "locate-path": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+      "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+      "dev": true,
+      "requires": {
+        "p-locate": "^2.0.0",
+        "path-exists": "^3.0.0"
+      }
+    },
+    "lodash": {
+      "version": "4.17.11",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+      "integrity": "sha1-s56mIp72B+zYniyN8SU2iRysm40=",
+      "dev": true
+    },
+    "lodash.assign": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+      "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
+      "dev": true,
+      "optional": true
+    },
+    "lodash.clonedeep": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+      "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+      "dev": true
+    },
+    "lodash.debounce": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+      "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
+      "dev": true
+    },
+    "lodash.mergewith": {
+      "version": "4.6.1",
+      "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz",
+      "integrity": "sha1-Y5BX5ybDr72z59QnQcqo1uQzWSc=",
+      "dev": true,
+      "optional": true
+    },
+    "lodash.tail": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz",
+      "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=",
+      "dev": true
+    },
+    "log-symbols": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+      "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.0.1"
+      }
+    },
+    "log4js": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz",
+      "integrity": "sha1-5srO2Uln7uuc45n5+GgqSysoyP8=",
+      "dev": true,
+      "requires": {
+        "circular-json": "^0.5.5",
+        "date-format": "^1.2.0",
+        "debug": "^3.1.0",
+        "rfdc": "^1.1.2",
+        "streamroller": "0.7.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+          "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
+          "dev": true
+        }
+      }
+    },
+    "loglevel": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz",
+      "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=",
+      "dev": true
+    },
+    "loose-envify": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=",
+      "dev": true,
+      "requires": {
+        "js-tokens": "^3.0.0 || ^4.0.0"
+      }
+    },
+    "loud-rejection": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+      "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "currently-unhandled": "^0.4.1",
+        "signal-exit": "^3.0.0"
+      }
+    },
+    "lru-cache": {
+      "version": "4.1.5",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+      "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+      "dev": true,
+      "requires": {
+        "pseudomap": "^1.0.2",
+        "yallist": "^2.1.2"
+      }
+    },
+    "magic-string": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.2.tgz",
+      "integrity": "sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg==",
+      "dev": true,
+      "requires": {
+        "sourcemap-codec": "^1.4.4"
+      }
+    },
+    "make-dir": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+      "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=",
+      "dev": true,
+      "requires": {
+        "pify": "^3.0.0"
+      }
+    },
+    "make-error": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz",
+      "integrity": "sha1-7+ToH22yjK3WBccPKcgxtY73dsg=",
+      "dev": true
+    },
+    "make-fetch-happen": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz",
+      "integrity": "sha1-FBSXy4ePJDupMTbIPYq6EsIWwIM=",
+      "dev": true,
+      "requires": {
+        "agentkeepalive": "^3.4.1",
+        "cacache": "^11.0.1",
+        "http-cache-semantics": "^3.8.1",
+        "http-proxy-agent": "^2.1.0",
+        "https-proxy-agent": "^2.2.1",
+        "lru-cache": "^4.1.2",
+        "mississippi": "^3.0.0",
+        "node-fetch-npm": "^2.0.2",
+        "promise-retry": "^1.1.1",
+        "socks-proxy-agent": "^4.0.0",
+        "ssri": "^6.0.0"
+      },
+      "dependencies": {
+        "cacache": {
+          "version": "11.3.2",
+          "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz",
+          "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==",
+          "dev": true,
+          "requires": {
+            "bluebird": "^3.5.3",
+            "chownr": "^1.1.1",
+            "figgy-pudding": "^3.5.1",
+            "glob": "^7.1.3",
+            "graceful-fs": "^4.1.15",
+            "lru-cache": "^5.1.1",
+            "mississippi": "^3.0.0",
+            "mkdirp": "^0.5.1",
+            "move-concurrently": "^1.0.1",
+            "promise-inflight": "^1.0.1",
+            "rimraf": "^2.6.2",
+            "ssri": "^6.0.1",
+            "unique-filename": "^1.1.1",
+            "y18n": "^4.0.0"
+          },
+          "dependencies": {
+            "lru-cache": {
+              "version": "5.1.1",
+              "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+              "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+              "dev": true,
+              "requires": {
+                "yallist": "^3.0.2"
+              }
+            }
+          }
+        },
+        "mississippi": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+          "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=",
+          "dev": true,
+          "requires": {
+            "concat-stream": "^1.5.0",
+            "duplexify": "^3.4.2",
+            "end-of-stream": "^1.1.0",
+            "flush-write-stream": "^1.0.0",
+            "from2": "^2.1.0",
+            "parallel-transform": "^1.1.0",
+            "pump": "^3.0.0",
+            "pumpify": "^1.3.3",
+            "stream-each": "^1.1.0",
+            "through2": "^2.0.0"
+          }
+        },
+        "pump": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+          "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=",
+          "dev": true,
+          "requires": {
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
+          }
+        },
+        "ssri": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+          "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=",
+          "dev": true,
+          "requires": {
+            "figgy-pudding": "^3.5.1"
+          }
+        },
+        "yallist": {
+          "version": "3.0.3",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+          "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+          "dev": true
+        }
+      }
+    },
+    "map-age-cleaner": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
+      "integrity": "sha1-fVg6cwZDTAVf5HSw9FB45uG0uSo=",
+      "dev": true,
+      "requires": {
+        "p-defer": "^1.0.0"
+      }
+    },
+    "map-cache": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+      "dev": true
+    },
+    "map-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+      "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+      "dev": true
+    },
+    "map-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+      "dev": true,
+      "requires": {
+        "object-visit": "^1.0.0"
+      }
+    },
+    "math-random": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz",
+      "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==",
+      "dev": true
+    },
+    "md5.js": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+      "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=",
+      "dev": true,
+      "requires": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
+    "media-typer": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+      "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+      "dev": true
+    },
+    "mem": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz",
+      "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==",
+      "dev": true,
+      "requires": {
+        "map-age-cleaner": "^0.1.1",
+        "mimic-fn": "^1.0.0",
+        "p-is-promise": "^2.0.0"
+      }
+    },
+    "memory-fs": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+      "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+      "dev": true,
+      "requires": {
+        "errno": "^0.1.3",
+        "readable-stream": "^2.0.1"
+      }
+    },
+    "meow": {
+      "version": "3.7.0",
+      "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+      "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "camelcase-keys": "^2.0.0",
+        "decamelize": "^1.1.2",
+        "loud-rejection": "^1.0.0",
+        "map-obj": "^1.0.1",
+        "minimist": "^1.1.3",
+        "normalize-package-data": "^2.3.4",
+        "object-assign": "^4.0.1",
+        "read-pkg-up": "^1.0.1",
+        "redent": "^1.0.0",
+        "trim-newlines": "^1.0.0"
+      }
+    },
+    "merge-descriptors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+      "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+      "dev": true
+    },
+    "methods": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+      "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+      "dev": true
+    },
+    "micromatch": {
+      "version": "3.1.10",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+      "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=",
+      "dev": true,
+      "requires": {
+        "arr-diff": "^4.0.0",
+        "array-unique": "^0.3.2",
+        "braces": "^2.3.1",
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "extglob": "^2.0.4",
+        "fragment-cache": "^0.2.1",
+        "kind-of": "^6.0.2",
+        "nanomatch": "^1.2.9",
+        "object.pick": "^1.3.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.2"
+      }
+    },
+    "miller-rabin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+      "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.0.0",
+        "brorand": "^1.0.1"
+      }
+    },
+    "mime": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+      "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=",
+      "dev": true,
+      "optional": true
+    },
+    "mime-db": {
+      "version": "1.37.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
+      "integrity": "sha1-C2oM5v2+lXbiXx8tL96IMNwK0Ng=",
+      "dev": true
+    },
+    "mime-types": {
+      "version": "2.1.21",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
+      "integrity": "sha1-KJlaoey3cHQv5q5+WPkYHHRLP5Y=",
+      "dev": true,
+      "requires": {
+        "mime-db": "~1.37.0"
+      }
+    },
+    "mimic-fn": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+      "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=",
+      "dev": true
+    },
+    "mini-css-extract-plugin": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz",
+      "integrity": "sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.1.0",
+        "schema-utils": "^1.0.0",
+        "webpack-sources": "^1.1.0"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        }
+      }
+    },
+    "minimalistic-assert": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+      "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=",
+      "dev": true
+    },
+    "minimalistic-crypto-utils": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+      "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+      "dev": true
+    },
+    "minimatch": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+      "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
+      "dev": true,
+      "requires": {
+        "brace-expansion": "^1.1.7"
+      }
+    },
+    "minimist": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+      "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+      "dev": true
+    },
+    "minipass": {
+      "version": "2.3.5",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
+      "integrity": "sha1-ys6+SSAiSX9law8PUeJoKp7S2Eg=",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "^5.1.2",
+        "yallist": "^3.0.0"
+      },
+      "dependencies": {
+        "yallist": {
+          "version": "3.0.3",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+          "integrity": "sha1-tLBJ4xS+VF486AIjbWzSLNkcPek=",
+          "dev": true
+        }
+      }
+    },
+    "minizlib": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
+      "integrity": "sha1-3SfqYTYkPHyIBoToZyuzpF/ZthQ=",
+      "dev": true,
+      "requires": {
+        "minipass": "^2.2.1"
+      }
+    },
+    "mississippi": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
+      "integrity": "sha1-NEKlCPr8KFAEhv7qmUCWduTuWm8=",
+      "dev": true,
+      "requires": {
+        "concat-stream": "^1.5.0",
+        "duplexify": "^3.4.2",
+        "end-of-stream": "^1.1.0",
+        "flush-write-stream": "^1.0.0",
+        "from2": "^2.1.0",
+        "parallel-transform": "^1.1.0",
+        "pump": "^2.0.1",
+        "pumpify": "^1.3.3",
+        "stream-each": "^1.1.0",
+        "through2": "^2.0.0"
+      }
+    },
+    "mixin-deep": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+      "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=",
+      "dev": true,
+      "requires": {
+        "for-in": "^1.0.2",
+        "is-extendable": "^1.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+          "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
+          "dev": true,
+          "requires": {
+            "is-plain-object": "^2.0.4"
+          }
+        }
+      }
+    },
+    "mixin-object": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz",
+      "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=",
+      "dev": true,
+      "requires": {
+        "for-in": "^0.1.3",
+        "is-extendable": "^0.1.1"
+      },
+      "dependencies": {
+        "for-in": {
+          "version": "0.1.8",
+          "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz",
+          "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=",
+          "dev": true
+        }
+      }
+    },
+    "mkdirp": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "dev": true,
+      "requires": {
+        "minimist": "0.0.8"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "0.0.8",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+          "dev": true
+        }
+      }
+    },
+    "moment": {
+      "version": "2.24.0",
+      "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
+      "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
+    },
+    "move-concurrently": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+      "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.1.1",
+        "copy-concurrently": "^1.0.0",
+        "fs-write-stream-atomic": "^1.0.8",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.5.4",
+        "run-queue": "^1.0.3"
+      }
+    },
+    "ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+      "dev": true
+    },
+    "multicast-dns": {
+      "version": "6.2.3",
+      "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
+      "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=",
+      "dev": true,
+      "requires": {
+        "dns-packet": "^1.3.1",
+        "thunky": "^1.0.2"
+      }
+    },
+    "multicast-dns-service-types": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+      "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+      "dev": true
+    },
+    "mute-stream": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+      "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+      "dev": true
+    },
+    "nan": {
+      "version": "2.12.1",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz",
+      "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==",
+      "dev": true,
+      "optional": true
+    },
+    "nanomatch": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+      "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=",
+      "dev": true,
+      "requires": {
+        "arr-diff": "^4.0.0",
+        "array-unique": "^0.3.2",
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "fragment-cache": "^0.2.1",
+        "is-windows": "^1.0.2",
+        "kind-of": "^6.0.2",
+        "object.pick": "^1.3.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      }
+    },
+    "negotiator": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+      "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
+      "dev": true
+    },
+    "neo-async": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz",
+      "integrity": "sha1-udFeTXHGdikIZUtRg+04t1M0CDU=",
+      "dev": true
+    },
+    "ngx-bootstrap": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/ngx-bootstrap/-/ngx-bootstrap-3.1.2.tgz",
+      "integrity": "sha1-9Gb2KQtFaAbawqm5WhL53El5eC8="
+    },
+    "nice-try": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+      "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=",
+      "dev": true
+    },
+    "node-fetch-npm": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz",
+      "integrity": "sha1-cljJBGGC3KNFtCCO2pGNrzNpf/c=",
+      "dev": true,
+      "requires": {
+        "encoding": "^0.1.11",
+        "json-parse-better-errors": "^1.0.0",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "node-forge": {
+      "version": "0.7.5",
+      "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz",
+      "integrity": "sha1-bBUsNFzhHFL0ZcKr2VfoY5zWdN8=",
+      "dev": true
+    },
+    "node-gyp": {
+      "version": "3.8.0",
+      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
+      "integrity": "sha1-VAMEJhwzDoDQ1e3OJTpoyzlkIYw=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "fstream": "^1.0.0",
+        "glob": "^7.0.3",
+        "graceful-fs": "^4.1.2",
+        "mkdirp": "^0.5.0",
+        "nopt": "2 || 3",
+        "npmlog": "0 || 1 || 2 || 3 || 4",
+        "osenv": "0",
+        "request": "^2.87.0",
+        "rimraf": "2",
+        "semver": "~5.3.0",
+        "tar": "^2.0.0",
+        "which": "1"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+          "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "node-libs-browser": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz",
+      "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==",
+      "dev": true,
+      "requires": {
+        "assert": "^1.1.1",
+        "browserify-zlib": "^0.2.0",
+        "buffer": "^4.3.0",
+        "console-browserify": "^1.1.0",
+        "constants-browserify": "^1.0.0",
+        "crypto-browserify": "^3.11.0",
+        "domain-browser": "^1.1.1",
+        "events": "^3.0.0",
+        "https-browserify": "^1.0.0",
+        "os-browserify": "^0.3.0",
+        "path-browserify": "0.0.0",
+        "process": "^0.11.10",
+        "punycode": "^1.2.4",
+        "querystring-es3": "^0.2.0",
+        "readable-stream": "^2.3.3",
+        "stream-browserify": "^2.0.1",
+        "stream-http": "^2.7.2",
+        "string_decoder": "^1.0.0",
+        "timers-browserify": "^2.0.4",
+        "tty-browserify": "0.0.0",
+        "url": "^0.11.0",
+        "util": "^0.11.0",
+        "vm-browserify": "0.0.4"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+          "dev": true
+        }
+      }
+    },
+    "node-releases": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.7.tgz",
+      "integrity": "sha512-bKdrwaqJUPHqlCzDD7so/R+Nk0jGv9a11ZhLrD9f6i947qGLrGAhU3OxRENa19QQmwzGy/g6zCDEuLGDO8HPvA==",
+      "dev": true,
+      "requires": {
+        "semver": "^5.3.0"
+      }
+    },
+    "node-sass": {
+      "version": "4.11.0",
+      "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.11.0.tgz",
+      "integrity": "sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "async-foreach": "^0.1.3",
+        "chalk": "^1.1.1",
+        "cross-spawn": "^3.0.0",
+        "gaze": "^1.0.0",
+        "get-stdin": "^4.0.1",
+        "glob": "^7.0.3",
+        "in-publish": "^2.0.0",
+        "lodash.assign": "^4.2.0",
+        "lodash.clonedeep": "^4.3.2",
+        "lodash.mergewith": "^4.6.0",
+        "meow": "^3.7.0",
+        "mkdirp": "^0.5.1",
+        "nan": "^2.10.0",
+        "node-gyp": "^3.8.0",
+        "npmlog": "^4.0.0",
+        "request": "^2.88.0",
+        "sass-graph": "^2.2.4",
+        "stdout-stream": "^1.4.0",
+        "true-case-path": "^1.0.2"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true,
+          "optional": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "nopt": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+      "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "abbrev": "1"
+      }
+    },
+    "normalize-package-data": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+      "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+      "dev": true,
+      "requires": {
+        "hosted-git-info": "^2.1.4",
+        "resolve": "^1.10.0",
+        "semver": "2 || 3 || 4 || 5",
+        "validate-npm-package-license": "^3.0.1"
+      }
+    },
+    "normalize-path": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+      "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+      "dev": true,
+      "requires": {
+        "remove-trailing-separator": "^1.0.1"
+      }
+    },
+    "normalize-range": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+      "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+      "dev": true
+    },
+    "npm-bundled": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz",
+      "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==",
+      "dev": true
+    },
+    "npm-package-arg": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.0.tgz",
+      "integrity": "sha1-Fa4eJ1ilAn77TCUFVLhac323/ME=",
+      "dev": true,
+      "requires": {
+        "hosted-git-info": "^2.6.0",
+        "osenv": "^0.1.5",
+        "semver": "^5.5.0",
+        "validate-npm-package-name": "^3.0.0"
+      }
+    },
+    "npm-packlist": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.3.0.tgz",
+      "integrity": "sha512-qPBc6CnxEzpOcc4bjoIBJbYdy0D/LFFPUdxvfwor4/w3vxeE0h6TiOVurCEPpQ6trjN77u/ShyfeJGsbAfB3dA==",
+      "dev": true,
+      "requires": {
+        "ignore-walk": "^3.0.1",
+        "npm-bundled": "^1.0.1"
+      }
+    },
+    "npm-pick-manifest": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz",
+      "integrity": "sha1-MhEdKpViY4uyyPK/J/fzCSyPrkA=",
+      "dev": true,
+      "requires": {
+        "figgy-pudding": "^3.5.1",
+        "npm-package-arg": "^6.0.0",
+        "semver": "^5.4.1"
+      }
+    },
+    "npm-registry-fetch": {
+      "version": "3.9.0",
+      "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-3.9.0.tgz",
+      "integrity": "sha512-srwmt8YhNajAoSAaDWndmZgx89lJwIZ1GWxOuckH4Coek4uHv5S+o/l9FLQe/awA+JwTnj4FJHldxhlXdZEBmw==",
+      "dev": true,
+      "requires": {
+        "JSONStream": "^1.3.4",
+        "bluebird": "^3.5.1",
+        "figgy-pudding": "^3.4.1",
+        "lru-cache": "^4.1.3",
+        "make-fetch-happen": "^4.0.1",
+        "npm-package-arg": "^6.1.0"
+      }
+    },
+    "npm-run-path": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+      "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+      "dev": true,
+      "requires": {
+        "path-key": "^2.0.0"
+      }
+    },
+    "npmlog": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+      "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=",
+      "dev": true,
+      "requires": {
+        "are-we-there-yet": "~1.1.2",
+        "console-control-strings": "~1.1.0",
+        "gauge": "~2.7.3",
+        "set-blocking": "~2.0.0"
+      }
+    },
+    "nth-check": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+      "integrity": "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=",
+      "dev": true,
+      "requires": {
+        "boolbase": "~1.0.0"
+      }
+    },
+    "null-check": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz",
+      "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=",
+      "dev": true
+    },
+    "num2fraction": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+      "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
+      "dev": true
+    },
+    "number-is-nan": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+      "dev": true
+    },
+    "oauth-sign": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+      "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=",
+      "dev": true
+    },
+    "object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+      "dev": true
+    },
+    "object-component": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
+      "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
+      "dev": true
+    },
+    "object-copy": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+      "dev": true,
+      "requires": {
+        "copy-descriptor": "^0.1.0",
+        "define-property": "^0.2.5",
+        "kind-of": "^3.0.3"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "object-visit": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.0"
+      }
+    },
+    "object.omit": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+      "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+      "dev": true,
+      "requires": {
+        "for-own": "^0.1.4",
+        "is-extendable": "^0.1.1"
+      },
+      "dependencies": {
+        "for-own": {
+          "version": "0.1.5",
+          "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+          "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+          "dev": true,
+          "requires": {
+            "for-in": "^1.0.1"
+          }
+        }
+      }
+    },
+    "object.pick": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "obuf": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+      "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=",
+      "dev": true
+    },
+    "on-finished": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+      "dev": true,
+      "requires": {
+        "ee-first": "1.1.1"
+      }
+    },
+    "on-headers": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
+      "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=",
+      "dev": true
+    },
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "dev": true,
+      "requires": {
+        "wrappy": "1"
+      }
+    },
+    "onetime": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+      "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+      "dev": true,
+      "requires": {
+        "mimic-fn": "^1.0.0"
+      }
+    },
+    "opn": {
+      "version": "5.4.0",
+      "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz",
+      "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==",
+      "dev": true,
+      "requires": {
+        "is-wsl": "^1.1.0"
+      }
+    },
+    "optimist": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+      "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+      "dev": true,
+      "requires": {
+        "minimist": "~0.0.1",
+        "wordwrap": "~0.0.2"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "0.0.10",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+          "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
+          "dev": true
+        }
+      }
+    },
+    "original": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
+      "integrity": "sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8=",
+      "dev": true,
+      "requires": {
+        "url-parse": "^1.4.3"
+      }
+    },
+    "os-browserify": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+      "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+      "dev": true
+    },
+    "os-homedir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+      "dev": true
+    },
+    "os-locale": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+      "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "lcid": "^1.0.0"
+      }
+    },
+    "os-tmpdir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+      "dev": true
+    },
+    "osenv": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+      "integrity": "sha1-hc36+uso6Gd/QW4odZK18/SepBA=",
+      "dev": true,
+      "requires": {
+        "os-homedir": "^1.0.0",
+        "os-tmpdir": "^1.0.0"
+      }
+    },
+    "p-defer": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+      "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
+      "dev": true
+    },
+    "p-finally": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+      "dev": true
+    },
+    "p-is-promise": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz",
+      "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==",
+      "dev": true
+    },
+    "p-limit": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+      "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=",
+      "dev": true,
+      "requires": {
+        "p-try": "^1.0.0"
+      }
+    },
+    "p-locate": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+      "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+      "dev": true,
+      "requires": {
+        "p-limit": "^1.1.0"
+      }
+    },
+    "p-map": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
+      "integrity": "sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s=",
+      "dev": true
+    },
+    "p-try": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+      "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+      "dev": true
+    },
+    "pacote": {
+      "version": "9.4.0",
+      "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.4.0.tgz",
+      "integrity": "sha512-WQ1KL/phGMkedYEQx9ODsjj7xvwLSpdFJJdEXrLyw5SILMxcTNt5DTxT2Z93fXuLFYJBlZJdnwdalrQdB/rX5w==",
+      "dev": true,
+      "requires": {
+        "bluebird": "^3.5.3",
+        "cacache": "^11.3.2",
+        "figgy-pudding": "^3.5.1",
+        "get-stream": "^4.1.0",
+        "glob": "^7.1.3",
+        "lru-cache": "^5.1.1",
+        "make-fetch-happen": "^4.0.1",
+        "minimatch": "^3.0.4",
+        "minipass": "^2.3.5",
+        "mississippi": "^3.0.0",
+        "mkdirp": "^0.5.1",
+        "normalize-package-data": "^2.4.0",
+        "npm-package-arg": "^6.1.0",
+        "npm-packlist": "^1.1.12",
+        "npm-pick-manifest": "^2.2.3",
+        "npm-registry-fetch": "^3.8.0",
+        "osenv": "^0.1.5",
+        "promise-inflight": "^1.0.1",
+        "promise-retry": "^1.1.1",
+        "protoduck": "^5.0.1",
+        "rimraf": "^2.6.2",
+        "safe-buffer": "^5.1.2",
+        "semver": "^5.6.0",
+        "ssri": "^6.0.1",
+        "tar": "^4.4.8",
+        "unique-filename": "^1.1.1",
+        "which": "^1.3.1"
+      },
+      "dependencies": {
+        "cacache": {
+          "version": "11.3.2",
+          "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz",
+          "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==",
+          "dev": true,
+          "requires": {
+            "bluebird": "^3.5.3",
+            "chownr": "^1.1.1",
+            "figgy-pudding": "^3.5.1",
+            "glob": "^7.1.3",
+            "graceful-fs": "^4.1.15",
+            "lru-cache": "^5.1.1",
+            "mississippi": "^3.0.0",
+            "mkdirp": "^0.5.1",
+            "move-concurrently": "^1.0.1",
+            "promise-inflight": "^1.0.1",
+            "rimraf": "^2.6.2",
+            "ssri": "^6.0.1",
+            "unique-filename": "^1.1.1",
+            "y18n": "^4.0.0"
+          }
+        },
+        "get-stream": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+          "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=",
+          "dev": true,
+          "requires": {
+            "pump": "^3.0.0"
+          }
+        },
+        "lru-cache": {
+          "version": "5.1.1",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+          "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+          "dev": true,
+          "requires": {
+            "yallist": "^3.0.2"
+          }
+        },
+        "mississippi": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+          "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=",
+          "dev": true,
+          "requires": {
+            "concat-stream": "^1.5.0",
+            "duplexify": "^3.4.2",
+            "end-of-stream": "^1.1.0",
+            "flush-write-stream": "^1.0.0",
+            "from2": "^2.1.0",
+            "parallel-transform": "^1.1.0",
+            "pump": "^3.0.0",
+            "pumpify": "^1.3.3",
+            "stream-each": "^1.1.0",
+            "through2": "^2.0.0"
+          }
+        },
+        "pump": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+          "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=",
+          "dev": true,
+          "requires": {
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
+          }
+        },
+        "semver": {
+          "version": "5.6.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+          "integrity": "sha1-fnQlb7qknHWqfHogXMInmcrIAAQ=",
+          "dev": true
+        },
+        "ssri": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+          "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=",
+          "dev": true,
+          "requires": {
+            "figgy-pudding": "^3.5.1"
+          }
+        },
+        "tar": {
+          "version": "4.4.8",
+          "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz",
+          "integrity": "sha1-sZ7sP94qluZGZt+f20DFyhvDdH0=",
+          "dev": true,
+          "requires": {
+            "chownr": "^1.1.1",
+            "fs-minipass": "^1.2.5",
+            "minipass": "^2.3.4",
+            "minizlib": "^1.1.1",
+            "mkdirp": "^0.5.0",
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.2"
+          }
+        },
+        "yallist": {
+          "version": "3.0.3",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+          "integrity": "sha1-tLBJ4xS+VF486AIjbWzSLNkcPek=",
+          "dev": true
+        }
+      }
+    },
+    "pako": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz",
+      "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==",
+      "dev": true
+    },
+    "parallel-transform": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
+      "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
+      "dev": true,
+      "requires": {
+        "cyclist": "~0.2.2",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.1.5"
+      }
+    },
+    "parse-asn1": {
+      "version": "5.1.3",
+      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.3.tgz",
+      "integrity": "sha512-VrPoetlz7B/FqjBLD2f5wBVZvsZVLnRUrxVLfRYhGXCODa/NWE4p3Wp+6+aV3ZPL3KM7/OZmxDIwwijD7yuucg==",
+      "dev": true,
+      "requires": {
+        "asn1.js": "^4.0.0",
+        "browserify-aes": "^1.0.0",
+        "create-hash": "^1.1.0",
+        "evp_bytestokey": "^1.0.0",
+        "pbkdf2": "^3.0.3",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "parse-glob": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+      "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+      "dev": true,
+      "requires": {
+        "glob-base": "^0.3.0",
+        "is-dotfile": "^1.0.0",
+        "is-extglob": "^1.0.0",
+        "is-glob": "^2.0.0"
+      },
+      "dependencies": {
+        "is-extglob": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+          "dev": true
+        },
+        "is-glob": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        }
+      }
+    },
+    "parse-json": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+      "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+      "dev": true,
+      "requires": {
+        "error-ex": "^1.2.0"
+      }
+    },
+    "parse5": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
+      "integrity": "sha1-xZNByXI/QUxFKXVWTHwApo1YrNI=",
+      "optional": true
+    },
+    "parseqs": {
+      "version": "0.0.5",
+      "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
+      "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+      "dev": true,
+      "requires": {
+        "better-assert": "~1.0.0"
+      }
+    },
+    "parseuri": {
+      "version": "0.0.5",
+      "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
+      "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+      "dev": true,
+      "requires": {
+        "better-assert": "~1.0.0"
+      }
+    },
+    "parseurl": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+      "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
+      "dev": true
+    },
+    "pascalcase": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+      "dev": true
+    },
+    "path": {
+      "version": "0.12.7",
+      "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
+      "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=",
+      "dev": true,
+      "requires": {
+        "process": "^0.11.1",
+        "util": "^0.10.3"
+      },
+      "dependencies": {
+        "util": {
+          "version": "0.10.4",
+          "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+          "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+          "dev": true,
+          "requires": {
+            "inherits": "2.0.3"
+          }
+        }
+      }
+    },
+    "path-browserify": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+      "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+      "dev": true
+    },
+    "path-dirname": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+      "dev": true
+    },
+    "path-exists": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+      "dev": true
+    },
+    "path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+      "dev": true
+    },
+    "path-is-inside": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+      "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+      "dev": true
+    },
+    "path-key": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+      "dev": true
+    },
+    "path-parse": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+      "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=",
+      "dev": true
+    },
+    "path-to-regexp": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+      "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+      "dev": true
+    },
+    "path-type": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+      "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=",
+      "dev": true,
+      "requires": {
+        "pify": "^3.0.0"
+      }
+    },
+    "pbkdf2": {
+      "version": "3.0.17",
+      "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
+      "integrity": "sha1-l2wgZTBhexTrsyEUI597CTNuk6Y=",
+      "dev": true,
+      "requires": {
+        "create-hash": "^1.1.2",
+        "create-hmac": "^1.1.4",
+        "ripemd160": "^2.0.1",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
+      }
+    },
+    "pend": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+      "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+      "dev": true
+    },
+    "performance-now": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+      "dev": true
+    },
+    "phantomjs-prebuilt": {
+      "version": "2.1.16",
+      "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz",
+      "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=",
+      "dev": true,
+      "requires": {
+        "es6-promise": "^4.0.3",
+        "extract-zip": "^1.6.5",
+        "fs-extra": "^1.0.0",
+        "hasha": "^2.2.0",
+        "kew": "^0.7.0",
+        "progress": "^1.1.8",
+        "request": "^2.81.0",
+        "request-progress": "^2.0.1",
+        "which": "^1.2.10"
+      }
+    },
+    "pify": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+      "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+      "dev": true
+    },
+    "pinkie": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+      "dev": true
+    },
+    "pinkie-promise": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+      "dev": true,
+      "requires": {
+        "pinkie": "^2.0.0"
+      }
+    },
+    "pkg-dir": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+      "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+      "dev": true,
+      "requires": {
+        "find-up": "^2.1.0"
+      }
+    },
+    "portfinder": {
+      "version": "1.0.20",
+      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz",
+      "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==",
+      "dev": true,
+      "requires": {
+        "async": "^1.5.2",
+        "debug": "^2.2.0",
+        "mkdirp": "0.5.x"
+      },
+      "dependencies": {
+        "async": {
+          "version": "1.5.2",
+          "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+          "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+          "dev": true
+        }
+      }
+    },
+    "posix-character-classes": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+      "dev": true
+    },
+    "postcss": {
+      "version": "7.0.14",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz",
+      "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.4.2",
+        "source-map": "^0.6.1",
+        "supports-color": "^6.1.0"
+      },
+      "dependencies": {
+        "chalk": {
+          "version": "2.4.2",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^3.2.1",
+            "escape-string-regexp": "^1.0.5",
+            "supports-color": "^5.3.0"
+          },
+          "dependencies": {
+            "supports-color": {
+              "version": "5.5.0",
+              "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+              "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+              "dev": true,
+              "requires": {
+                "has-flag": "^3.0.0"
+              }
+            }
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "dev": true,
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-import": {
+      "version": "12.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz",
+      "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.1",
+        "postcss-value-parser": "^3.2.3",
+        "read-cache": "^1.0.0",
+        "resolve": "^1.1.7"
+      }
+    },
+    "postcss-load-config": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz",
+      "integrity": "sha1-8TEt2/WRLNdHF3CDxe96GdYu5IQ=",
+      "dev": true,
+      "requires": {
+        "cosmiconfig": "^4.0.0",
+        "import-cwd": "^2.0.0"
+      }
+    },
+    "postcss-loader": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz",
+      "integrity": "sha1-a5eUPkfHLYRfqeA/Jzdz1OjdbC0=",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.1.0",
+        "postcss": "^7.0.0",
+        "postcss-load-config": "^2.0.0",
+        "schema-utils": "^1.0.0"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        }
+      }
+    },
+    "postcss-value-parser": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+      "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+      "dev": true
+    },
+    "preserve": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+      "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+      "dev": true
+    },
+    "primeflex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/primeflex/-/primeflex-1.0.0.tgz",
+      "integrity": "sha512-/K9iHXm5wu6gZycQDP/gsfX7BpJKSNVhxTOZAJBLH88idPtC2lMgUXm28qfXFqsbxaTI49oBuMYBFlg/DBmUMg=="
+    },
+    "primeicons": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-1.0.0.tgz",
+      "integrity": "sha512-p/hzIjUVccW4eJPhuORHI3AUkDpqfvCQVrjxbFEejnTEdWY4C8fomVfjiaA9jCu83fSQnBHuRIGB96iAR8R6uA=="
+    },
+    "primeng": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/primeng/-/primeng-7.0.1.tgz",
+      "integrity": "sha1-ChvqVAEWsRBbbnVBOqu3vmK5MRw="
+    },
+    "process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+      "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+      "dev": true
+    },
+    "process-nextick-args": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+      "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=",
+      "dev": true
+    },
+    "progress": {
+      "version": "1.1.8",
+      "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
+      "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
+      "dev": true
+    },
+    "promise": {
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+      "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "asap": "~2.0.3"
+      }
+    },
+    "promise-inflight": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+      "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+      "dev": true
+    },
+    "promise-retry": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz",
+      "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=",
+      "dev": true,
+      "requires": {
+        "err-code": "^1.0.0",
+        "retry": "^0.10.0"
+      }
+    },
+    "protoduck": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz",
+      "integrity": "sha1-A8NlnKGAB7aaUP2Cp+vMUWJhFR8=",
+      "dev": true,
+      "requires": {
+        "genfun": "^5.0.0"
+      }
+    },
+    "protractor": {
+      "version": "5.4.0",
+      "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.4.0.tgz",
+      "integrity": "sha512-6TSYqMhUUzxr4/wN0ttSISqPMKvcVRXF4k8jOEpGWD8OioLak4KLgfzHK9FJ49IrjzRrZ+Mx1q2Op8Rk0zEcnQ==",
+      "dev": true,
+      "requires": {
+        "@types/node": "^6.0.46",
+        "@types/q": "^0.0.32",
+        "@types/selenium-webdriver": "^3.0.0",
+        "blocking-proxy": "^1.0.0",
+        "browserstack": "^1.5.1",
+        "chalk": "^1.1.3",
+        "glob": "^7.0.3",
+        "jasmine": "2.8.0",
+        "jasminewd2": "^2.1.0",
+        "optimist": "~0.6.0",
+        "q": "1.4.1",
+        "saucelabs": "^1.5.0",
+        "selenium-webdriver": "3.6.0",
+        "source-map-support": "~0.4.0",
+        "webdriver-js-extender": "2.0.0",
+        "webdriver-manager": "^12.0.6"
+      },
+      "dependencies": {
+        "@types/node": {
+          "version": "6.14.3",
+          "resolved": "https://registry.npmjs.org/@types/node/-/node-6.14.3.tgz",
+          "integrity": "sha512-V2VrQBCKo4U0rni6tW4AASRDqIO5ZTLDN/Xzrm4mNBr9SGQYZ+7zZJn+hMs89Q8ZCIHzp4aWQPyCpK+rux1YGA==",
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
+          }
+        },
+        "del": {
+          "version": "2.2.2",
+          "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+          "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+          "dev": true,
+          "requires": {
+            "globby": "^5.0.0",
+            "is-path-cwd": "^1.0.0",
+            "is-path-in-cwd": "^1.0.0",
+            "object-assign": "^4.0.1",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0",
+            "rimraf": "^2.2.8"
+          }
+        },
+        "globby": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+          "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+          "dev": true,
+          "requires": {
+            "array-union": "^1.0.1",
+            "arrify": "^1.0.0",
+            "glob": "^7.0.3",
+            "object-assign": "^4.0.1",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "jasmine": {
+          "version": "2.8.0",
+          "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz",
+          "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=",
+          "dev": true,
+          "requires": {
+            "exit": "^0.1.2",
+            "glob": "^7.0.6",
+            "jasmine-core": "~2.8.0"
+          }
+        },
+        "jasmine-core": {
+          "version": "2.8.0",
+          "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz",
+          "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=",
+          "dev": true
+        },
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "dev": true
+        },
+        "source-map-support": {
+          "version": "0.4.18",
+          "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+          "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+          "dev": true,
+          "requires": {
+            "source-map": "^0.5.6"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+          "dev": true
+        },
+        "webdriver-manager": {
+          "version": "12.1.1",
+          "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.1.tgz",
+          "integrity": "sha512-L9TEQmZs6JbMMRQI1w60mfps265/NCr0toYJl7p/R2OAk6oXAfwI6jqYP7EWae+d7Ad2S2Aj4+rzxoSjqk3ZuA==",
+          "dev": true,
+          "requires": {
+            "adm-zip": "^0.4.9",
+            "chalk": "^1.1.1",
+            "del": "^2.2.0",
+            "glob": "^7.0.3",
+            "ini": "^1.3.4",
+            "minimist": "^1.2.0",
+            "q": "^1.4.1",
+            "request": "^2.87.0",
+            "rimraf": "^2.5.2",
+            "semver": "^5.3.0",
+            "xml2js": "^0.4.17"
+          }
+        }
+      }
+    },
+    "proxy-addr": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
+      "integrity": "sha1-7PxzO/Iv+Mb0B/onUye5q2fki5M=",
+      "dev": true,
+      "requires": {
+        "forwarded": "~0.1.2",
+        "ipaddr.js": "1.8.0"
+      }
+    },
+    "prr": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+      "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+      "dev": true
+    },
+    "pseudomap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+      "dev": true
+    },
+    "psl": {
+      "version": "1.1.31",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz",
+      "integrity": "sha1-6aqG0BAbWxBcvpOsa3hM1UcnYYQ=",
+      "dev": true
+    },
+    "public-encrypt": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+      "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.1.0",
+        "browserify-rsa": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "parse-asn1": "^5.0.0",
+        "randombytes": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
+    "pump": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+      "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "^1.1.0",
+        "once": "^1.3.1"
+      }
+    },
+    "pumpify": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+      "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=",
+      "dev": true,
+      "requires": {
+        "duplexify": "^3.6.0",
+        "inherits": "^2.0.3",
+        "pump": "^2.0.0"
+      }
+    },
+    "punycode": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+      "dev": true
+    },
+    "q": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
+      "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=",
+      "dev": true
+    },
+    "qjobs": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz",
+      "integrity": "sha1-xF6cYYAL0IfviNfiVkI73Unl0HE=",
+      "dev": true
+    },
+    "qs": {
+      "version": "6.5.2",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+      "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=",
+      "dev": true
+    },
+    "querystring": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+      "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+      "dev": true
+    },
+    "querystring-es3": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+      "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+      "dev": true
+    },
+    "querystringify": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz",
+      "integrity": "sha1-fe2N+/eHncxg0KZErGdUsoOtF+8=",
+      "dev": true
+    },
+    "randomatic": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
+      "integrity": "sha1-t3bvxZN1mE42xTey9RofCv8Noe0=",
+      "dev": true,
+      "requires": {
+        "is-number": "^4.0.0",
+        "kind-of": "^6.0.0",
+        "math-random": "^1.0.1"
+      },
+      "dependencies": {
+        "is-number": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+          "integrity": "sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8=",
+          "dev": true
+        }
+      }
+    },
+    "randombytes": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
+      "integrity": "sha1-0wLFIpSFiISKjTAMkytEwkIx2oA=",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "randomfill": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+      "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=",
+      "dev": true,
+      "requires": {
+        "randombytes": "^2.0.5",
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "range-parser": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+      "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
+      "dev": true
+    },
+    "raw-body": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
+      "integrity": "sha1-GzJOzmtXBuFThVvBFIxlu39uoMM=",
+      "dev": true,
+      "requires": {
+        "bytes": "3.0.0",
+        "http-errors": "1.6.3",
+        "iconv-lite": "0.4.23",
+        "unpipe": "1.0.0"
+      }
+    },
+    "raw-loader": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-1.0.0.tgz",
+      "integrity": "sha512-Uqy5AqELpytJTRxYT4fhltcKPj0TyaEpzJDcGz7DFJi+pQOOi3GjR/DOdxTkTsF+NzhnldIoG6TORaBlInUuqA==",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.1.0",
+        "schema-utils": "^1.0.0"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        }
+      }
+    },
+    "read-cache": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+      "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=",
+      "dev": true,
+      "requires": {
+        "pify": "^2.3.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+          "dev": true
+        }
+      }
+    },
+    "read-pkg": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+      "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+      "dev": true,
+      "requires": {
+        "load-json-file": "^1.0.0",
+        "normalize-package-data": "^2.3.2",
+        "path-type": "^1.0.0"
+      },
+      "dependencies": {
+        "path-type": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+          "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+          "dev": true
+        }
+      }
+    },
+    "read-pkg-up": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+      "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+      "dev": true,
+      "requires": {
+        "find-up": "^1.0.0",
+        "read-pkg": "^1.0.0"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+          "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+          "dev": true,
+          "requires": {
+            "path-exists": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "path-exists": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+          "dev": true,
+          "requires": {
+            "pinkie-promise": "^2.0.0"
+          }
+        }
+      }
+    },
+    "readable-stream": {
+      "version": "2.3.6",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+      "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=",
+      "dev": true,
+      "requires": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "readdirp": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+      "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.11",
+        "micromatch": "^3.1.10",
+        "readable-stream": "^2.0.2"
+      }
+    },
+    "rechoir": {
+      "version": "0.6.2",
+      "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+      "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+      "dev": true,
+      "requires": {
+        "resolve": "^1.1.6"
+      }
+    },
+    "redent": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+      "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "indent-string": "^2.1.0",
+        "strip-indent": "^1.0.1"
+      }
+    },
+    "reflect-metadata": {
+      "version": "0.1.13",
+      "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz",
+      "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==",
+      "dev": true
+    },
+    "regenerate": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+      "integrity": "sha1-SoVuxLVuQHfFV1icroXnpMiGmhE=",
+      "dev": true
+    },
+    "regenerator-runtime": {
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+      "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=",
+      "dev": true
+    },
+    "regex-cache": {
+      "version": "0.4.4",
+      "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+      "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=",
+      "dev": true,
+      "requires": {
+        "is-equal-shallow": "^0.1.3"
+      }
+    },
+    "regex-not": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+      "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^3.0.2",
+        "safe-regex": "^1.1.0"
+      }
+    },
+    "regexpu-core": {
+      "version": "1.0.0",
+      "resolved": "http://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
+      "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
+      "dev": true,
+      "requires": {
+        "regenerate": "^1.2.1",
+        "regjsgen": "^0.2.0",
+        "regjsparser": "^0.1.4"
+      }
+    },
+    "regjsgen": {
+      "version": "0.2.0",
+      "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+      "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
+      "dev": true
+    },
+    "regjsparser": {
+      "version": "0.1.5",
+      "resolved": "http://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+      "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+      "dev": true,
+      "requires": {
+        "jsesc": "~0.5.0"
+      },
+      "dependencies": {
+        "jsesc": {
+          "version": "0.5.0",
+          "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+          "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+          "dev": true
+        }
+      }
+    },
+    "remove-trailing-separator": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+      "dev": true
+    },
+    "repeat-element": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+      "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=",
+      "dev": true
+    },
+    "repeat-string": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+      "dev": true
+    },
+    "repeating": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+      "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+      "dev": true,
+      "requires": {
+        "is-finite": "^1.0.0"
+      }
+    },
+    "request": {
+      "version": "2.88.0",
+      "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+      "integrity": "sha1-nC/KT301tZLv5Xx/ClXoEFIST+8=",
+      "dev": true,
+      "requires": {
+        "aws-sign2": "~0.7.0",
+        "aws4": "^1.8.0",
+        "caseless": "~0.12.0",
+        "combined-stream": "~1.0.6",
+        "extend": "~3.0.2",
+        "forever-agent": "~0.6.1",
+        "form-data": "~2.3.2",
+        "har-validator": "~5.1.0",
+        "http-signature": "~1.2.0",
+        "is-typedarray": "~1.0.0",
+        "isstream": "~0.1.2",
+        "json-stringify-safe": "~5.0.1",
+        "mime-types": "~2.1.19",
+        "oauth-sign": "~0.9.0",
+        "performance-now": "^2.1.0",
+        "qs": "~6.5.2",
+        "safe-buffer": "^5.1.2",
+        "tough-cookie": "~2.4.3",
+        "tunnel-agent": "^0.6.0",
+        "uuid": "^3.3.2"
+      }
+    },
+    "request-progress": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz",
+      "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=",
+      "dev": true,
+      "requires": {
+        "throttleit": "^1.0.0"
+      }
+    },
+    "require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+      "dev": true
+    },
+    "require-from-string": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+      "integrity": "sha1-iaf92TgmEmcxjq/hT5wy5ZjDaQk=",
+      "dev": true
+    },
+    "require-main-filename": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+      "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+      "dev": true
+    },
+    "requires-port": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+      "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+      "dev": true
+    },
+    "resolve": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz",
+      "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==",
+      "dev": true,
+      "requires": {
+        "path-parse": "^1.0.6"
+      }
+    },
+    "resolve-cwd": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+      "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+      "dev": true,
+      "requires": {
+        "resolve-from": "^3.0.0"
+      }
+    },
+    "resolve-from": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+      "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+      "dev": true
+    },
+    "resolve-url": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+      "dev": true
+    },
+    "restore-cursor": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+      "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+      "dev": true,
+      "requires": {
+        "onetime": "^2.0.0",
+        "signal-exit": "^3.0.2"
+      }
+    },
+    "ret": {
+      "version": "0.1.15",
+      "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+      "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=",
+      "dev": true
+    },
+    "retry": {
+      "version": "0.10.1",
+      "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz",
+      "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=",
+      "dev": true
+    },
+    "rfdc": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.2.tgz",
+      "integrity": "sha1-5uctdPXcOd6PU49l4Aw2wYAY40k=",
+      "dev": true
+    },
+    "rimraf": {
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+      "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+      "dev": true,
+      "requires": {
+        "glob": "^7.1.3"
+      }
+    },
+    "ripemd160": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+      "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=",
+      "dev": true,
+      "requires": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1"
+      }
+    },
+    "run-async": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+      "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+      "dev": true,
+      "requires": {
+        "is-promise": "^2.1.0"
+      }
+    },
+    "run-queue": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+      "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.1.1"
+      }
+    },
+    "rxjs": {
+      "version": "6.3.3",
+      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz",
+      "integrity": "sha1-PGp/pCDoRKgTkPsRWKnsYU9LrVU=",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "rxjs-compat": {
+      "version": "6.3.3",
+      "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.3.3.tgz",
+      "integrity": "sha1-KrO5rA2sDAc3SdVf75wD6h3yBFw="
+    },
+    "safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=",
+      "dev": true
+    },
+    "safe-regex": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+      "dev": true,
+      "requires": {
+        "ret": "~0.1.10"
+      }
+    },
+    "safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=",
+      "dev": true
+    },
+    "sass-graph": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
+      "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "glob": "^7.0.0",
+        "lodash": "^4.0.0",
+        "scss-tokenizer": "^0.2.3",
+        "yargs": "^7.0.0"
+      }
+    },
+    "sass-loader": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz",
+      "integrity": "sha1-Fv1ROMuLQkv4p1lSihly1yqtBp0=",
+      "dev": true,
+      "requires": {
+        "clone-deep": "^2.0.1",
+        "loader-utils": "^1.0.1",
+        "lodash.tail": "^4.1.1",
+        "neo-async": "^2.5.0",
+        "pify": "^3.0.0",
+        "semver": "^5.5.0"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        }
+      }
+    },
+    "saucelabs": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz",
+      "integrity": "sha1-lAWnPDYNRJsjKDmRmobDltN5/Z0=",
+      "dev": true,
+      "requires": {
+        "https-proxy-agent": "^2.2.1"
+      }
+    },
+    "sax": {
+      "version": "0.5.8",
+      "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz",
+      "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=",
+      "dev": true
+    },
+    "schema-utils": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+      "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+      "dev": true,
+      "requires": {
+        "ajv": "^6.1.0",
+        "ajv-errors": "^1.0.0",
+        "ajv-keywords": "^3.1.0"
+      }
+    },
+    "scss-tokenizer": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
+      "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "js-base64": "^2.1.8",
+        "source-map": "^0.4.2"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.4.4",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+          "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "amdefine": ">=0.0.4"
+          }
+        }
+      }
+    },
+    "select-hose": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+      "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+      "dev": true
+    },
+    "selenium-webdriver": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz",
+      "integrity": "sha1-K6h6FmLAILiYjJga5iyyoBKY6vw=",
+      "dev": true,
+      "requires": {
+        "jszip": "^3.1.3",
+        "rimraf": "^2.5.4",
+        "tmp": "0.0.30",
+        "xml2js": "^0.4.17"
+      },
+      "dependencies": {
+        "tmp": {
+          "version": "0.0.30",
+          "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz",
+          "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=",
+          "dev": true,
+          "requires": {
+            "os-tmpdir": "~1.0.1"
+          }
+        }
+      }
+    },
+    "selfsigned": {
+      "version": "1.10.4",
+      "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz",
+      "integrity": "sha1-zdfsz8pO12NdR6CL8tXTB0CS4s0=",
+      "dev": true,
+      "requires": {
+        "node-forge": "0.7.5"
+      }
+    },
+    "semver": {
+      "version": "5.5.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
+      "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==",
+      "dev": true
+    },
+    "semver-dsl": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz",
+      "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=",
+      "dev": true,
+      "requires": {
+        "semver": "^5.3.0"
+      }
+    },
+    "semver-intersect": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.4.0.tgz",
+      "integrity": "sha1-vdnAa+3N0v7bjNNSw8Q+6MYTIfM=",
+      "dev": true,
+      "requires": {
+        "semver": "^5.0.0"
+      }
+    },
+    "send": {
+      "version": "0.16.2",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
+      "integrity": "sha1-bsyh4PjBVtFBWXVZhI32RzCmu8E=",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "destroy": "~1.0.4",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "fresh": "0.5.2",
+        "http-errors": "~1.6.2",
+        "mime": "1.4.1",
+        "ms": "2.0.0",
+        "on-finished": "~2.3.0",
+        "range-parser": "~1.2.0",
+        "statuses": "~1.4.0"
+      },
+      "dependencies": {
+        "mime": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+          "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY=",
+          "dev": true
+        }
+      }
+    },
+    "serialize-javascript": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz",
+      "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==",
+      "dev": true
+    },
+    "serve-index": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+      "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+      "dev": true,
+      "requires": {
+        "accepts": "~1.3.4",
+        "batch": "0.6.1",
+        "debug": "2.6.9",
+        "escape-html": "~1.0.3",
+        "http-errors": "~1.6.2",
+        "mime-types": "~2.1.17",
+        "parseurl": "~1.3.2"
+      }
+    },
+    "serve-static": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
+      "integrity": "sha1-CV6Ecv1bRiN9tQzkhqQ/S4bGzsE=",
+      "dev": true,
+      "requires": {
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.2",
+        "send": "0.16.2"
+      }
+    },
+    "set-blocking": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+      "dev": true
+    },
+    "set-value": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+      "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^2.0.1",
+        "is-extendable": "^0.1.1",
+        "is-plain-object": "^2.0.3",
+        "split-string": "^3.0.1"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "setimmediate": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+      "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+      "dev": true
+    },
+    "setprototypeof": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+      "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=",
+      "dev": true
+    },
+    "sha.js": {
+      "version": "2.4.11",
+      "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+      "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "shallow-clone": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz",
+      "integrity": "sha1-RIDNBuiC72iyrYij6lSDLixItXE=",
+      "dev": true,
+      "requires": {
+        "is-extendable": "^0.1.1",
+        "kind-of": "^5.0.0",
+        "mixin-object": "^2.0.1"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+          "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
+          "dev": true
+        }
+      }
+    },
+    "shebang-command": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+      "dev": true,
+      "requires": {
+        "shebang-regex": "^1.0.0"
+      }
+    },
+    "shebang-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+      "dev": true
+    },
+    "shelljs": {
+      "version": "0.8.3",
+      "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz",
+      "integrity": "sha1-p/MxlSDr8J7oEnWyNorbKGZZsJc=",
+      "dev": true,
+      "requires": {
+        "glob": "^7.0.0",
+        "interpret": "^1.0.0",
+        "rechoir": "^0.6.2"
+      }
+    },
+    "signal-exit": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+      "dev": true
+    },
+    "slash": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+      "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+      "dev": true
+    },
+    "smart-buffer": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.2.tgz",
+      "integrity": "sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw==",
+      "dev": true
+    },
+    "snapdragon": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+      "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=",
+      "dev": true,
+      "requires": {
+        "base": "^0.11.1",
+        "debug": "^2.2.0",
+        "define-property": "^0.2.5",
+        "extend-shallow": "^2.0.1",
+        "map-cache": "^0.2.2",
+        "source-map": "^0.5.6",
+        "source-map-resolve": "^0.5.0",
+        "use": "^3.1.0"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "dev": true
+        }
+      }
+    },
+    "snapdragon-node": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+      "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=",
+      "dev": true,
+      "requires": {
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.0",
+        "snapdragon-util": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        }
+      }
+    },
+    "snapdragon-util": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+      "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.2.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "socket.io": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz",
+      "integrity": "sha1-oGnF/qvuPmshSnW0DOBlLhz7mYA=",
+      "dev": true,
+      "requires": {
+        "debug": "~3.1.0",
+        "engine.io": "~3.2.0",
+        "has-binary2": "~1.0.2",
+        "socket.io-adapter": "~1.1.0",
+        "socket.io-client": "2.1.1",
+        "socket.io-parser": "~3.2.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "socket.io-adapter": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz",
+      "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=",
+      "dev": true
+    },
+    "socket.io-client": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz",
+      "integrity": "sha1-3LOBA0NqtFeN2wJmOK4vIbYjZx8=",
+      "dev": true,
+      "requires": {
+        "backo2": "1.0.2",
+        "base64-arraybuffer": "0.1.5",
+        "component-bind": "1.0.0",
+        "component-emitter": "1.2.1",
+        "debug": "~3.1.0",
+        "engine.io-client": "~3.2.0",
+        "has-binary2": "~1.0.2",
+        "has-cors": "1.1.0",
+        "indexof": "0.0.1",
+        "object-component": "0.0.3",
+        "parseqs": "0.0.5",
+        "parseuri": "0.0.5",
+        "socket.io-parser": "~3.2.0",
+        "to-array": "0.1.4"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "socket.io-parser": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz",
+      "integrity": "sha1-58Yii2qh+BTmFIrqMltRqpSZ4Hc=",
+      "dev": true,
+      "requires": {
+        "component-emitter": "1.2.1",
+        "debug": "~3.1.0",
+        "isarray": "2.0.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "isarray": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+          "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+          "dev": true
+        }
+      }
+    },
+    "sockjs": {
+      "version": "0.3.19",
+      "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz",
+      "integrity": "sha1-2Xa76ACve9IK4IWY1YI5NQiZPA0=",
+      "dev": true,
+      "requires": {
+        "faye-websocket": "^0.10.0",
+        "uuid": "^3.0.1"
+      }
+    },
+    "sockjs-client": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz",
+      "integrity": "sha1-EvydbLZj2lc509xftuhofalcsXc=",
+      "dev": true,
+      "requires": {
+        "debug": "^3.2.5",
+        "eventsource": "^1.0.7",
+        "faye-websocket": "~0.11.1",
+        "inherits": "^2.0.3",
+        "json3": "^3.3.2",
+        "url-parse": "^1.4.3"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "faye-websocket": {
+          "version": "0.11.1",
+          "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
+          "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
+          "dev": true,
+          "requires": {
+            "websocket-driver": ">=0.5.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+          "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
+          "dev": true
+        }
+      }
+    },
+    "socks": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmjs.org/socks/-/socks-2.2.3.tgz",
+      "integrity": "sha512-+2r83WaRT3PXYoO/1z+RDEBE7Z2f9YcdQnJ0K/ncXXbV5gJ6wYfNAebYFYiiUjM6E4JyXnPY8cimwyvFYHVUUA==",
+      "dev": true,
+      "requires": {
+        "ip": "^1.1.5",
+        "smart-buffer": "4.0.2"
+      }
+    },
+    "socks-proxy-agent": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz",
+      "integrity": "sha1-WTa/i3B6mTB5xvN9sgkYIb/6ZHM=",
+      "dev": true,
+      "requires": {
+        "agent-base": "~4.2.0",
+        "socks": "~2.2.0"
+      }
+    },
+    "source-list-map": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+      "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=",
+      "dev": true
+    },
+    "source-map": {
+      "version": "0.7.3",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+      "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+      "dev": true
+    },
+    "source-map-loader": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.4.tgz",
+      "integrity": "sha1-wYsNxuI79m9nkkN1V8VpoR4HInE=",
+      "dev": true,
+      "requires": {
+        "async": "^2.5.0",
+        "loader-utils": "^1.1.0"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        }
+      }
+    },
+    "source-map-resolve": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+      "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=",
+      "dev": true,
+      "requires": {
+        "atob": "^2.1.1",
+        "decode-uri-component": "^0.2.0",
+        "resolve-url": "^0.2.1",
+        "source-map-url": "^0.4.0",
+        "urix": "^0.1.0"
+      }
+    },
+    "source-map-support": {
+      "version": "0.5.10",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz",
+      "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==",
+      "dev": true,
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "source-map-url": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+      "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+      "dev": true
+    },
+    "sourcemap-codec": {
+      "version": "1.4.4",
+      "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz",
+      "integrity": "sha1-xj6pJ8Ap3WvZorf6A7P+wCrVbp8=",
+      "dev": true
+    },
+    "spdx-correct": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+      "integrity": "sha1-+4PlBERSaPFUsHTiGMh8ADzTHfQ=",
+      "dev": true,
+      "requires": {
+        "spdx-expression-parse": "^3.0.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-exceptions": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+      "integrity": "sha1-LqRQrudPKom/uUUZwH/Nb0EyKXc=",
+      "dev": true
+    },
+    "spdx-expression-parse": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+      "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=",
+      "dev": true,
+      "requires": {
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-license-ids": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz",
+      "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==",
+      "dev": true
+    },
+    "spdy": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz",
+      "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==",
+      "dev": true,
+      "requires": {
+        "debug": "^4.1.0",
+        "handle-thing": "^2.0.0",
+        "http-deceiver": "^1.2.7",
+        "select-hose": "^2.0.0",
+        "spdy-transport": "^3.0.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+          "dev": true
+        }
+      }
+    },
+    "spdy-transport": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
+      "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
+      "dev": true,
+      "requires": {
+        "debug": "^4.1.0",
+        "detect-node": "^2.0.4",
+        "hpack.js": "^2.1.6",
+        "obuf": "^1.1.2",
+        "readable-stream": "^3.0.6",
+        "wbuf": "^1.7.3"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz",
+          "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        }
+      }
+    },
+    "speed-measure-webpack-plugin": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.0.tgz",
+      "integrity": "sha512-b9Yd0TrzceMVYSbuamM1sFsGM1oVfyFTM22gOoyLhymNvBVApuYpkdFOgYkKJpN/KhTpcCYcTGHg7X+FJ33Vvw==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.0.1"
+      }
+    },
+    "split-string": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+      "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^3.0.0"
+      }
+    },
+    "split.js": {
+      "version": "1.5.11",
+      "resolved": "https://registry.npmjs.org/split.js/-/split.js-1.5.11.tgz",
+      "integrity": "sha512-ec0sAbWnaMGpNHWo1ZgIlF3Mx7GzSyaO0GlcEBZGIFZQwYPPkbDV6JRpDmpzIshVig7USREuEPudy0ygQaskXg=="
+    },
+    "sprintf-js": {
+      "version": "1.0.3",
+      "resolved": "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+      "dev": true
+    },
+    "sshpk": {
+      "version": "1.16.1",
+      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+      "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+      "dev": true,
+      "requires": {
+        "asn1": "~0.2.3",
+        "assert-plus": "^1.0.0",
+        "bcrypt-pbkdf": "^1.0.0",
+        "dashdash": "^1.12.0",
+        "ecc-jsbn": "~0.1.1",
+        "getpass": "^0.1.1",
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.0.2",
+        "tweetnacl": "~0.14.0"
+      }
+    },
+    "ssri": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
+      "integrity": "sha1-ujhyycbTOgcEp9cf8EXl7EiZnQY=",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "static-extend": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+      "dev": true,
+      "requires": {
+        "define-property": "^0.2.5",
+        "object-copy": "^0.1.0"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "stats-webpack-plugin": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/stats-webpack-plugin/-/stats-webpack-plugin-0.7.0.tgz",
+      "integrity": "sha1-zP/pt0Xei7sVVXHgY/gmP8DivAY=",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.4"
+      }
+    },
+    "statuses": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+      "integrity": "sha1-u3PURtonlhBu/MG2AaJT1sRr0Ic=",
+      "dev": true
+    },
+    "stdout-stream": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz",
+      "integrity": "sha1-WsF0zdXNcmEEqgwLK9g4FdjVNd4=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "readable-stream": "^2.0.1"
+      }
+    },
+    "stream-browserify": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+      "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+      "dev": true,
+      "requires": {
+        "inherits": "~2.0.1",
+        "readable-stream": "^2.0.2"
+      }
+    },
+    "stream-each": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
+      "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "^1.1.0",
+        "stream-shift": "^1.0.0"
+      }
+    },
+    "stream-http": {
+      "version": "2.8.3",
+      "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+      "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=",
+      "dev": true,
+      "requires": {
+        "builtin-status-codes": "^3.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.3.6",
+        "to-arraybuffer": "^1.0.0",
+        "xtend": "^4.0.0"
+      }
+    },
+    "stream-shift": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+      "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+      "dev": true
+    },
+    "streamroller": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz",
+      "integrity": "sha1-odG3z4PTmvsNYwSaWsv5NJO99ks=",
+      "dev": true,
+      "requires": {
+        "date-format": "^1.2.0",
+        "debug": "^3.1.0",
+        "mkdirp": "^0.5.1",
+        "readable-stream": "^2.3.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+          "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
+          "dev": true
+        }
+      }
+    },
+    "string-width": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+      "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+      "dev": true,
+      "requires": {
+        "code-point-at": "^1.0.0",
+        "is-fullwidth-code-point": "^1.0.0",
+        "strip-ansi": "^3.0.0"
+      }
+    },
+    "string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "strip-ansi": {
+      "version": "3.0.1",
+      "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+      "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      }
+    },
+    "strip-bom": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+      "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+      "dev": true,
+      "requires": {
+        "is-utf8": "^0.2.0"
+      }
+    },
+    "strip-eof": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+      "dev": true
+    },
+    "strip-indent": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+      "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "get-stdin": "^4.0.1"
+      }
+    },
+    "style-loader": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz",
+      "integrity": "sha1-y5FUYG8+dxq2xKtjcCahBJF02SU=",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.1.0",
+        "schema-utils": "^1.0.0"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        }
+      }
+    },
+    "stylus": {
+      "version": "0.54.5",
+      "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz",
+      "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=",
+      "dev": true,
+      "requires": {
+        "css-parse": "1.7.x",
+        "debug": "*",
+        "glob": "7.0.x",
+        "mkdirp": "0.5.x",
+        "sax": "0.5.x",
+        "source-map": "0.1.x"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "7.0.6",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
+          "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.2",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "source-map": {
+          "version": "0.1.43",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+          "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+          "dev": true,
+          "requires": {
+            "amdefine": ">=0.0.4"
+          }
+        }
+      }
+    },
+    "stylus-loader": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.2.tgz",
+      "integrity": "sha1-J6cGQgsFo44DjnyssVNXjUUFE8Y=",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.0.2",
+        "lodash.clonedeep": "^4.5.0",
+        "when": "~3.6.x"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        }
+      }
+    },
+    "supports-color": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+      "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+      "dev": true,
+      "requires": {
+        "has-flag": "^3.0.0"
+      }
+    },
+    "symbol-observable": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
+      "integrity": "sha1-wiaIrtTqs83C3+rLtWFmBWCgCAQ=",
+      "dev": true
+    },
+    "tapable": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz",
+      "integrity": "sha1-TSl5I8WnKkI2DeKrUtrfquwAAY4=",
+      "dev": true
+    },
+    "tar": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
+      "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "block-stream": "*",
+        "fstream": "^1.0.2",
+        "inherits": "2"
+      }
+    },
+    "terser": {
+      "version": "3.16.1",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz",
+      "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==",
+      "dev": true,
+      "requires": {
+        "commander": "~2.17.1",
+        "source-map": "~0.6.1",
+        "source-map-support": "~0.5.9"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "terser-webpack-plugin": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.2.tgz",
+      "integrity": "sha512-1DMkTk286BzmfylAvLXwpJrI7dWa5BnFmscV/2dCr8+c56egFcbaeFAl7+sujAjdmpLam21XRdhA4oifLyiWWg==",
+      "dev": true,
+      "requires": {
+        "cacache": "^11.0.2",
+        "find-cache-dir": "^2.0.0",
+        "schema-utils": "^1.0.0",
+        "serialize-javascript": "^1.4.0",
+        "source-map": "^0.6.1",
+        "terser": "^3.16.1",
+        "webpack-sources": "^1.1.0",
+        "worker-farm": "^1.5.2"
+      },
+      "dependencies": {
+        "cacache": {
+          "version": "11.3.2",
+          "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz",
+          "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==",
+          "dev": true,
+          "requires": {
+            "bluebird": "^3.5.3",
+            "chownr": "^1.1.1",
+            "figgy-pudding": "^3.5.1",
+            "glob": "^7.1.3",
+            "graceful-fs": "^4.1.15",
+            "lru-cache": "^5.1.1",
+            "mississippi": "^3.0.0",
+            "mkdirp": "^0.5.1",
+            "move-concurrently": "^1.0.1",
+            "promise-inflight": "^1.0.1",
+            "rimraf": "^2.6.2",
+            "ssri": "^6.0.1",
+            "unique-filename": "^1.1.1",
+            "y18n": "^4.0.0"
+          }
+        },
+        "find-cache-dir": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz",
+          "integrity": "sha1-TB+u1Z9FGEUw+51/oSOk0EqYRy0=",
+          "dev": true,
+          "requires": {
+            "commondir": "^1.0.1",
+            "make-dir": "^1.0.0",
+            "pkg-dir": "^3.0.0"
+          }
+        },
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+          "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+          "dev": true,
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+          "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
+          "dev": true,
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "lru-cache": {
+          "version": "5.1.1",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+          "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+          "dev": true,
+          "requires": {
+            "yallist": "^3.0.2"
+          }
+        },
+        "mississippi": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+          "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=",
+          "dev": true,
+          "requires": {
+            "concat-stream": "^1.5.0",
+            "duplexify": "^3.4.2",
+            "end-of-stream": "^1.1.0",
+            "flush-write-stream": "^1.0.0",
+            "from2": "^2.1.0",
+            "parallel-transform": "^1.1.0",
+            "pump": "^3.0.0",
+            "pumpify": "^1.3.3",
+            "stream-each": "^1.1.0",
+            "through2": "^2.0.0"
+          }
+        },
+        "p-limit": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz",
+          "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==",
+          "dev": true,
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+          "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "p-try": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
+          "integrity": "sha1-hQgLuHxkaI+keZb+j3376CEXYLE=",
+          "dev": true
+        },
+        "pkg-dir": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+          "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
+          "dev": true,
+          "requires": {
+            "find-up": "^3.0.0"
+          }
+        },
+        "pump": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+          "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=",
+          "dev": true,
+          "requires": {
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        },
+        "ssri": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+          "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=",
+          "dev": true,
+          "requires": {
+            "figgy-pudding": "^3.5.1"
+          }
+        },
+        "yallist": {
+          "version": "3.0.3",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+          "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+          "dev": true
+        }
+      }
+    },
+    "throttleit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
+      "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=",
+      "dev": true
+    },
+    "through": {
+      "version": "2.3.8",
+      "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
+      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+      "dev": true
+    },
+    "through2": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+      "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=",
+      "dev": true,
+      "requires": {
+        "readable-stream": "~2.3.6",
+        "xtend": "~4.0.1"
+      }
+    },
+    "thunky": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz",
+      "integrity": "sha1-9d9zJFNAewkZHa5z4qjMc/OBqCY=",
+      "dev": true
+    },
+    "timers-browserify": {
+      "version": "2.0.10",
+      "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
+      "integrity": "sha1-HSjj0qrfHVpZlsTp+VYBzQU0gK4=",
+      "dev": true,
+      "requires": {
+        "setimmediate": "^1.0.4"
+      }
+    },
+    "tmp": {
+      "version": "0.0.33",
+      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+      "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=",
+      "dev": true,
+      "requires": {
+        "os-tmpdir": "~1.0.2"
+      }
+    },
+    "to-array": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
+      "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
+      "dev": true
+    },
+    "to-arraybuffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+      "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+      "dev": true
+    },
+    "to-fast-properties": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+      "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+      "dev": true
+    },
+    "to-object-path": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+      "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "to-regex": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+      "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=",
+      "dev": true,
+      "requires": {
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "regex-not": "^1.0.2",
+        "safe-regex": "^1.1.0"
+      }
+    },
+    "to-regex-range": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+      "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+      "dev": true,
+      "requires": {
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1"
+      }
+    },
+    "tough-cookie": {
+      "version": "2.4.3",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+      "integrity": "sha1-U/Nto/R3g7CSWvoG/587FlKA94E=",
+      "dev": true,
+      "requires": {
+        "psl": "^1.1.24",
+        "punycode": "^1.4.1"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+          "dev": true
+        }
+      }
+    },
+    "tree-kill": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz",
+      "integrity": "sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q==",
+      "dev": true
+    },
+    "trim-newlines": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+      "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+      "dev": true,
+      "optional": true
+    },
+    "trim-right": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+      "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+      "dev": true
+    },
+    "true-case-path": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz",
+      "integrity": "sha1-+BO1qMhrQNpZYGcisUTjIleZ9H0=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "glob": "^7.1.2"
+      }
+    },
+    "ts-node": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.0.tgz",
+      "integrity": "sha512-klJsfswHP0FuOLsvBZ/zzCfUvakOSSxds78mVeK7I+qP76YWtxf16hEZsp3U+b0kIo82R5UatGFeblYMqabb2Q==",
+      "dev": true,
+      "requires": {
+        "arrify": "^1.0.0",
+        "buffer-from": "^1.1.0",
+        "diff": "^3.1.0",
+        "make-error": "^1.1.1",
+        "minimist": "^1.2.0",
+        "mkdirp": "^0.5.1",
+        "source-map-support": "^0.5.6",
+        "yn": "^2.0.0"
+      }
+    },
+    "tslib": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
+      "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ=="
+    },
+    "tslint": {
+      "version": "5.11.0",
+      "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz",
+      "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=",
+      "dev": true,
+      "requires": {
+        "babel-code-frame": "^6.22.0",
+        "builtin-modules": "^1.1.1",
+        "chalk": "^2.3.0",
+        "commander": "^2.12.1",
+        "diff": "^3.2.0",
+        "glob": "^7.1.1",
+        "js-yaml": "^3.7.0",
+        "minimatch": "^3.0.4",
+        "resolve": "^1.3.2",
+        "semver": "^5.3.0",
+        "tslib": "^1.8.0",
+        "tsutils": "^2.27.2"
+      },
+      "dependencies": {
+        "resolve": {
+          "version": "1.8.1",
+          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
+          "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+          "dev": true,
+          "requires": {
+            "path-parse": "^1.0.5"
+          }
+        }
+      }
+    },
+    "tsutils": {
+      "version": "2.29.0",
+      "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz",
+      "integrity": "sha1-MrSIUBRnrL7dS4VJhnOggSrKC5k=",
+      "dev": true,
+      "requires": {
+        "tslib": "^1.8.1"
+      }
+    },
+    "tty-browserify": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+      "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+      "dev": true
+    },
+    "tunnel-agent": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "tweetnacl": {
+      "version": "0.14.5",
+      "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+      "dev": true
+    },
+    "type-is": {
+      "version": "1.6.16",
+      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
+      "integrity": "sha1-+JzjQVQcZysl7nrjxz3uOyvlAZQ=",
+      "dev": true,
+      "requires": {
+        "media-typer": "0.3.0",
+        "mime-types": "~2.1.18"
+      }
+    },
+    "typedarray": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+      "dev": true
+    },
+    "typescript": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.2.tgz",
+      "integrity": "sha512-VCj5UiSyHBjwfYacmDuc/NOk4QQixbE+Wn7MFJuS0nRuPQbof132Pw4u53dm264O8LPc2MVsc7RJNml5szurkg==",
+      "dev": true
+    },
+    "uglify-js": {
+      "version": "3.4.9",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
+      "integrity": "sha1-rwLxgMEgfXZDLkc+0koo9KeCuuM=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "commander": "~2.17.1",
+        "source-map": "~0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "ultron": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
+      "integrity": "sha1-n+FTahCmZKZSZqHjzPhf02MCvJw=",
+      "dev": true
+    },
+    "union-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+      "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+      "dev": true,
+      "requires": {
+        "arr-union": "^3.1.0",
+        "get-value": "^2.0.6",
+        "is-extendable": "^0.1.1",
+        "set-value": "^0.4.3"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "set-value": {
+          "version": "0.4.3",
+          "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+          "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+          "dev": true,
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-extendable": "^0.1.1",
+            "is-plain-object": "^2.0.1",
+            "to-object-path": "^0.3.0"
+          }
+        }
+      }
+    },
+    "unique-filename": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+      "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=",
+      "dev": true,
+      "requires": {
+        "unique-slug": "^2.0.0"
+      }
+    },
+    "unique-slug": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz",
+      "integrity": "sha1-Xp7cbRzo+yZNsYpQfvm9hURFHKY=",
+      "dev": true,
+      "requires": {
+        "imurmurhash": "^0.1.4"
+      }
+    },
+    "unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+      "dev": true
+    },
+    "unset-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+      "dev": true,
+      "requires": {
+        "has-value": "^0.3.1",
+        "isobject": "^3.0.0"
+      },
+      "dependencies": {
+        "has-value": {
+          "version": "0.3.1",
+          "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+          "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+          "dev": true,
+          "requires": {
+            "get-value": "^2.0.3",
+            "has-values": "^0.1.4",
+            "isobject": "^2.0.0"
+          },
+          "dependencies": {
+            "isobject": {
+              "version": "2.1.0",
+              "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+              "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+              "dev": true,
+              "requires": {
+                "isarray": "1.0.0"
+              }
+            }
+          }
+        },
+        "has-values": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+          "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+          "dev": true
+        }
+      }
+    },
+    "upath": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
+      "integrity": "sha1-NSVll+RqWB20eT0M5H+prr/J+r0=",
+      "dev": true
+    },
+    "uri-js": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+      "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=",
+      "dev": true,
+      "requires": {
+        "punycode": "^2.1.0"
+      }
+    },
+    "urix": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+      "dev": true
+    },
+    "url": {
+      "version": "0.11.0",
+      "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+      "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+      "dev": true,
+      "requires": {
+        "punycode": "1.3.2",
+        "querystring": "0.2.0"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.3.2",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+          "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+          "dev": true
+        }
+      }
+    },
+    "url-parse": {
+      "version": "1.4.4",
+      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz",
+      "integrity": "sha1-ysFVbpX6oDA2kf7Fz51aG8NGSPg=",
+      "dev": true,
+      "requires": {
+        "querystringify": "^2.0.0",
+        "requires-port": "^1.0.0"
+      }
+    },
+    "use": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+      "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=",
+      "dev": true
+    },
+    "useragent": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz",
+      "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=",
+      "dev": true,
+      "requires": {
+        "lru-cache": "2.2.x",
+        "tmp": "0.0.x"
+      },
+      "dependencies": {
+        "lru-cache": {
+          "version": "2.2.4",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz",
+          "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=",
+          "dev": true
+        }
+      }
+    },
+    "util": {
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+      "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+      "dev": true,
+      "requires": {
+        "inherits": "2.0.3"
+      }
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+      "dev": true
+    },
+    "utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+      "dev": true
+    },
+    "uuid": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+      "integrity": "sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE=",
+      "dev": true
+    },
+    "validate-npm-package-license": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+      "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=",
+      "dev": true,
+      "requires": {
+        "spdx-correct": "^3.0.0",
+        "spdx-expression-parse": "^3.0.0"
+      }
+    },
+    "validate-npm-package-name": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz",
+      "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=",
+      "dev": true,
+      "requires": {
+        "builtins": "^1.0.3"
+      }
+    },
+    "vary": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+      "dev": true
+    },
+    "verror": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+      "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "core-util-is": "1.0.2",
+        "extsprintf": "^1.2.0"
+      }
+    },
+    "vm-browserify": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+      "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+      "dev": true,
+      "requires": {
+        "indexof": "0.0.1"
+      }
+    },
+    "void-elements": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
+      "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=",
+      "dev": true
+    },
+    "watchpack": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
+      "integrity": "sha1-S8EsLr6KonenHx0/FNaFx7RGzQA=",
+      "dev": true,
+      "requires": {
+        "chokidar": "^2.0.2",
+        "graceful-fs": "^4.1.2",
+        "neo-async": "^2.5.0"
+      }
+    },
+    "wbuf": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
+      "integrity": "sha1-wdjRSTFtPqhShIiVy2oL/oh7h98=",
+      "dev": true,
+      "requires": {
+        "minimalistic-assert": "^1.0.0"
+      }
+    },
+    "webdriver-js-extender": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.0.0.tgz",
+      "integrity": "sha512-fbyKiVu3azzIc5d4+26YfuPQcFTlgFQV5yQ/0OQj4Ybkl4g1YQuIPskf5v5wqwRJhHJnPHthB6tqCjWHOKLWag==",
+      "dev": true,
+      "requires": {
+        "@types/selenium-webdriver": "^3.0.0",
+        "selenium-webdriver": "^3.0.1"
+      }
+    },
+    "webpack": {
+      "version": "4.29.0",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.0.tgz",
+      "integrity": "sha512-pxdGG0keDBtamE1mNvT5zyBdx+7wkh6mh7uzMOo/uRQ/fhsdj5FXkh/j5mapzs060forql1oXqXN9HJGju+y7w==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/helper-module-context": "1.7.11",
+        "@webassemblyjs/wasm-edit": "1.7.11",
+        "@webassemblyjs/wasm-parser": "1.7.11",
+        "acorn": "^6.0.5",
+        "acorn-dynamic-import": "^4.0.0",
+        "ajv": "^6.1.0",
+        "ajv-keywords": "^3.1.0",
+        "chrome-trace-event": "^1.0.0",
+        "enhanced-resolve": "^4.1.0",
+        "eslint-scope": "^4.0.0",
+        "json-parse-better-errors": "^1.0.2",
+        "loader-runner": "^2.3.0",
+        "loader-utils": "^1.1.0",
+        "memory-fs": "~0.4.1",
+        "micromatch": "^3.1.8",
+        "mkdirp": "~0.5.0",
+        "neo-async": "^2.5.0",
+        "node-libs-browser": "^2.0.0",
+        "schema-utils": "^0.4.4",
+        "tapable": "^1.1.0",
+        "terser-webpack-plugin": "^1.1.0",
+        "watchpack": "^1.5.0",
+        "webpack-sources": "^1.3.0"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        },
+        "schema-utils": {
+          "version": "0.4.7",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz",
+          "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        }
+      }
+    },
+    "webpack-core": {
+      "version": "0.6.9",
+      "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz",
+      "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=",
+      "dev": true,
+      "requires": {
+        "source-list-map": "~0.1.7",
+        "source-map": "~0.4.1"
+      },
+      "dependencies": {
+        "source-list-map": {
+          "version": "0.1.8",
+          "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz",
+          "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.4.4",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+          "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+          "dev": true,
+          "requires": {
+            "amdefine": ">=0.0.4"
+          }
+        }
+      }
+    },
+    "webpack-dev-middleware": {
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.5.1.tgz",
+      "integrity": "sha512-4dwCh/AyMOYAybggUr8fiCkRnjVDp+Cqlr9c+aaNB3GJYgRGYQWJ1YX/WAKUNA9dPNHZ6QSN2lYDKqjKSI8Vqw==",
+      "dev": true,
+      "requires": {
+        "memory-fs": "~0.4.1",
+        "mime": "^2.3.1",
+        "range-parser": "^1.0.3",
+        "webpack-log": "^2.0.0"
+      },
+      "dependencies": {
+        "mime": {
+          "version": "2.4.0",
+          "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz",
+          "integrity": "sha1-4FH9iBNYWF8yed8zP+aU2gvP/dY=",
+          "dev": true
+        }
+      }
+    },
+    "webpack-dev-server": {
+      "version": "3.1.14",
+      "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.14.tgz",
+      "integrity": "sha512-mGXDgz5SlTxcF3hUpfC8hrQ11yhAttuUQWf1Wmb+6zo3x6rb7b9mIfuQvAPLdfDRCGRGvakBWHdHOa0I9p/EVQ==",
+      "dev": true,
+      "requires": {
+        "ansi-html": "0.0.7",
+        "bonjour": "^3.5.0",
+        "chokidar": "^2.0.0",
+        "compression": "^1.5.2",
+        "connect-history-api-fallback": "^1.3.0",
+        "debug": "^3.1.0",
+        "del": "^3.0.0",
+        "express": "^4.16.2",
+        "html-entities": "^1.2.0",
+        "http-proxy-middleware": "~0.18.0",
+        "import-local": "^2.0.0",
+        "internal-ip": "^3.0.1",
+        "ip": "^1.1.5",
+        "killable": "^1.0.0",
+        "loglevel": "^1.4.1",
+        "opn": "^5.1.0",
+        "portfinder": "^1.0.9",
+        "schema-utils": "^1.0.0",
+        "selfsigned": "^1.9.1",
+        "semver": "^5.6.0",
+        "serve-index": "^1.7.2",
+        "sockjs": "0.3.19",
+        "sockjs-client": "1.3.0",
+        "spdy": "^4.0.0",
+        "strip-ansi": "^3.0.0",
+        "supports-color": "^5.1.0",
+        "url": "^0.11.0",
+        "webpack-dev-middleware": "3.4.0",
+        "webpack-log": "^2.0.0",
+        "yargs": "12.0.2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "camelcase": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+          "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+          "dev": true
+        },
+        "cliui": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+          "integrity": "sha1-NIQi2+gtgAswIu709qwQvy5NG0k=",
+          "dev": true,
+          "requires": {
+            "string-width": "^2.1.1",
+            "strip-ansi": "^4.0.0",
+            "wrap-ansi": "^2.0.0"
+          },
+          "dependencies": {
+            "strip-ansi": {
+              "version": "4.0.0",
+              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+              "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^3.0.0"
+              }
+            }
+          }
+        },
+        "cross-spawn": {
+          "version": "6.0.5",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+          "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+          "dev": true,
+          "requires": {
+            "nice-try": "^1.0.4",
+            "path-key": "^2.0.1",
+            "semver": "^5.5.0",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        },
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "decamelize": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz",
+          "integrity": "sha1-ZW17vICUxMeI6lPFhAkIycfQY8c=",
+          "dev": true,
+          "requires": {
+            "xregexp": "4.0.0"
+          }
+        },
+        "execa": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+          "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^6.0.0",
+            "get-stream": "^4.0.0",
+            "is-stream": "^1.1.0",
+            "npm-run-path": "^2.0.0",
+            "p-finally": "^1.0.0",
+            "signal-exit": "^3.0.0",
+            "strip-eof": "^1.0.0"
+          }
+        },
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+          "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+          "dev": true,
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "get-stream": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+          "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+          "dev": true,
+          "requires": {
+            "pump": "^3.0.0"
+          }
+        },
+        "invert-kv": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
+          "integrity": "sha1-c5P1r6Weyf9fZ6J2INEcIm4+7AI=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+          "dev": true
+        },
+        "lcid": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+          "integrity": "sha1-bvXS32DlL4LrIopMNz6NHzlyU88=",
+          "dev": true,
+          "requires": {
+            "invert-kv": "^2.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+          "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
+          "dev": true,
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "mime": {
+          "version": "2.4.0",
+          "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz",
+          "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==",
+          "dev": true
+        },
+        "ms": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+          "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
+          "dev": true
+        },
+        "os-locale": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+          "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
+          "dev": true,
+          "requires": {
+            "execa": "^1.0.0",
+            "lcid": "^2.0.0",
+            "mem": "^4.0.0"
+          }
+        },
+        "p-limit": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz",
+          "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==",
+          "dev": true,
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+          "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "p-try": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
+          "integrity": "sha1-hQgLuHxkaI+keZb+j3376CEXYLE=",
+          "dev": true
+        },
+        "pump": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+          "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+          "dev": true,
+          "requires": {
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
+          }
+        },
+        "semver": {
+          "version": "5.6.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+          "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+          "dev": true
+        },
+        "string-width": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+          "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
+          "dev": true,
+          "requires": {
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^4.0.0"
+          },
+          "dependencies": {
+            "strip-ansi": {
+              "version": "4.0.0",
+              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+              "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^3.0.0"
+              }
+            }
+          }
+        },
+        "webpack-dev-middleware": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz",
+          "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==",
+          "dev": true,
+          "requires": {
+            "memory-fs": "~0.4.1",
+            "mime": "^2.3.1",
+            "range-parser": "^1.0.3",
+            "webpack-log": "^2.0.0"
+          }
+        },
+        "which-module": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+          "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+          "dev": true
+        },
+        "yargs": {
+          "version": "12.0.2",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz",
+          "integrity": "sha1-/lgjQ2k5KvM+y+9TgZFx7/D1qtw=",
+          "dev": true,
+          "requires": {
+            "cliui": "^4.0.0",
+            "decamelize": "^2.0.0",
+            "find-up": "^3.0.0",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^3.0.0",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^1.0.1",
+            "set-blocking": "^2.0.0",
+            "string-width": "^2.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^3.2.1 || ^4.0.0",
+            "yargs-parser": "^10.1.0"
+          }
+        },
+        "yargs-parser": {
+          "version": "10.1.0",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
+          "integrity": "sha1-cgImW4n36eny5XZeD+c1qQXtuqg=",
+          "dev": true,
+          "requires": {
+            "camelcase": "^4.1.0"
+          }
+        }
+      }
+    },
+    "webpack-log": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
+      "integrity": "sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8=",
+      "dev": true,
+      "requires": {
+        "ansi-colors": "^3.0.0",
+        "uuid": "^3.3.2"
+      }
+    },
+    "webpack-merge": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz",
+      "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.5"
+      }
+    },
+    "webpack-sources": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz",
+      "integrity": "sha1-KijcufH0X+lg2PFJMlK17mUw+oU=",
+      "dev": true,
+      "requires": {
+        "source-list-map": "^2.0.0",
+        "source-map": "~0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "webpack-subresource-integrity": {
+      "version": "1.1.0-rc.6",
+      "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.1.0-rc.6.tgz",
+      "integrity": "sha1-N/bxJk4es3jkFGWpjagPrXariIY=",
+      "dev": true,
+      "requires": {
+        "webpack-core": "^0.6.8"
+      }
+    },
+    "websocket-driver": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
+      "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
+      "dev": true,
+      "requires": {
+        "http-parser-js": ">=0.4.0",
+        "websocket-extensions": ">=0.1.1"
+      }
+    },
+    "websocket-extensions": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
+      "integrity": "sha1-XS/yKXcAPsaHpLhwc9+7rBRszyk=",
+      "dev": true
+    },
+    "when": {
+      "version": "3.6.4",
+      "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz",
+      "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=",
+      "dev": true
+    },
+    "which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=",
+      "dev": true,
+      "requires": {
+        "isexe": "^2.0.0"
+      }
+    },
+    "which-module": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+      "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
+      "dev": true,
+      "optional": true
+    },
+    "wide-align": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+      "integrity": "sha1-rgdOa9wMFKQx6ATmJFScYzsABFc=",
+      "dev": true,
+      "requires": {
+        "string-width": "^1.0.2 || 2"
+      }
+    },
+    "wordwrap": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+      "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+      "dev": true
+    },
+    "worker-farm": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz",
+      "integrity": "sha1-rsxAWXb6talVJhgIRvDboojzpKA=",
+      "dev": true,
+      "requires": {
+        "errno": "~0.1.7"
+      }
+    },
+    "wrap-ansi": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+      "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+      "dev": true,
+      "requires": {
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1"
+      }
+    },
+    "wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+      "dev": true
+    },
+    "ws": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
+      "integrity": "sha1-8c+E/i1ekB686U767OeF8YeiKPI=",
+      "dev": true,
+      "requires": {
+        "async-limiter": "~1.0.0",
+        "safe-buffer": "~5.1.0",
+        "ultron": "~1.1.0"
+      }
+    },
+    "xml2js": {
+      "version": "0.4.19",
+      "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
+      "integrity": "sha1-aGwg8hMgnpSr8NG88e+qKRx4J6c=",
+      "dev": true,
+      "requires": {
+        "sax": ">=0.6.0",
+        "xmlbuilder": "~9.0.1"
+      },
+      "dependencies": {
+        "sax": {
+          "version": "1.2.4",
+          "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+          "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=",
+          "dev": true
+        }
+      }
+    },
+    "xmlbuilder": {
+      "version": "9.0.7",
+      "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+      "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
+      "dev": true
+    },
+    "xmlhttprequest-ssl": {
+      "version": "1.5.5",
+      "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
+      "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=",
+      "dev": true
+    },
+    "xregexp": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz",
+      "integrity": "sha1-5pgYneSd0qGMxWh7BeF8jkOUMCA=",
+      "dev": true
+    },
+    "xtend": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+      "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+      "dev": true
+    },
+    "y18n": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+      "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms=",
+      "dev": true
+    },
+    "yallist": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+      "dev": true
+    },
+    "yargs": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
+      "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "camelcase": "^3.0.0",
+        "cliui": "^3.2.0",
+        "decamelize": "^1.1.1",
+        "get-caller-file": "^1.0.1",
+        "os-locale": "^1.4.0",
+        "read-pkg-up": "^1.0.1",
+        "require-directory": "^2.1.1",
+        "require-main-filename": "^1.0.1",
+        "set-blocking": "^2.0.0",
+        "string-width": "^1.0.2",
+        "which-module": "^1.0.0",
+        "y18n": "^3.2.1",
+        "yargs-parser": "^5.0.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+          "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+          "dev": true,
+          "optional": true
+        },
+        "y18n": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+          "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "yargs-parser": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
+      "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "camelcase": "^3.0.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+          "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "yauzl": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
+      "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
+      "dev": true,
+      "requires": {
+        "fd-slicer": "~1.0.1"
+      }
+    },
+    "yeast": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
+      "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
+      "dev": true
+    },
+    "yn": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz",
+      "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=",
+      "dev": true
+    },
+    "zone.js": {
+      "version": "0.8.26",
+      "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.26.tgz",
+      "integrity": "sha1-e91y92aMWnrWsRgUi06jnFnQjS0="
+    }
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/package.json b/org.eclipse.mdm.application/src/main/webapp/package.json
new file mode 100644
index 0000000..c49e299
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/package.json
@@ -0,0 +1,72 @@
+{
+  "name": "openMDM-Web",
+  "version": "5.1.0M8",
+  "description": "MDM web client",
+  "repository": "http://git.eclipse.org/c/mdmbl/org.eclipse.mdm.nucleus.git",
+  "license": "EPL-2.0",
+  "scripts": {
+    "ng": "ng",
+    "start": "ng serve",
+    "build": "ng build --prod",
+    "test": "ng test --reporters mocha --browsers PhantomJS",
+    "lint": "ng lint --force --format json > coverage/tslint_out.json",
+    "e2e": "ng e2e",
+    "coverage": "ng test --browsers PhantomJS --watch=false --codeCoverage=true",
+    "ci_build": "npm run coverage && ng build --prod --base-href /org.eclipse.mdm.nucleus/",
+    "extract-translations": "ngx-translate-extract --input ./src --output ./src/assets/i18n/en.json ./src/assets/i18n/de.json --clean --sort --format namespaced-json --marker TRANSLATE"
+  },
+  "private": true,
+  "dependencies": {
+    "@angular/animations": "7.2.4",
+    "@angular/cdk": "7.1.1",
+    "@angular/common": "7.2.4",
+    "@angular/compiler": "7.2.4",
+    "@angular/core": "7.2.4",
+    "@angular/forms": "7.2.4",
+    "@angular/http": "7.2.4",
+    "@angular/platform-browser": "7.2.4",
+    "@angular/platform-browser-dynamic": "7.2.4",
+    "@angular/router": "7.2.4",
+    "@ngx-translate/core": "11.0.1",
+    "@ngx-translate/http-loader": "4.0.0",
+    "bootstrap": "4.1.3",
+    "chart.js": "2.9.3",
+    "class-transformer": "0.1.6",
+    "core-js": "2.6.0",
+    "file-saver": "1.3.3",
+    "font-awesome": "4.7.0",
+    "ngx-bootstrap": "3.1.2",
+    "primeflex": "^1.0.0",
+    "primeicons": "1.0.0",
+    "primeng": "7.0.1",
+    "rxjs": "6.3.3",
+    "rxjs-compat": "6.3.3",
+    "split.js": "1.5.11",
+    "tslib": "^1.10.0",
+    "zone.js": "0.8.26"
+  },
+  "devDependencies": {
+    "@angular-devkit/build-angular": "0.13.1",
+    "@angular/cli": "7.3.1",
+    "@angular/compiler-cli": "7.2.4",
+    "@angular/language-service": "7.2.4",
+    "@biesbjerg/ngx-translate-extract": "2.3.4",
+    "@types/jasmine": "2.8.8",
+    "@types/jasminewd2": "2.0.3",
+    "@types/node": "8.9.4",
+    "codelyzer": "4.5.0",
+    "jasmine-core": "2.99.1",
+    "jasmine-spec-reporter": "4.2.1",
+    "karma": "3.1.1",
+    "karma-chrome-launcher": "2.2.0",
+    "karma-phantomjs-launcher": "1.0.4",
+    "karma-coverage-istanbul-reporter": "2.0.1",
+    "karma-jasmine": "1.1.2",
+    "karma-jasmine-html-reporter": "0.2.2",
+    "karma-mocha-reporter": "2.2.5",
+    "protractor": "5.4.0",
+    "ts-node": "7.0.0",
+    "tslint": "5.11.0",
+    "typescript": "3.2.2"
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/proxies/development.config.json b/org.eclipse.mdm.application/src/main/webapp/proxies/development.config.json
new file mode 100644
index 0000000..ce26b9c
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/proxies/development.config.json
@@ -0,0 +1,6 @@
+{
+  "/org.eclipse.mdm.nucleus/": {
+    "target": "http://sa:sa@localhost:8080/",
+    "secure": "false"
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/NOTICE.html b/org.eclipse.mdm.application/src/main/webapp/src/app/NOTICE.html
new file mode 100644
index 0000000..1bf6a90
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/NOTICE.html
@@ -0,0 +1,219 @@
+<pre>
+# Notices for Eclipse MDM|BL
+
+This content is produced and maintained by the Eclipse MDM|BL project,
+it is a project of the openMDM(R) Eclipse Working Group.
+
+* Project home: https://projects.eclipse.org/projects/technology.mdmbl
+
+## Trademarks
+
+Eclipse MDM|BL, MDM|BL and Eclipse openMDM(R) logo are registered trademarks
+of the Eclipse Foundation.
+
+## Copyright
+
+All content is the property of the following respective authors or their employers.
+For more information regarding authorship of content, please consult the listed
+source code repository logs.
+
+Copyright (c) 2016-2019 Gigatronik Ingolstadt GmbH
+Copyright (c) 2016-2020 Peak Solution GmbH
+Copyright (c) 2017-2018 science + computing AG Tuebingen (ATOS SE)
+Copyright (c) 2017-2018 Canoo Engineering AG
+Copyright (c) 2017 Florian Schmitt
+Copyright (c) 2017-2020 Angelika Wittek
+Copyright (c) 2018-2019 Elektronische Fahrwerksysteme GMBH
+Copyright (c) 2018-2020 Karakun AG
+Copyright (c) 2018-2020 Alexander Nehmer
+
+## Declared Project Licenses
+
+This program and the accompanying materials are made available under the
+terms of the Eclipse Public License v. 2.0 which is available at
+http://www.eclipse.org/legal/epl-2.0.
+
+SPDX-License-Identifier: EPL-2.0
+
+## Source Code
+
+The project maintains the following source code repositories:
+
+org.eclipse.mdm.api.base.git          - The openMDM(R) API.
+org.eclipse.mdm.api.default.git     - Extension of the openMDM(R) API containing default elements.
+org.eclipse.mdm.api.odsadapter.git  - ODS implementation of persistence adapter.
+org.eclipse.mdm.nucleus.git         - Core building blocks for the openMDM Business Logic and Web Frontend.
+
+## Third-party Content
+
+The Content includes items that have been sourced from third parties as set out below.
+If you did not receive this Content directly from the Eclipse Foundation, the following
+is provided for informational purposes only, and you should look to
+the Redistributor's license for terms and conditions of use.
+
+
+@angular/animations:7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io/api/animations
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/cdk:7.1.1
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io/api
+    * Source:  https://github.com/angular/angular/releases/tag/7.1.1
+
+
+@angular/common@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io/api/common
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4r
+
+@angular/compiler@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/core@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/forms@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/http@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/platform-browser-dynamic@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/platform-browser@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/router@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+bootstrap@4.1.3
+    * License: MIT
+    * Licence Path: https://github.com/twbs/bootstrap/raw/master/LICENSE
+    * Project: https://getbootstrap.com/
+    * Source:  https://github.com/twbs/bootstrap
+
+class-transformer@0.1.6
+    * License: MIT
+    * Licence Path: https://github.com/typestack/class-transformer/blob/master/LICENSE
+    * Project: https://github.com/pleerock/class-transformer
+    * Source:  https://github.com/pleerock/class-transformer
+
+core-js@2.6.0
+    * License: MIT
+    * Licence Path: https://github.com/zloirock/core-js/raw/master/LICENSE
+    * Project: https://github.com/zloirock/core-js
+    * Source:  https://github.com/zloirock/core-js/releases/tag/v2.6.0
+
+file-saver@1.3.3
+    * License: MIT
+    * Licence Path: https://github.com/eligrey/FileSaver.js/raw/master/LICENSE.md
+    * Project: https://github.com/eligrey/FileSaver.js
+    * Source:  https://github.com/eligrey/FileSaver.js
+
+font-awesome@4.7.0
+    * License: MIT
+    * Licence Path: https://github.com/FortAwesome/Font-Awesome/blob/master/LICENSE.txt
+    * Project: https://fontawesome.com/
+    * Source:  https://github.com/FortAwesome/Font-Awesome
+
+ng2-split-pane@1.3.1
+    * License: MIT
+    * Licence Path: https://github.com/wannabegeek/ng2-split-pane/raw/master/LICENSE
+    * Project: https://github.com/wannabegeek/ng2-split-pane
+    * Source:  https://github.com/wannabegeek/ng2-split-pane
+
+ngx-bootstrap@3.1.2
+    * License: MIT
+    * Licence Path: https://github.com/valor-software/ngx-bootstrap/blob/v3.1.2/LICENSE
+    * Project: https://valor-software.com/ngx-bootstrap
+    * Source:  https://github.com/valor-software/ngx-bootstrap/tree/v3.1.2
+    
+@ngx-translate/core@11.0.1
+    * License: MIT 
+    * Licence Path:   https://github.com/ngx-translate/core/blob/v11.0.1/LICENSE  
+    * Project URL:    http://www.ngx-translate.com/
+    * Source URL:     https://github.com/ngx-translate/core
+
+@ngx-translate/http-loader@4.0.0
+    * License: MIT 
+    * Licence Path:   https://github.com/ngx-translate/http-loader/blob/v4.0.0/LICENSE  
+    * Project URL:    http://www.ngx-translate.com/
+    * Source URL:     https://github.com/ngx-translate/http-loader/tree/v4.0.0
+    
+
+primeicons:1.0.0
+    * License: MIT
+    * Licence Path: https://github.com/primefaces/primeicons/blob/1.0.0/LICENSE
+    * Project: https://www.primefaces.org/primeng
+    * Source:  https://github.com/primefaces/primeicons/tree/1.0.0
+
+primeng@7.0.1
+    * License: MIT
+    * Licence Path: https://github.com/primefaces/primeng/blob/7.0.1/LICENSE.md
+    * Project: https://www.primefaces.org/primeng
+    * Source:  https://github.com/primefaces/primeng/tree/7.0.1
+
+rxjs@5.1.0
+    * License: Apache-2.0
+    * Project: https://rxjs-dev.firebaseapp.com/
+    * Source:  https://github.com/ReactiveX/rxjs/tree/6.3.3
+
+rxjs-compat:6.3.3
+    * License: Apache-2.0
+    * Project: https://rxjs-dev.firebaseapp.com/
+    * Source:  https://github.com/ReactiveX/rxjs/tree/6.3.3/compat
+
+tslib@1.9.0
+    * License: Apache-2.0
+    * Project: https://github.com/Microsoft/tslib
+    * Source:  https://github.com/Microsoft/tslib/tree/1.9.0
+
+zone.js@0.8.26
+    * License: MIT
+    * Licence Path: https://github.com/angular/zone.js/raw/master/LICENSE
+    * Project: https://github.com/angular
+    * Source:  https://github.com/angular/zone.js/releases/tag/v0.8.26
+    
+FFAMFAMFAM Silk Icon, Version 1.3
+    * License: Creative Commons Attribution 3.0 License 
+    * Licence Path: https://creativecommons.org/licenses/by/3.0/
+    * Project: http://www.famfamfam.com/lab/icons/silk/
+    * Source:  http://www.famfamfam.com/lab/icons/silk/
+
+
+## Cryptography
+
+Content may contain encryption software. The country in which you are currently
+may have restrictions on the import, possession, and use, and/or re-export to
+another country, of encryption software. BEFORE using any encryption software,
+please check the country's laws, regulations and policies concerning the import,
+possession, or use, and re-export of encryption software, to see if this is
+permitted.
+</pre>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/admin-modules.component.css b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/admin-modules.component.css
new file mode 100644
index 0000000..ea615fe
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/admin-modules.component.css
@@ -0,0 +1,20 @@
+@charset "ISO-8859-1";
+
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+.navbar-vertical {}
+.navbar-vertical .navbar-nav {}
+.navbar-vertical .navbar-nav .navbar-brand {display:block;}
+.navbar-vertical .navbar-nav .nav-item {display:block;}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/admin-modules.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/admin-modules.component.html
new file mode 100644
index 0000000..495a99d
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/admin-modules.component.html
@@ -0,0 +1,39 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+ <div class="mainnavigation">
+  <div id="leftsidenav" class="split">
+    <nav class="navbar navbar-default navbar-vertical bg-light">
+      <div class="container-fluid">
+        <div class="" id="bs-admin-navbar">
+          <a class="navbar-brand" style="font-weight: 500;">{{'administration.admin-modules.modules' | translate }}</a>
+          <ul class="nav navbar-nav mdm-link-list">
+            <li *ngFor="let m of links" [routerLinkActive]="['active']" class="nav-item">
+              <a routerLink="{{m.path}}" class="nav-link" style="cursor:pointer;">
+                {{m.name | translate}}
+              </a>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </nav>
+  </div>
+  <div id="rightsidenav" class="split">
+    <div class="navigator-content" (scroll)=onScroll($event)>
+      <router-outlet></router-outlet>
+      <div *ngIf="scrollBtnVisible" style="position: fixed; bottom: 30px; right: 35px;">
+        <button class="btn btn-default" (click)="onScrollTop()" style="z-index: 10000;"><span class="fa fa-arrow-up" style="z-index: 10000;" title="{{ 'navigator-view.mdm-navigator-view.tooltip-scroll-up' | translate }}"></span></button>
+      </div>
+    </div>
+  </div>
+</div>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/admin-modules.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/admin-modules.component.ts
new file mode 100644
index 0000000..ff7d906
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/admin-modules.component.ts
@@ -0,0 +1,81 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Component, AfterViewInit} from '@angular/core';
+import {Router} from '@angular/router';
+import Split from 'split.js';
+import { TRANSLATE } from '../core/mdm-core.module';
+
+@Component({
+  selector: 'admin-modules',
+  templateUrl: 'admin-modules.component.html',
+  styleUrls: ['./admin-modules.component.css'],
+  providers: []
+})
+export class AdminModulesComponent implements AfterViewInit {
+
+  div: any;
+  scrollBtnVisible = false;
+
+  split: Split;
+
+  links = [
+    { name: TRANSLATE('administration.admin-modules.preferences'), path: 'preferences'},
+    { name: TRANSLATE('administration.admin-modules.extsystems'), path: 'extsystems'}
+  ];
+  constructor(private router: Router) { }
+
+
+  minWidthLeft() {
+    return 180;
+  }
+
+  minWidthRight() {
+    return 0.20 * window.innerWidth;
+  }
+
+  initRatio() {
+    return Math.floor(Math.max(250 / window.innerWidth, 0.20) * 100);
+  }
+  initRatioRight() {
+    return 100 - this.initRatio();
+  }
+  ngAfterViewInit(): void {
+    this.split = Split(['#leftsidenav', '#rightsidenav'], {
+      sizes: [this.initRatio(), this.initRatioRight()],
+      minSize: this.minWidthLeft(),
+      gutterSize: 10,
+      gutterStyle: function (dimension, gutterSize) {
+        return {
+          'width': gutterSize + 'px',
+          'height': (document.getElementById('leftsidenav').clientHeight - 5) + 'px'
+        };
+      },
+    });
+  }
+
+  onScrollTop() {
+    this.div.scrollTop = 0;
+  }
+
+  onScroll(event: any) {
+    if (event.target.scrollTop > 0) {
+      this.scrollBtnVisible = true;
+    } else {
+      this.scrollBtnVisible = false;
+    }
+    this.div = event.target;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/admin-routing.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/admin-routing.module.ts
new file mode 100644
index 0000000..f29aa38
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/admin-routing.module.ts
@@ -0,0 +1,43 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+
+import { AdminModulesComponent } from './admin-modules.component';
+import { ExtSystemComponent } from './extsystem.component';
+import { PreferenceRoutingModule } from './preference-routing.module';
+
+const moduleRoutes: Routes = [
+  {
+    path: '', component: AdminModulesComponent,
+    children: [
+      { path: 'preferences', loadChildren: './preference.module#PreferenceModule' },
+      { path: 'extsystems', component: ExtSystemComponent },
+      { path: '', redirectTo: 'preferences', pathMatch: 'full' }
+    ]
+  }
+];
+
+@NgModule({
+  imports: [
+    RouterModule.forChild(moduleRoutes)
+  ],
+  exports: [
+    RouterModule
+  ]
+})
+
+export class AdminRoutingModule { }
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/admin.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/admin.module.ts
new file mode 100644
index 0000000..d63d0cc
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/admin.module.ts
@@ -0,0 +1,62 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { NgModule } from '@angular/core';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
+import { ComponentLoaderFactory } from 'ngx-bootstrap/component-loader';
+
+import { MDMCoreModule } from '../core/mdm-core.module';
+import { ExtSystemComponent } from './extsystem.component';
+import { ExtSystemViewerComponent } from './extsystem-viewer.component';
+import { ExtSystemEditorComponent } from './extsystem-editor.component';
+
+import { AdminModulesComponent } from './admin-modules.component';
+import { AdminRoutingModule } from './admin-routing.module';
+import { ExtSystemService } from './extsystem.service';
+import { PreferenceModule } from './preference.module';
+import { TableModule } from 'primeng/table';
+import { ContextMenuModule } from 'primeng/contextmenu';
+import { DialogModule } from 'primeng/dialog';
+import { CatalogService } from './catalog.service';
+import { AutoCompleteModule } from 'primeng/autocomplete';
+
+@NgModule( {
+    imports: [
+        AdminRoutingModule,
+        MDMCoreModule,
+        FormsModule,
+        ReactiveFormsModule,
+        PreferenceModule,
+        TableModule,
+        ContextMenuModule,
+        DialogModule,
+        AutoCompleteModule
+    ],
+    declarations: [
+        AdminModulesComponent,
+        ExtSystemComponent,
+        ExtSystemViewerComponent,
+        ExtSystemEditorComponent
+    ],
+    exports: [
+        AdminModulesComponent,
+    ],
+    providers: [
+        ComponentLoaderFactory,
+        ExtSystemService,
+        CatalogService
+    ],
+})
+export class AdminModule { }
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/catalog.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/catalog.service.ts
new file mode 100644
index 0000000..c497c0f
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/catalog.service.ts
@@ -0,0 +1,78 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Injectable } from '@angular/core';
+import { Http, Response, Headers, RequestOptions } from '@angular/http';
+
+import { PropertyService } from '../core/property.service';
+
+import { plainToClass } from 'class-transformer';
+import { HttpErrorHandler } from '../core/http-error-handler';
+import { throwError as observableThrowError,  Observable } from 'rxjs';
+import { map, catchError } from 'rxjs/operators';
+import { Node } from '../navigator/node';
+
+@Injectable()
+export class CatalogService {
+
+  private prefEndpoint: string;
+
+  constructor(private http: Http,
+              private httpErrorHandler: HttpErrorHandler,
+              private _prop: PropertyService) {
+    this.prefEndpoint = _prop.getUrl('mdm/environments/');
+  }
+
+  getTplRootsForType(scope: string, type: string): Observable<Node[]> {
+    return this.http.get(this.prefEndpoint + scope + '/tplroots/' + type).pipe(
+      map(response => plainToClass(Node, response.json().data)),
+      catchError(this.handleError));
+  }
+
+  getTplCompForRoot(scope: string, type: string, rootId: string): Observable<Node[]> {
+    return this.http.get(this.prefEndpoint + scope + '/tplroots/' + type + '/' + rootId + '/tplcomps').pipe(
+      map(response => plainToClass(Node, response.json().data)),
+      catchError(this.handleError));
+  }
+
+  getTplAttrsForComp(scope: string, type: string, rootId: string, tplCompId: string): Observable<Node[]> {
+    return this.http.get(this.prefEndpoint + scope + '/tplroots/' + type + '/' + rootId + '/tplcomps/' + tplCompId + '/tplattrs').pipe(
+      map(response => plainToClass(Node, response.json().data)),
+      catchError(this.handleError));
+  }
+
+  getCatCompsForType(scope: string, type: string): Observable<Node[]> {
+    return this.http.get(this.prefEndpoint + scope + '/catcomps/' + type).pipe(
+      map(response => plainToClass(Node, response.json().data)),
+      catchError(this.handleError));
+  }
+
+  getCatAttrsForComp(scope: string, type: string, catCompId: string): Observable<Node[]> {
+    return this.http.get(this.prefEndpoint + scope + '/catcomps/' + type + '/' + catCompId + '/catattrs').pipe(
+      map(response => plainToClass(Node, response.json().data)),
+      catchError(this.handleError));
+  }
+
+  private handleError(e: Error | any) {
+    if (e instanceof Response) {
+      let response = <Response> e;
+      if (response.status !== 200) {
+        return observableThrowError('Could not request catalog element! '
+          + 'Please check if application server is running and database is configured correctly.');
+      }
+    }
+    return this.httpErrorHandler.handleError(e);
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/edit-preference.component.css b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/edit-preference.component.css
new file mode 100644
index 0000000..416149e
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/edit-preference.component.css
@@ -0,0 +1,32 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+@charset "ISO-8859-1";
+
+ul {
+  list-style-type: none;
+}
+textarea {
+    resize: vertical;
+}
+
+.input-group-addon {
+    min-width: 100px;
+    text-align: left;
+    font-weight: 600;
+}
+
+input[readonly] {
+     cursor: default;
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/edit-preference.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/edit-preference.component.html
new file mode 100644
index 0000000..f6b3143
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/edit-preference.component.html
@@ -0,0 +1,69 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+<div bsModal #lgModal="bs-modal" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true">
+  <div class="modal-dialog modal-lg">
+    <div class="modal-content">
+      <div class="modal-header">
+        <button type="button" title="{{ 'administration.edit-preference.tooltip-close' | translate }}" class="close" (click)="closeDialog()" aria-label="Close">
+          <span aria-hidden="true">&times;</span>
+        </button>
+        <h4 class="modal-title" translate>administration.edit-preference.title-preferences-editor</h4>
+      </div>
+      <div class="modal-body">
+        <form [formGroup]="preferenceForm" novalidate>
+          <ul class="list-group">
+            <li>
+              <div class="block">
+                <label>{{ 'administration.edit-preference.lbl-key' | translate }}: </label>
+                <input type="text" class="form-control" formControlName="key" [readonly]="!isKeyEmpty">
+              </div>
+            </li>
+            <li>
+              <label>{{ 'administration.edit-preference.lbl-scope' | translate }}: </label>
+              <input type="text" class="form-control" formControlName="scope" [readonly]="true">
+            </li>
+            <li *ngIf="showSource">
+              <label>{{ 'administration.edit-preference.lbl-source' | translate }}: </label>
+              <select class="form-control" formControlName="source">
+                <option *ngFor="let env of envs">{{env.sourceName}}</option>
+              </select>
+            </li>
+            <li *ngIf="showUser">
+              <label i18n="administration_edit-preference User|User">User: </label>
+              <input type="text" class="form-control" formControlName="user" [readonly]=true placeholder="auto-generated">
+            </li>
+            <li>
+              <div class="form-group">
+                <label for="comment">{{ 'administration.edit-preference.lbl-value' | translate }}:</label>
+                <textarea class="form-control" formControlName="value" rows="5" id="value"></textarea>
+              </div>
+            </li>
+          </ul>
+          <div class="row" style="margin-top: 20px;">
+            <div class="col-md-12">
+              <button type="button" class="btn btn-default" (click)="closeDialog()">
+                <span class="fa fa-times"></span> 
+                <span translate>administration.edit-preference.btn-cancel</span>
+              </button>
+              <button type="button" class="btn btn-default pull-right" (click)="onSave()" [disabled]="!preferenceForm.valid">
+                <span class="fa fa-download"></span> <span translate>administration.edit-preference.btn-save</span>
+              </button>
+            </div>
+          </div>
+        </form>
+      </div>
+    </div>
+  </div>
+</div>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/edit-preference.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/edit-preference.component.ts
new file mode 100644
index 0000000..7adff76
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/edit-preference.component.ts
@@ -0,0 +1,114 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Component, Input, Output, ViewChild, EventEmitter, OnInit } from '@angular/core';
+import { FormGroup, FormControl, FormBuilder, FormArray, Validators } from '@angular/forms';
+
+import { ModalDirective } from 'ngx-bootstrap';
+
+import { PreferenceService, Preference, Scope } from '../core/preference.service';
+import { NodeService } from '../navigator/node.service';
+import { Node } from '../navigator/node';
+
+import {MDMNotificationService} from '../core/mdm-notification.service';
+
+import { TranslateService } from '@ngx-translate/core';
+
+@Component( {
+    selector: 'edit-preference',
+    templateUrl: './edit-preference.component.html',
+    styleUrls: ['./edit-preference.component.css']
+})
+export class EditPreferenceComponent implements OnInit {
+
+    @Input() scope: string;
+    showSource: boolean;
+    showUser: boolean;
+    isKeyEmpty: boolean;
+    isUserEmpty: boolean;
+    preferenceForm: FormGroup;
+    needSave = false;
+    envs: Node[];
+
+    @ViewChild( 'lgModal' ) public childModal: ModalDirective;
+
+    constructor( private formBuilder: FormBuilder,
+                 private nodeService: NodeService,
+                 private notificationService: MDMNotificationService,
+                 private translateService: TranslateService ) { }
+
+    ngOnInit() {
+        let node: Node;
+        this.nodeService.getNodes(node).subscribe(
+                env => this.envs = env,
+                error => this.notificationService.notifyError(
+                    this.translateService.instant('administration.edit-preference.err-cannot-load-data-source'), error)
+                );
+        this.setupForm( new Preference() );
+    }
+
+    setupForm( preference: Preference ) {
+        this.setOptions(preference);
+        this.preferenceForm = this.formBuilder
+            .group( {
+                scope: [preference.scope],
+                source: [preference.source],
+                user: [preference.user],
+                key: [preference.key, Validators.required],
+                value: [preference.value, Validators.required],
+                id: [preference.id]
+            });
+    }
+
+    setOptions(preference: Preference) {
+        this.needSave = false;
+        this.isKeyEmpty = preference.key === '';
+        switch ( this.scope ) {
+        case Scope.SYSTEM:
+            this.showSource = false;
+            this.showUser = false;
+            break;
+        case Scope.SOURCE:
+            this.showSource = true;
+            this.showUser = false;
+            break;
+        case Scope.USER:
+            this.showSource = false;
+            this.showUser = true;
+            break;
+        }
+    }
+
+    showDialog( preference?: Preference) {
+        if (preference == null) {
+            preference = new Preference();
+            preference.scope = this.scope;
+            if (this.scope === Scope.SOURCE) {
+                preference.source = this.envs[0].sourceName;
+            }
+        }
+        this.setupForm( preference);
+        this.childModal.show();
+    }
+
+    onSave() {
+        this.needSave = true;
+        this.childModal.hide();
+    }
+
+    closeDialog() {
+        this.childModal.hide();
+    }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem-editor.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem-editor.component.html
new file mode 100644
index 0000000..6701cd1
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem-editor.component.html
@@ -0,0 +1,106 @@
+<!-- ********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ******************************************************************************** -->
+
+  <div class="mdm-extsystem-editor-container">
+
+    <p-table class="ext-system-table" [value]="tableExtSystems" *ngIf="selectedEnvironment && extSystems" styleClass="table-hover">
+      <ng-template pTemplate="header">
+        <tr>
+          <th>{{ 'administration.extsystem.name' | translate }}</th>
+          <th>{{ 'administration.extsystem.description' | translate }}</th>
+        </tr>
+      </ng-template>
+      <ng-template pTemplate="body" let-rowData let-rowIndex="rowIndex">
+        <tr>
+          <td>
+            <input required type="text" [(ngModel)]="rowData.name" />
+          </td>
+          <td>
+            <input type="text" *ngIf="getAttributeFromNode(rowData,'Description')" [(ngModel)]="getAttributeFromNode(rowData,'Description').value" />
+          </td>
+        </tr>
+      </ng-template>
+    </p-table>
+    <div class="commands">
+      <button type="button" class="btn btn-default pull-right" (click)="saveExtSystem()">
+        <span class="fa fa-plus"></span> {{'administration.extsystem.btn-save' | translate }}
+      </button>
+    </div>
+
+    <div *ngIf="selectedExtSystem">
+      <div class="custom-split-pane">
+        <div class="custom-split-pane-content custom-split-pane-left">
+          <div>{{ 'administration.extsystem.ext-system-attributes' | translate }}</div>
+          <p-table class="ext-system-attr-table" [value]="getExternalSystemAttributes()" selectionMode="single" [(selection)]="selectedExtSystemAttr" (onRowSelect)="onExtSystemAttrSelect($event)">
+            <ng-template pTemplate="header">
+              <tr>
+                <th style="width: 3em"></th>
+                <th>{{ 'administration.extsystem.name' | translate }}</th>
+                <th>{{ 'administration.extsystem.description' | translate }}</th>
+                <th class="actioncol"></th>
+              </tr>
+            </ng-template>
+            <ng-template pTemplate="body" let-rowData let-rowIndex="rowIndex">
+              <tr [pSelectableRow]="rowData" [pSelectableRowIndex]="rowIndex">
+                <td><p-tableRadioButton [value]="rowData"></p-tableRadioButton></td>
+                <td><input required type="text" [(ngModel)]="rowData.name" (change)="updateSystemAttrModel(rowData)" /></td>
+                <td><input type="text" *ngIf="getAttributeFromNode(rowData,'Description')" [(ngModel)]="getAttributeFromNode(rowData,'Description').value" (change)="updateSystemAttrModel(rowData)" /></td>
+                <td class="actioncol"><button type="button" class="btn btn-default" (click)="removeExtSystemAttr(rowData)" title="{{ 'administration.extsystem.btn-del' | translate }}">
+                  <span class="fa fa-times"></span>
+                </button></td>
+              </tr>
+            </ng-template>
+          </p-table>
+          <div *ngIf="loadingExtSystemAttr">{{ 'administration.extsystem.loading-attributes' | translate }}</div>
+
+          <div class="commands">
+            <button type="button" class="btn btn-default pull-right" (click)="addExtSystemAttr()">
+              <span class="fa fa-plus"></span> {{'administration.extsystem.btn-add' | translate }}
+            </button>
+          </div>
+
+        </div>
+        <div class="custom-split-pane-content custom-split-pane-right">
+          <div>{{ 'administration.extsystem.mdm-attributes' | translate }}</div>
+          <p-table class="ext-system-mdmattr-table" *ngIf="selectedExtSystemAttr" [value]="getMDMAttributes()">
+            <ng-template pTemplate="header">
+              <tr>
+                <th>{{ 'administration.extsystem.component-type' | translate }}</th>
+                <th>{{ 'administration.extsystem.component-name' | translate }}</th>
+                <th>{{ 'administration.extsystem.attribute-name' | translate }}</th>
+                <th class="actioncol"></th>
+              </tr>
+            </ng-template>
+            <ng-template pTemplate="body" let-rowData let-rowIndex="rowIndex">
+              <tr>
+                <td class="dropdowncol"><div><p-dropdown *ngIf="getAttributeFromNode(rowData,'CompType')" styleClass="drpdwn" [autoWidth]="false" [style]="{'width':'100%'}" [options]="mdmCompTypes" [(ngModel)]="getAttributeFromNode(rowData,'CompType').value" (onChange)="handleCompTypeSelect($event, rowData)" required="true"></p-dropdown></div></td>
+                <td class="dropdowncol"><div><p-dropdown *ngIf="getAttributeFromNode(rowData,'CompName')" styleClass="drpdwn" [autoWidth]="false" [style]="{'width':'100%'}" [options]="availableCatalogComps(rowData)" [(ngModel)]="getAttributeFromNode(rowData,'CompName').value" (onChange)="handleCompSelect($event, rowData)" editable="true"></p-dropdown></div></td>
+                <td class="dropdowncol"><div><p-dropdown *ngIf="getAttributeFromNode(rowData,'AttrName')" styleClass="drpdwn" [autoWidth]="false" [style]="{'width':'100%'}" [options]="availableAttributeComps(rowData)" [(ngModel)]="getAttributeFromNode(rowData,'AttrName').value" (onChange)="handleAttrCompSelect($event, rowData)" editable="true"></p-dropdown></div></td>
+                <td class="actioncol"><button type="button" class="btn btn-default" (click)="removeExtSystemMDMAttr(rowData)" title="{{ 'administration.extsystem.btn-del' | translate }}">
+                  <span class="fa fa-times"></span>
+                </button></td>
+              </tr>
+            </ng-template>
+          </p-table>
+
+          <div class="commands">
+            <button *ngIf="selectedExtSystemAttr" type="button" class="btn btn-default pull-right" (click)="addExtSystemMDMAttr()">
+              <span class="fa fa-plus"></span> {{'administration.extsystem.btn-add' | translate }}
+            </button>
+          </div>
+
+        </div>
+      </div>
+    </div>
+  </div>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem-editor.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem-editor.component.ts
new file mode 100644
index 0000000..55f6d18
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem-editor.component.ts
@@ -0,0 +1,615 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Component, OnInit, ViewChild, Input, OnDestroy, Output, EventEmitter } from '@angular/core';
+import { FormGroup, FormControl, FormBuilder, FormArray, Validators } from '@angular/forms';
+import { ActivatedRoute } from '@angular/router';
+import { TranslateService } from '@ngx-translate/core';
+import { DropdownModule } from 'primeng/dropdown';
+import { TreeTableModule } from 'primeng/treetable';
+import { TreeNode, MenuItem, SelectItem } from 'primeng/api';
+import { ContextMenuModule } from 'primeng/contextmenu';
+import { TreeTable, TreeTableToggler, DataTable } from 'primeng/primeng';
+import { Observable, BehaviorSubject, of, forkJoin } from 'rxjs';
+import 'rxjs/add/operator/toPromise';
+
+import { MDMNotificationService } from '../core/mdm-notification.service';
+import { ExtSystemService } from './extsystem.service';
+import { Node, Attribute, Relation } from '../navigator/node';
+import { plainToClass } from 'class-transformer';
+import { CatalogService } from './catalog.service';
+import { mergeMap, flatMap, map } from 'rxjs/operators';
+
+@Component( {
+    selector: 'mdm-extsystem-editor',
+  templateUrl: './extsystem-editor.component.html',
+  styleUrls: ['./extsystem.component.css']
+})
+export class ExtSystemEditorComponent implements OnInit, OnDestroy {
+
+  // passed down from parent
+  @Input() extSystems: Node[];
+  @Input() selectedEnvironment: Node;
+  @Input() selectedES: string;
+
+  @Output() editMode = new EventEmitter<boolean>();
+
+  // table selection
+  selectedExtSystem: Node;
+  selectedExtSystemAttr: Node;
+  tableExtSystems: Node[] = new Array();
+
+  // dropdown for table edit
+  mdmCompTypes: SelectItem[];
+  mdmCompNames: Node[];
+  mdmAttrNames: Node[];
+
+  // external system attributes
+  extSystemAttrs: Node[];
+  bsExtSystemAttrs: BehaviorSubject<Node[]> = new BehaviorSubject<Node[]>(undefined);
+
+  // loading states
+  loadingExtSystemAttr = false;
+
+  // for immediate creation only
+  tmpExtSystemAttr: Node;
+  tmpExtSystemMDMAttr: Node;
+
+  // dropdown boxes
+  availableSlctCtlgComps: any[][] = [];
+  availableSlctAttrComps: any[][] = [];
+
+  loadedTemplateRoots: any[][] = [];
+  loadedCatalogComps: any[][] = [];
+  loadedAttributeComps: any[][] = [];
+
+  constructor(private extSystemService: ExtSystemService,
+              private notificationService: MDMNotificationService,
+              private translateService: TranslateService,
+              private catalogService: CatalogService) {
+
+    this.bsExtSystemAttrs.subscribe(value => {
+      this.extSystemAttrs = value;
+    });
+
+    this.mdmCompTypes = [
+      { label: this.translateService.instant('administration.extsystem.dropdown-please-select'), value: '' },
+      { label: this.translateService.instant('administration.extsystem.unit-under-test'), value: 'UnitUnderTest' },
+      { label: this.translateService.instant('administration.extsystem.test-equipment'), value: 'TestEquipment' },
+      { label: this.translateService.instant('administration.extsystem.test-sequence'), value: 'TestSequence' },
+      { label: this.translateService.instant('administration.extsystem.sensor'), value: 'Sensor' }
+    ];
+  }
+
+  ngOnInit() {
+    for (let extSystem of this.extSystems) {
+      if (extSystem.type === 'ExtSystem' && extSystem.id === this.selectedES) {
+        this.selectedExtSystem = extSystem;
+        this.tableExtSystems.push(this.selectedExtSystem);
+        break;
+      }
+    }
+
+    this.loadingExtSystemAttr = true;
+    this.extSystemService.getExtSystemAttributesForScope(this.selectedEnvironment.sourceName, this.selectedExtSystem.id)
+      .subscribe(attrs => {
+        this.bsExtSystemAttrs.next(attrs);
+        this.loadingExtSystemAttr = false;
+      });
+  }
+
+  ngOnDestroy() {
+  }
+
+  getExternalSystemAttributes() {
+    if (!this.extSystemAttrs) {
+      return new Array();
+    }
+    return this.extSystemAttrs.filter(attr => attr.type === 'ExtSystemAttribute');
+  }
+  getMDMAttributes() {
+    let ids = new Array();
+      if (this.selectedExtSystemAttr.relations) {
+      for (let relation of this.selectedExtSystemAttr.relations) {
+        if (relation.entityType === 'MDMAttribute') {
+          for (let relationid of relation.ids) {
+            ids.push(relationid);
+          }
+        }
+      }
+    }
+    let data = new Array();
+    for (let attr of this.extSystemAttrs) {
+      if (attr.type === 'MDMAttribute' && ids.find(el => el === attr.id)) {
+        data.push(attr);
+      }
+    }
+    return data;
+  }
+
+  getAttributeValueFromNode(node: Node, attribute: string) {
+    if (node && node.attributes !== undefined) {
+      for (let attr of node.attributes) {
+        if (attr.name === attribute) {
+          return attr.value;
+        }
+      }
+    }
+    return '';
+  }
+
+  getAttributeFromNode(node: Node, attribute: string) {
+    if (node && node.attributes !== undefined) {
+      for (let attr of node.attributes) {
+        if (attr.name === attribute) {
+          return attr;
+        }
+      }
+    }
+    return undefined;
+  }
+
+  getNextTemporaryId() {
+    let id = -1;
+    for (let extSystem of this.extSystems) {
+      if (parseInt(extSystem.id, 10) < id) {
+        id = parseInt(extSystem.id, 10);
+      }
+    }
+    return --id;
+  }
+
+  createAttribute(name: string, value?: string) {
+    let attr = new Attribute();
+    attr.dataType = 'STRING';
+    attr.unit = '';
+    attr.value = value !== undefined ? value : '';
+    attr.name = name;
+    return attr;
+  }
+
+  getIndicesForIds(ids: string[]) {
+    let indices = new Array();
+    for (let id of ids) {
+      for (let extSystem of this.extSystems) {
+        if (extSystem.id === ids[id]) {
+          indices.push(this.extSystems.indexOf(extSystem));
+        }
+      }
+    }
+    return indices;
+  }
+
+  /**
+   * Save the external system
+   */
+  saveExtSystem() {
+    this.getAttributeFromNode(this.selectedExtSystem, 'Name').value = this.selectedExtSystem.name;
+    this.extSystemService.saveExtSystem(this.selectedEnvironment.sourceName, this.selectedExtSystem)
+      .subscribe(
+        response => { /* discard */ },
+        error => this.notificationService.notifyError(
+          this.translateService.instant('administration.extsystem.err-cannot-update-ext-system'), error)
+      );
+  }
+
+  addExtSystemAttr() {
+    // initialze the node
+    this.tmpExtSystemAttr = new Node();
+    this.tmpExtSystemAttr.type = 'ExtSystemAttribute';
+    this.tmpExtSystemAttr.sourceType = 'ExtSystemAttr';
+    this.tmpExtSystemAttr.sourceName = this.selectedEnvironment.sourceName;
+    this.tmpExtSystemAttr.attributes = new Array();
+    this.tmpExtSystemAttr.attributes.push(this.createAttribute('Description'));
+    this.tmpExtSystemAttr.attributes.push(this.createAttribute('Name'));
+    this.tmpExtSystemAttr.attributes.push(this.createAttribute('ConverterClassname'));
+    this.tmpExtSystemAttr.attributes.push(this.createAttribute('ConverterParameter'));
+    this.tmpExtSystemAttr.attributes.push(this.createAttribute('MimeType', 'application/x-asam.aoany.extsystemattr'));
+
+    // Initialize relations on the external system if it is not defined yet
+    if (this.selectedExtSystem.relations === undefined || this.selectedExtSystem.relations.length === 0) {
+      this.selectedExtSystem.relations = new Array();
+      let relation = new Relation();
+      relation.entityType = 'ExtSystemAttribute';
+      relation.type = 'CHILDREN';
+      relation.ids = new Array();
+      this.selectedExtSystem.relations.push(relation);
+    }
+    if (this.selectedExtSystem.relations[0].ids === undefined) {
+      this.selectedExtSystem.relations[0].ids = new Array();
+    }
+
+    // Set initial name to persist the attribute
+    this.tmpExtSystemAttr.name = 'Attribut';
+    this.getAttributeFromNode(this.tmpExtSystemAttr, 'Name').value = this.tmpExtSystemAttr.name;
+    this.saveExtSystemAttr(this.tmpExtSystemAttr);
+  }
+
+  /**
+   * Remove the external system attribute
+   */
+  removeExtSystemAttr(extSystemAttr?: Node) {
+    if (extSystemAttr != undefined) {
+
+      if (extSystemAttr.id !== undefined && parseInt(extSystemAttr.id, 10) > 0 && this.extSystemAttrs.indexOf(extSystemAttr) !== -1) {
+        this.extSystemService.deleteExtSystemAttr(this.selectedEnvironment.sourceName, extSystemAttr.id).subscribe();
+        let idxES: number = this.extSystemAttrs.indexOf(extSystemAttr);
+        if (idxES !== -1) {
+          this.extSystemAttrs.splice(idxES, 1);
+          if (extSystemAttr.relations !== undefined && extSystemAttr.relations.length > 0) {
+            // remove all children
+            let indices = new Array<number>();
+            for (let h of extSystemAttr.relations) {
+              // the mdm attributes
+              indices = indices.concat(this.getIndicesForIds(h.ids));
+            }
+            indices.sort((a, b) => b - a);
+            for (let i of indices) {
+              this.extSystemAttrs.splice(indices[i], 1);
+            }
+          }
+        }
+      }
+    }
+    this.selectedExtSystemAttr = undefined;
+  }
+
+  /**
+   * Change listener on the name and description of the table element
+   */
+  updateSystemAttrModel(rowData: Node) {
+    // update the name attribute
+    this.getAttributeFromNode(rowData, 'Name').value = rowData.name;
+    // persist the change
+    this.saveExtSystemAttr(rowData);
+  }
+
+  /**
+   * Method invoked only if the save of the external system attribute succeeded
+   * This method is additional only successful if the node is a new node
+   */
+  saveExtSystemAttrSuccess(nodes: Node[]) {
+    if (this.tmpExtSystemAttr) {
+      for (let node of nodes) {
+        if (node.name === this.tmpExtSystemAttr.name && this.tmpExtSystemAttr.id === undefined) {
+          this.tmpExtSystemAttr.id = node.id;
+        }
+      }
+      this.extSystemAttrs.push(this.tmpExtSystemAttr);
+      this.tmpExtSystemAttr = undefined;
+    }
+  }
+
+  /**
+   * Save the external system attribute
+   */
+  saveExtSystemAttr(tmpAttr: Node) {
+    this.extSystemService.saveExtSystemAttr(this.selectedEnvironment.sourceName, tmpAttr, this.selectedExtSystem)
+      .subscribe(
+        response => this.saveExtSystemAttrSuccess(plainToClass(Node, response.json().data)),
+        error => {
+          this.tmpExtSystemAttr = undefined;
+          this.notificationService.notifyError(
+            this.translateService.instant('administration.extsystem.err-cannot-save-ext-system-attr'), error);
+        }
+      );
+  }
+
+  onExtSystemAttrSelect(event) {
+    let mdmAttrs = this.getMDMAttributes();
+    for (let attr of mdmAttrs) {
+      this.getCatalogComponentStr(attr);
+      this.getAttributeComponentStr(attr);
+    }
+  }
+
+  addExtSystemMDMAttr() {
+    this.tmpExtSystemMDMAttr = new Node();
+    this.tmpExtSystemMDMAttr.type = 'MDMAttribute';
+    this.tmpExtSystemMDMAttr.sourceType = 'MDMAttr';
+    this.tmpExtSystemMDMAttr.sourceName = this.selectedEnvironment.sourceName;
+    this.tmpExtSystemMDMAttr.attributes = new Array();
+    this.tmpExtSystemMDMAttr.attributes.push(this.createAttribute('AttrName'));
+    this.tmpExtSystemMDMAttr.attributes.push(this.createAttribute('CompName'));
+    this.tmpExtSystemMDMAttr.attributes.push(this.createAttribute('CompType'));
+    this.tmpExtSystemMDMAttr.attributes.push(this.createAttribute('MimeType', 'application/x-asam.aoany.mdmattr'));
+    // the name is the hierarchy from the parent elements appended with the name, set in save method
+    this.tmpExtSystemMDMAttr.attributes.push(this.createAttribute('Name'));
+
+    // add relation
+    if (this.selectedExtSystemAttr.relations === undefined || this.selectedExtSystemAttr.relations.length === 0) {
+      this.selectedExtSystemAttr.relations = new Array();
+      let relation = new Relation();
+      relation.entityType = 'MDMAttribute';
+      relation.type = 'CHILDREN';
+      relation.ids = new Array();
+      this.selectedExtSystemAttr.relations.push(relation);
+    }
+    if (this.selectedExtSystemAttr.relations[0].ids === undefined) {
+      this.selectedExtSystemAttr.relations[0].ids = new Array();
+    }
+
+    // Set initial name to persist the attribute
+    this.getAttributeFromNode(this.tmpExtSystemMDMAttr, 'CompType').value = 'UnitUnderTest';
+    this.getAttributeFromNode(this.tmpExtSystemMDMAttr, 'CompName').value = 'Komponente';
+    this.getAttributeFromNode(this.tmpExtSystemMDMAttr, 'AttrName').value = 'Attribut';
+
+    this.saveExtSystemMDMAttr(this.tmpExtSystemMDMAttr);
+  }
+
+  removeExtSystemMDMAttr(extSystemMDMAttr?: Node) {
+    if (extSystemMDMAttr != undefined) {
+      if (this.extSystemAttrs.indexOf(extSystemMDMAttr) !== -1) {
+        if (extSystemMDMAttr.id !== undefined && parseInt(extSystemMDMAttr.id, 10) > 0) {
+          this.extSystemService.deleteExtSystemMDMAttr(this.selectedEnvironment.sourceName, extSystemMDMAttr.id).subscribe();
+        }
+        this.extSystemAttrs.splice(this.extSystemAttrs.indexOf(extSystemMDMAttr), 1);
+      }
+    }
+  }
+
+  saveExtSystemMDMAttrSuccess(nodes: Node[]) {
+    if (this.tmpExtSystemMDMAttr) {
+      for (let node of nodes) {
+        if (node.name === this.tmpExtSystemMDMAttr.name && this.tmpExtSystemMDMAttr.id === undefined) {
+          this.tmpExtSystemMDMAttr.id = node.id;
+          for (let relation of this.selectedExtSystemAttr.relations) {
+            if (relation.entityType === 'MDMAttribute') {
+              if (relation.ids === undefined) {
+                relation.ids = new Array();
+              }
+              relation.ids.push(node.id);
+            }
+          }
+        }
+      }
+      this.extSystemAttrs.push(this.tmpExtSystemMDMAttr);
+      this.tmpExtSystemMDMAttr = undefined;
+    }
+  }
+
+  saveExtSystemMDMAttr(tmpAttr: Node) {
+      // update the name attribute with the hierarchy
+      tmpAttr.name = this.getAttributeValueFromNode(tmpAttr, 'CompType')
+        + '.' + this.getAttributeValueFromNode(tmpAttr, 'CompName')
+        + '.' + this.getAttributeValueFromNode(tmpAttr, 'AttrName');
+      this.getAttributeFromNode(tmpAttr, 'Name').value = tmpAttr.name;
+
+    this.extSystemService.saveExtSystemMDMAttr(this.selectedEnvironment.sourceName, tmpAttr, this.selectedExtSystemAttr)
+      .subscribe(
+        response => this.saveExtSystemMDMAttrSuccess(plainToClass(Node, response.json().data)),
+        error => {
+          this.tmpExtSystemMDMAttr = undefined;
+          this.notificationService.notifyError(
+            this.translateService.instant('administration.extsystem.err-cannot-save-ext-mdm-attr'), error);
+        }
+      );
+  }
+
+  async loadCatalogComps(type: string) {
+    if (type !== undefined && type != null && type.length > 0) {
+
+      // load the template roots if not available
+      if (this.loadedTemplateRoots[type] === undefined) {
+        this.loadedTemplateRoots[type] = [];
+        try {
+          const response = await this.catalogService.getTplRootsForType(this.selectedEnvironment.sourceName, type).toPromise();
+          this.loadedTemplateRoots[type] = response;
+        } catch (error) {
+          this.notificationService.notifyError(
+            this.translateService.instant('administration.extsystem.err-cannot-load-comp-types'), error);
+        }
+      }
+
+      // load the catalog components if not already triggered
+      if (this.loadedTemplateRoots[type] !== undefined && this.loadedTemplateRoots[type].length > 0
+        && this.loadedCatalogComps[type] === undefined) {
+        this.loadedCatalogComps[type] = [];
+        let tmpIds = this.loadedTemplateRoots[type].map(tr => tr.id);
+
+        of(tmpIds).pipe(
+          flatMap(q => forkJoin(...q.map(id => this.catalogService.getTplCompForRoot(this.selectedEnvironment.sourceName, type, id)))),
+          map(nested => [].concat(...nested))
+        ).subscribe(
+            templateComponentWithDuplicateVersions => {
+              const groupedByName = templateComponentWithDuplicateVersions.reduce((group: any[], templateComponent: any) => {
+                group[templateComponent.name] = group[templateComponent.name] || [];
+                group[templateComponent.name].push(templateComponent);
+                return group;
+              }, {});
+              let templateComponents = [];
+              for (const name of Object.keys(groupedByName)) {
+                templateComponents.push(groupedByName[name].reduce((g: any, templateComponent: any) =>
+                  g.id <= templateComponent.id ? templateComponent : g,
+                  { id: -1 }
+                ));
+              }
+              this.loadedCatalogComps[type] = templateComponents;
+            },
+            error => this.notificationService.notifyError(
+              this.translateService.instant('administration.extsystem.err-cannot-load-comp-types'), error)
+            );
+
+        return true;
+      }
+    }
+    return false;
+  }
+
+  async loadAttributeComps(type: string, comp: string) {
+    if (type !== undefined && type != null && type.length > 0 && comp !== undefined && comp != null && comp.length > 0
+      && this.loadedAttributeComps[type + comp] === undefined) {
+      let compId = '';
+      let rootId = '0';
+      if (this.loadedCatalogComps && this.loadedCatalogComps[type]) {
+        for (let catalogComp of this.loadedCatalogComps[type]) {
+          if (catalogComp.name === comp) {
+            compId = catalogComp.id;
+            break;
+          }
+        }
+      }
+      if (this.loadedTemplateRoots && this.loadedTemplateRoots[type]) {
+        for (let templateRoot of this.loadedTemplateRoots[type]) {
+          if (templateRoot.relations !== undefined) {
+            for (let relation of templateRoot.relations) {
+              if (relation.entityType === 'TemplateComponent'
+                && relation.ids !== undefined) {
+                for (let id of relation.ids) {
+                  if (id === compId) {
+                    rootId = templateRoot.id;
+                    break;
+                  }
+                }
+                if (rootId !== '0') {
+                  break;
+                }
+              }
+            }
+            if (rootId !== '0') {
+              break;
+            }
+          }
+        }
+      }
+      if (rootId !== '0' && compId !== '') {
+        this.loadedAttributeComps[type + comp] = [];
+        try {
+          const response = await this.catalogService.
+            getTplAttrsForComp(this.selectedEnvironment.sourceName, type, rootId, compId).toPromise();
+          for (let t of response) {
+            this.loadedAttributeComps[type + comp].push(t);
+          }
+        } catch (error) {
+          this.notificationService.notifyError(
+            this.translateService.instant('administration.extsystem.err-cannot-load-comp-types'), error);
+        }
+        return true;
+      }
+    } else {
+      return false;
+    }
+  }
+
+  getCatalogComponentStr(rowData: Node) {
+    let type: string = <string> this.getAttributeValueFromNode(rowData, 'CompType');
+    let data: string[] = new Array();
+    // sensor does not have catalog elements
+    if (type !== undefined && type !== 'Sensor') {
+      let components = this.getCatalogComponents(type);
+      if (components) {
+        for (let component of components) {
+          data.push(component.name);
+        }
+      }
+    }
+    return data;
+  }
+
+  getAttributeComponentStr(rowData: Node) {
+    let type: string = <string> this.getAttributeValueFromNode(rowData, 'CompType');
+    let comp: string = <string> this.getAttributeValueFromNode(rowData, 'CompName');
+    let data: string[] = new Array();
+    if (type !== undefined && comp !== undefined) {
+      let components = this.getAttributeComponents(type, comp);
+      if (components) {
+        for (let component of components) {
+          data.push(component.name);
+        }
+      }
+    }
+    return data;
+  }
+
+  getCatalogComponents(type: string) {
+    let data: Node[] = this.loadedCatalogComps[type];
+    if (data === undefined || data == null || data.length === 0) {
+      if (this.loadCatalogComps(type)) {
+        data = this.loadedCatalogComps[type];
+      }
+    }
+    return data;
+  }
+
+  getAttributeComponents(type: string, comp: string) {
+    let data: Node[] = this.loadedAttributeComps[type + comp];
+    if (data === undefined || data == null || data.length === 0) {
+      if (this.loadAttributeComps(type, comp)) {
+        data = this.loadedAttributeComps[type + comp];
+      }
+    }
+    return data;
+  }
+
+  /**
+   *
+   */
+  availableCatalogComps(rowData: Node) {
+    let result = this.availableSlctCtlgComps[rowData.id];
+    if (result === undefined) {
+      result = [];
+      result.push({ label: this.translateService.instant('administration.extsystem.dropdown-please-select'), value: '' });
+      let items = this.getCatalogComponentStr(rowData);
+      for (let item of items) {
+        if (item !== undefined) {
+          result.push({ label: item, value: item});
+        }
+      }
+      if (result.length > 1) {
+        this.availableSlctCtlgComps[rowData.id] = result;
+      }
+    }
+    return result;
+  }
+
+  availableAttributeComps(rowData: Node) {
+    let result = this.availableSlctAttrComps[rowData.id];
+    if (result === undefined) {
+      result = [];
+      result.push({ label: this.translateService.instant('administration.extsystem.dropdown-please-select'), value: '' });
+      let items = this.getAttributeComponentStr(rowData);
+      for (let item of items) {
+        if (item !== undefined) {
+          result.push({ label: item, value: item});
+        }
+      }
+      if (result.length > 1) {
+        this.availableSlctAttrComps[rowData.id] = result;
+      }
+    }
+    return result;
+  }
+
+  handleCompTypeSelect(event, rowData: Node) {
+    this.availableSlctCtlgComps[rowData.id] = undefined;
+    this.availableSlctAttrComps[rowData.id] = undefined;
+    this.getAttributeFromNode(rowData, 'CompName').value = 'Komponente';
+    this.getAttributeFromNode(rowData, 'AttrName').value = 'Attribut';
+    this.getCatalogComponentStr(rowData);
+    this.saveExtSystemMDMAttr(rowData);
+  }
+
+  handleCompSelect(event, rowData: Node) {
+    this.availableSlctAttrComps[rowData.id] = undefined;
+    this.getAttributeFromNode(rowData, 'AttrName').value = 'Attribut';
+    this.getAttributeComponentStr(rowData);
+    this.saveExtSystemMDMAttr(rowData);
+  }
+
+  handleAttrCompSelect(event, rowData: Node) {
+    this.saveExtSystemMDMAttr(rowData);
+  }
+
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem-viewer.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem-viewer.component.html
new file mode 100644
index 0000000..543a87e
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem-viewer.component.html
@@ -0,0 +1,127 @@
+<!-- ********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ******************************************************************************** -->
+
+  <div class="mdm-extsystem-viewer-container">
+
+    <p-table class="ext-system-table" [value]="getExternalSystems()" *ngIf="selectedEnvironment && extSystems" styleClass="table-hover"
+             (onRowSelect)="onExtSystemRowSelect($event)" (onRowUnselect)="onExtSystemRowUnselect($event)"
+             selectionMode="single" [(selection)]="selectedExtSystem">
+      <ng-template pTemplate="header">
+        <tr>
+          <th>{{ 'administration.extsystem.name' | translate }}</th>
+          <th>{{ 'administration.extsystem.description' | translate }}</th>
+          <th class="button-col"></th>
+          <th class="button-col"></th>
+        </tr>
+      </ng-template>
+      <ng-template pTemplate="body" let-rowData let-rowIndex="rowIndex">
+        <tr [pSelectableRow]="rowData" [pSelectableRowIndex]="rowIndex" [pContextMenuRow]="rowData">
+          <td>
+            <span>{{rowData.name}}</span>
+          </td>
+          <td>
+            <span>{{getAttributeValueFromNode(rowData,'Description')}}</span>
+          </td>
+          <td>
+            <button type="button" class="btn btn-default pull-right" (click)="editExtSystem(rowData)" title="{{'administration.extsystem.btn-edit' | translate }}">
+              <span class="fa fa-pencil-square-o"></span>
+            </button>
+          </td>
+          <td>
+            <button type="button" class="btn btn-default pull-right" (click)="removeExtSystem(rowData)" title="{{'administration.extsystem.btn-del' | translate }}">
+              <span class="fa fa-times"></span>
+            </button>
+          </td>
+        </tr>
+      </ng-template>
+    </p-table>
+
+    <p-dialog header="{{ 'administration.extsystem.dialog-ext-system-delete-title' | translate }}" [(visible)]="dialogExtSystemDelete">
+      <div class="text">
+        <span>{{ 'administration.extsystem.dialog-ext-system-delete-text' | translate }}</span>
+      </div>
+      <div class="dialogcommands">
+        <button type="button" class="btn btn-default pull-right" (click)="confirmRemoveExtSystem()">
+          <span class="fa fa-plus"></span> {{'administration.extsystem.btn-del' | translate }}
+        </button>
+        <button type="button" class="btn btn-default pull-right" (click)="cancelRemoveExtSystem()">
+          <span class="fa fa-times"></span> {{'administration.extsystem.btn-cancel' | translate }}
+        </button>
+      </div>
+    </p-dialog>
+
+  <p-dialog header="{{ 'administration.extsystem.dialog-ext-system-title' | translate}}" [(visible)]="dialogExtSystemCreate">
+    <table *ngIf="tmpExtSystemCreate">
+      <tr>
+        <td>{{ 'administration.extsystem.name' | translate}}</td>
+        <td><input required type="text" [(ngModel)]="tmpExtSystemCreate.name" /></td>
+      </tr>
+     </table>
+    <div class="dialogcommands">
+      <button type="button" class="btn btn-default pull-right" (click)="saveDialogExtSystem()">
+        <span class="fa fa-plus"></span> {{'administration.extsystem.btn-save' | translate }}
+      </button>
+      <button type="button" class="btn btn-default pull-right" (click)="cancelDialogExtSystem()">
+        <span class="fa fa-times"></span> {{'administration.extsystem.btn-cancel' | translate }}
+      </button>
+    </div>
+  </p-dialog>
+
+    <div *ngIf="selectedEnvironment" class="commands">
+      <button type="button" class="btn btn-default pull-right" (click)="addExtSystem()">
+        <span class="fa fa-plus"></span> {{'administration.extsystem.btn-add' | translate }}
+      </button>
+    </div>
+
+    <div class="custom-split-pane" *ngIf="selectedExtSystem">
+      <div class="custom-split-pane-content custom-split-pane-left">
+        <div>{{ 'administration.extsystem.ext-system-attributes' | translate }}</div>
+        <p-table [value]="getExternalSystemAttributes()" selectionMode="single" [(selection)]="selectedExtSystemAttr">
+          <ng-template pTemplate="header">
+            <tr>
+              <th>{{ 'administration.extsystem.name' | translate }}</th>
+              <th>{{ 'administration.extsystem.description' | translate }}</th>
+            </tr>
+          </ng-template>
+          <ng-template pTemplate="body" let-rowData let-rowIndex="rowIndex">
+            <tr [pSelectableRow]="rowData" [pSelectableRowIndex]="rowIndex" [pContextMenuRow]="rowData">
+              <td>{{rowData.name}}</td>
+              <td>{{getAttributeValueFromNode(rowData,'Description')}}</td>
+            </tr>
+          </ng-template>
+        </p-table>
+        <div *ngIf="loadingExtSystemAttr">{{ 'administration.extsystem.loading-attributes' | translate }}</div>
+      </div>
+      <div class="custom-split-pane-content custom-split-pane-right">
+        <div>{{ 'administration.extsystem.mdm-attributes' | translate }}</div>
+        <p-table *ngIf="selectedExtSystemAttr" [value]="getMDMAttributes()">
+          <ng-template pTemplate="header">
+            <tr>
+              <th>{{ 'administration.extsystem.component-type' | translate }}</th>
+              <th>{{ 'administration.extsystem.component-name' | translate }}</th>
+              <th>{{ 'administration.extsystem.attribute-name' | translate }}</th>
+            </tr>
+          </ng-template>
+          <ng-template pTemplate="body" let-rowData let-rowIndex="rowIndex">
+            <tr>
+              <td>{{getAttributeValueFromNode(rowData,'CompType')}}</td>
+              <td>{{getAttributeValueFromNode(rowData,'CompName')}}</td>
+              <td>{{getAttributeValueFromNode(rowData,'AttrName')}}</td>
+            </tr>
+          </ng-template>
+        </p-table>
+      </div>
+    </div>
+
+  </div>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem-viewer.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem-viewer.component.ts
new file mode 100644
index 0000000..6e3a0db
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem-viewer.component.ts
@@ -0,0 +1,260 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Component, OnInit, ViewChild, Input, OnDestroy, Output, EventEmitter } from '@angular/core';
+import { FormGroup, FormControl, FormBuilder, FormArray, Validators } from '@angular/forms';
+import { ActivatedRoute } from '@angular/router';
+import { TranslateService } from '@ngx-translate/core';
+import { DropdownModule } from 'primeng/dropdown';
+import { TreeTableModule } from 'primeng/treetable';
+import { TreeNode, MenuItem } from 'primeng/api';
+import { ContextMenuModule } from 'primeng/contextmenu';
+import { TreeTable, TreeTableToggler, DataTable } from 'primeng/primeng';
+import { DialogModule } from 'primeng/dialog';
+import { Observable, BehaviorSubject } from 'rxjs';
+
+import { MDMNotificationService } from '../core/mdm-notification.service';
+import { ExtSystemService } from './extsystem.service';
+import { Node, Attribute } from '../navigator/node';
+import { plainToClass } from 'class-transformer';
+
+@Component( {
+    selector: 'mdm-extsystem-viewer',
+  templateUrl: './extsystem-viewer.component.html',
+  styleUrls: ['./extsystem.component.css']
+})
+export class ExtSystemViewerComponent implements OnInit, OnDestroy {
+
+  // passed down from parent
+  @Input() extSystems: Node[];
+  @Input() selectedEnvironment: Node;
+
+  @Output() editMode = new EventEmitter<boolean>();
+  @Output() selectedES = new EventEmitter<string>();
+
+  // dialog and loading states
+  dialogExtSystemCreate = false;
+  dialogExtSystemDelete = false;
+  loadingExtSystemAttr = false;
+
+  // temporary data for dialogs
+  tmpExtSystemCreate: Node;
+  tmpExtSystemDelete: Node;
+
+  // external system attributes
+  extSystemAttrs: Node[];
+  bsExtSystemAttrs: BehaviorSubject<Node[]> = new BehaviorSubject<Node[]>(undefined);
+
+  // table selection
+  selectedExtSystem: Node;
+  selectedExtSystemAttr: Node;
+
+  constructor(private extSystemService: ExtSystemService,
+              private notificationService: MDMNotificationService,
+              private translateService: TranslateService) {
+
+    this.bsExtSystemAttrs.subscribe(value => {
+      this.extSystemAttrs = value;
+    });
+  }
+
+  ngOnInit() {
+    this.bsExtSystemAttrs.next(undefined);
+  }
+
+
+  ngOnDestroy() {
+  }
+
+  getExternalSystems() {
+    let data = new Array();
+    for (let i in this.extSystems) {
+      if (this.extSystems[i].type === 'ExtSystem') {
+        data.push(this.extSystems[i]);
+      }
+    }
+    return data;
+  }
+
+  getExternalSystemAttributes() {
+    if (!this.extSystemAttrs) {
+      return new Array();
+    }
+    return this.extSystemAttrs.filter(attr => attr.type === 'ExtSystemAttribute');
+  }
+
+  getMDMAttributes() {
+    let ids = new Array();
+    // need double forEach as the map function transfers the array into another array
+    this.selectedExtSystemAttr.relations.filter(rel => rel.entityType === 'MDMAttribute').map(rel => rel.ids)
+      .forEach(i => i.forEach(id => ids.push(id)));
+    return this.extSystemAttrs.filter(attr => attr.type === 'MDMAttribute' && ids.find(i => i === attr.id));
+  }
+
+  getAttributeValueFromNode(node: Node, attribute: string) {
+    for (let attr of node.attributes) {
+      if (attr.name === attribute) {
+        return attr.value;
+      }
+    }
+    return '';
+  }
+
+  getAttributeFromNode(node: Node, attribute: string) {
+    if (node.attributes !== undefined) {
+      for (let attr of node.attributes) {
+        if (attr.name === attribute) {
+          return attr;
+        }
+      }
+    }
+    return undefined;
+  }
+
+  onExtSystemRowSelect(event: any) {
+    this.selectedExtSystemAttr = undefined;
+    this.bsExtSystemAttrs.next(undefined);
+    this.loadingExtSystemAttr = true;
+    this.selectedExtSystem = event.data;
+    this.extSystemService.getExtSystemAttributesForScope(this.selectedEnvironment.sourceName, this.selectedExtSystem.id)
+      .subscribe(attrs => {
+        this.bsExtSystemAttrs.next(attrs);
+        this.loadingExtSystemAttr = false;
+      });
+  }
+
+  onExtSystemRowUnselect(event: any) {
+    this.selectedExtSystem = undefined;
+    this.bsExtSystemAttrs.next(undefined);
+  }
+
+
+  createAttribute(name: string, value?: string) {
+    let attr = new Attribute();
+    attr.dataType = 'STRING';
+    attr.unit = '';
+    attr.value = value !== undefined ? value : '';
+    attr.name = name;
+    return attr;
+  }
+
+  getIndicesForIds(ids: string[]) {
+    let indices = new Array();
+    for (let id of ids) {
+      for (let extSystem of this.extSystems) {
+        if (extSystem.id === id) {
+          indices.push(this.extSystems.indexOf(extSystem));
+        }
+      }
+    }
+    return indices;
+  }
+
+  addExtSystem() {
+    this.tmpExtSystemCreate = new Node();
+    this.tmpExtSystemCreate.type = 'ExtSystem';
+    this.tmpExtSystemCreate.sourceType = 'ExtSystem';
+    this.tmpExtSystemCreate.sourceName = this.selectedEnvironment.sourceName;
+    this.tmpExtSystemCreate.attributes = new Array();
+    this.tmpExtSystemCreate.attributes.push(this.createAttribute('Description'));
+    this.tmpExtSystemCreate.attributes.push(this.createAttribute('Name'));
+    this.tmpExtSystemCreate.attributes.push(this.createAttribute('MimeType', 'application/x-asam.aoany.extsystem'));
+    this.dialogExtSystemCreate = true;
+  }
+
+  editExtSystem(extSystem?: Node) {
+    if (extSystem != undefined) {
+      this.tmpExtSystemCreate = extSystem;
+      // this.dialogExtSystem = true;
+      this.selectedES.next(extSystem.id);
+      this.editMode.next(true);
+    }
+  }
+
+  removeExtSystem(extSystem?: Node) {
+    this.tmpExtSystemDelete = extSystem;
+    this.dialogExtSystemDelete = true;
+  }
+
+  cancelRemoveExtSystem() {
+    this.tmpExtSystemDelete = undefined;
+    this.dialogExtSystemDelete = false;
+  }
+
+  confirmRemoveExtSystem() {
+    if (this.tmpExtSystemDelete != undefined) {
+      let idxES: number = this.extSystems.indexOf(this.tmpExtSystemDelete);
+      if (idxES !== -1) {
+        this.extSystems.splice(idxES, 1);
+        if (this.tmpExtSystemDelete.relations !== undefined && this.tmpExtSystemDelete.relations.length > 0) {
+          // remove all children
+          let indices = new Array<number>();
+          for (let relation of this.tmpExtSystemDelete.relations) {
+            // the ext system attributes
+            let indicesESA = this.getIndicesForIds(relation.ids);
+            for (let ind of indicesESA) {
+              for (let r of this.extSystems[ind].relations) {
+                // the mdm attributes
+                indices = indices.concat(this.getIndicesForIds(r.ids));
+              }
+            }
+            indices = indices.concat(indicesESA);
+          }
+          indices.sort((a, b) => b - a);
+          for (let i of indices) {
+            this.extSystems.splice(i, 1);
+          }
+        }
+      }
+      if (this.tmpExtSystemDelete.id !== undefined && parseInt(this.tmpExtSystemDelete.id, 10) > 0) {
+        this.extSystemService.deleteExtSystem(this.selectedEnvironment.sourceName, this.tmpExtSystemDelete.id).subscribe();
+      }
+    }
+    this.selectedExtSystem = undefined;
+    this.tmpExtSystemDelete = undefined;
+    this.dialogExtSystemDelete = false;
+  }
+
+  // for new external systems only
+  saveDialogExtSystem() {
+    // update the name attribute
+    this.getAttributeFromNode(this.tmpExtSystemCreate, 'Name').value = this.tmpExtSystemCreate.name;
+    this.extSystemService.saveExtSystem(this.selectedEnvironment.sourceName, this.tmpExtSystemCreate)
+      .subscribe(
+        response => this.patchResponse(plainToClass(Node, response.json().data)),
+        error => this.notificationService.notifyError(
+          this.translateService.instant('administration.extsystem.err-cannot-save-ext-system'), error)
+      );
+    this.dialogExtSystemCreate = false;
+  }
+
+  cancelDialogExtSystem() {
+    this.dialogExtSystemCreate = false;
+    this.tmpExtSystemCreate = undefined;
+  }
+
+  patchResponse(nodes: Node[]) {
+    for (let node of nodes) {
+      if (node.name === this.tmpExtSystemCreate.name) {
+        if (this.tmpExtSystemCreate.id === undefined) {
+          this.extSystems.push(this.tmpExtSystemCreate);
+        }
+        this.tmpExtSystemCreate.id = node.id;
+      }
+    }
+    this.tmpExtSystemCreate = undefined;
+  }
+
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem.component.css b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem.component.css
new file mode 100644
index 0000000..3c5823d
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem.component.css
@@ -0,0 +1,60 @@
+@charset "ISO-8859-1";
+
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+.mdm-extsystem-viewer-container,
+.mdm-extsystem-editor-container{display:block;margin-bottom:8px;}
+
+.mdm-extsystem-editor-container .commands,
+.mdm-extsystem-viewer-container .commands,
+.extsystem-comp .commands,
+.extsystem-comp .commands {
+  min-height: 30px;
+  display: block;
+  margin-bottom: 10px;
+  margin-top:6px;
+  width: 100%;
+}
+.mdm-extsystem-editor-container .commands button,
+.mdm-extsystem-viewer-container .commands button,
+.extsystem-comp .commands button,
+.extsystem-comp .commands button {
+  margin-left: 10px;
+}
+
+.custom-split-pane {
+  display: block;
+  margin-top: 20px;
+}
+.custom-split-pane-content{display: inline-block;}
+.custom-split-pane-left{width:38%;vertical-align:top;}
+.custom-split-pane-right {
+  margin-left: 1%;
+  width: 58%;
+  vertical-align: top;
+}
+
+.ext-system-table {
+    margin-top: 10px;
+}
+.ext-system-table .button-col{
+  width:60px;
+}
+
+.ext-system-table input{width:100%;}
+.ext-system-attr-table input{width:100%;}
+.ext-system-mdmattr-table .drpdwn{width:100%!important;}
+
+.actioncol{width: 65px;}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem.component.html
new file mode 100644
index 0000000..a03a9ba
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem.component.html
@@ -0,0 +1,35 @@
+<!-- ********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ******************************************************************************** -->
+
+<div class="extsystem-comp">
+  <div *ngIf="!environments">{{ 'administration.extsystem.loading' | translate }}</div>
+
+  <div class="system-selector">
+    <div *ngIf="!selectedEnvironment" style="display:inline;">{{ 'administration.extsystem.select-system' | translate }}:</div>
+    <div *ngIf="selectedEnvironment" style="display:inline;">{{ 'administration.extsystem.selected-system' | translate }}:</div>
+    <p-dropdown [options]="environments" [(ngModel)]="selectedEnvironment" optionLabel="sourceName" (onChange)="onChangeExtSystem($event)" placeholder="{{ 'administration.extsystem.dropdown-please-select' | translate }}"></p-dropdown>
+  </div>
+
+  <div *ngIf="selectedEnvironment && extSystems">
+
+    <div class="commands">
+      <button *ngIf="editorMode" type="button" class="btn btn-default pull-right" (click)="onPageBack()">
+        <span class="fa fa-reply"></span> {{'administration.extsystem.btn-back' | translate }}
+      </button>
+    </div>
+
+    <mdm-extsystem-editor *ngIf="editorMode" [selectedEnvironment]="selectedEnvironment" [extSystems]="extSystems" (editMode)="onEditModeChange($event)" [selectedES]="selectedExtSystem"></mdm-extsystem-editor>
+    <mdm-extsystem-viewer *ngIf="!editorMode" [selectedEnvironment]="selectedEnvironment" [extSystems]="extSystems" (editMode)="onEditModeChange($event)" (selectedES)="onChangeSelectedExtSystem($event)"></mdm-extsystem-viewer>
+  </div>
+</div>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem.component.ts
new file mode 100644
index 0000000..189356f
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem.component.ts
@@ -0,0 +1,101 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Component, OnInit, ViewChild, Input, OnDestroy } from '@angular/core';
+import { FormGroup, FormControl, FormBuilder, FormArray, Validators } from '@angular/forms';
+import { TranslateService } from '@ngx-translate/core';
+import { DropdownModule } from 'primeng/dropdown';
+import { TreeTableModule } from 'primeng/treetable';
+import { TreeNode, MenuItem } from 'primeng/api';
+import { ContextMenuModule } from 'primeng/contextmenu';
+import { TreeTable, TreeTableToggler, DataTable } from 'primeng/primeng';
+import { DialogModule } from 'primeng/dialog';
+import { Observable, BehaviorSubject } from 'rxjs';
+
+import { MDMNotificationService } from '../core/mdm-notification.service';
+import { ExtSystemService } from './extsystem.service';
+import { Node } from '../navigator/node';
+import { NodeService } from '../navigator/node.service';
+
+@Component( {
+    selector: 'mdm-extsystem',
+    templateUrl: './extsystem.component.html',
+    styleUrls: ['./extsystem.component.css']
+})
+export class ExtSystemComponent implements OnInit, OnDestroy {
+
+  // available external systems
+  extSystems: Node[];
+  bsExtSystems: BehaviorSubject<Node[]> = new BehaviorSubject<Node[]>(undefined);
+  selectedEnvironment: Node;
+
+  editorMode = false;
+  selectedExtSystem: string = undefined;
+
+  // dropdown selection
+  environments: Node[];
+
+  //  unknown -> remove
+  scope: string;
+
+  constructor(private extSystemService: ExtSystemService,
+               private notificationService: MDMNotificationService,
+    private translateService: TranslateService,
+    private nodeService: NodeService) {
+
+    this.bsExtSystems.subscribe(value => {
+      this.extSystems = value;
+    });
+  }
+
+  ngOnInit() {
+    this.nodeService.getRootNodes().subscribe(
+      envs => this.environments = envs,
+      error => this.translateService.instant('basket.mdm-basket.err-cannot-load-sources')
+        .subscribe(msg => this.notificationService.notifyError(msg, error)
+    ));
+
+    this.bsExtSystems.next(undefined);
+  }
+
+  ngOnDestroy() {
+  }
+
+  onEditModeChange(editMode: boolean) {
+    this.editorMode = editMode;
+  }
+
+  onChangeSelectedExtSystem(extSystem: string) {
+    this.selectedExtSystem = extSystem;
+  }
+
+  onChangeExtSystem(event: any) {
+    this.extSystems = undefined;
+    if (this.selectedEnvironment !== undefined) {
+      this.scope = this.selectedEnvironment.sourceName;
+    }
+    this.extSystemService.getExtSystemForScope(this.scope).subscribe(es => this.bsExtSystems.next(es));
+  }
+
+
+  onPageSwitchToEdit() {
+    this.onEditModeChange(true);
+  }
+
+  onPageBack() {
+    this.onEditModeChange(false);
+  }
+
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem.service.ts
new file mode 100644
index 0000000..91eccd1
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/extsystem.service.ts
@@ -0,0 +1,170 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Injectable } from '@angular/core';
+import { Http, Response, Headers, RequestOptions } from '@angular/http';
+
+import { PropertyService } from '../core/property.service';
+
+import { plainToClass } from 'class-transformer';
+import { HttpErrorHandler } from '../core/http-error-handler';
+import { throwError as observableThrowError,  Observable } from 'rxjs';
+import { map, catchError } from 'rxjs/operators';
+import { Node } from '../navigator/node';
+
+@Injectable()
+export class ExtSystemService {
+
+  private prefEndpoint: string;
+
+  constructor(private http: Http,
+              private httpErrorHandler: HttpErrorHandler,
+              private _prop: PropertyService) {
+    this.prefEndpoint = _prop.getUrl('mdm/administration/');
+  }
+
+  getExtSystemForScope(scope: string, key?: string): Observable<Node[]> {
+      if (key == null) {
+          key = '';
+      }
+
+    return this.http.get(this.prefEndpoint + scope + '/externalsystems').pipe(
+      map(response => plainToClass(Node, response.json().data)),
+          catchError(this.handleError));
+  }
+
+  getExtSystemAttributesForScope(scope: string, id: string, key?: string): Observable<Node[]> {
+      if (key == null) {
+          key = '';
+      }
+
+    return this.http.get(this.prefEndpoint + scope + '/externalsystems/attributes/' + id).pipe(
+      map(response => plainToClass(Node, response.json().data)),
+          catchError(this.handleError));
+  }
+
+  getExtSystem(key?: string) {
+      if (key == null) {
+          key = '';
+      }
+      return this.http.get(this.prefEndpoint + '?key=' + key).pipe(
+        map(response => plainToClass(Node, response.json().data)),
+          catchError(this.handleError));
+  }
+
+  getAttributeValueFromNode(node: Node, attribute: string) {
+    if (node.attributes !== undefined) {
+      for (let i in node.attributes) {
+        if (node.attributes[i].name === attribute) {
+          return node.attributes[i].value;
+        }
+      }
+    }
+    return '';
+  }
+
+  saveExtSystemAttr(scope: string, extSystemAttr: Node, extSystem: Node) {
+    let headers = new Headers({ 'Content-Type': 'application/json' });
+    let options = new RequestOptions({ headers: headers });
+
+    let structure = {};
+    structure['Name'] = extSystemAttr.name;
+
+    if (parseInt(extSystemAttr.id, 10) > 0) {
+      structure['Description'] = this.getAttributeValueFromNode(extSystemAttr, 'Description');
+      // update
+      return this.http.put(this.prefEndpoint + scope + '/externalsystems/attribute/' + extSystemAttr.id,
+        JSON.stringify(structure), options).pipe(
+          catchError(this.handleError)
+        );
+    } else {
+      structure['ExtSystemAttribute'] = extSystemAttr;
+      // only provide the ID as the backend will evaluate the whole json string
+      structure['ExtSystem'] = extSystem.id;
+      // create
+      return this.http.post(this.prefEndpoint + scope + '/externalsystems/attribute', JSON.stringify(structure), options).pipe(
+        catchError(this.handleError));
+    }
+  }
+
+  saveExtSystemMDMAttr(scope: string, extSystemMDMAttr: Node, extSystemAttr: Node) {
+    let headers = new Headers({ 'Content-Type': 'application/json' });
+    let options = new RequestOptions({ headers: headers });
+
+    let structure = {};
+    structure['Name'] = extSystemMDMAttr.name;
+
+    if (parseInt(extSystemMDMAttr.id, 10) > 0) {
+      structure['CompType'] = this.getAttributeValueFromNode(extSystemMDMAttr, 'CompType');
+      structure['CompName'] = this.getAttributeValueFromNode(extSystemMDMAttr, 'CompName');
+      structure['AttrName'] = this.getAttributeValueFromNode(extSystemMDMAttr, 'AttrName');
+      // update
+      return this.http.put(this.prefEndpoint + scope + '/externalsystems/mdmattribute/' + extSystemMDMAttr.id,
+        JSON.stringify(structure), options).pipe(
+          catchError(this.handleError)
+        );
+    } else {
+      structure['MDMAttribute'] = extSystemMDMAttr;
+      structure['ExtSystemAttribute'] = extSystemAttr.id;
+      // create
+      return this.http.post(this.prefEndpoint + scope + '/externalsystems/mdmattribute', JSON.stringify(structure), options).pipe(
+        catchError(this.handleError));
+    }
+  }
+
+  saveExtSystem(scope: string, extSystem: Node) {
+    let headers = new Headers({ 'Content-Type': 'application/json' });
+    let options = new RequestOptions({ headers: headers });
+
+    let structure = {};
+    structure['Name'] = extSystem.name;
+
+    if (parseInt(extSystem.id, 10) > 0) {
+      // update
+      structure['Description'] = this.getAttributeValueFromNode(extSystem, 'Description');
+      return this.http.put(this.prefEndpoint + scope + '/externalsystems/' + extSystem.id, JSON.stringify(structure), options).pipe(
+        catchError(this.handleError));
+    } else {
+      structure['ExtSystem'] = extSystem;
+      // create
+      return this.http.post(this.prefEndpoint + scope + '/externalsystems', JSON.stringify(structure), options).pipe(
+        catchError(this.handleError));
+    }
+  }
+
+  deleteExtSystem(scope: string, id: string) {
+    return this.http.delete(this.prefEndpoint + scope + '/externalsystems/' + id).pipe(
+      catchError(this.handleError));
+  }
+  deleteExtSystemAttr(scope: string, id: string) {
+    return this.http.delete(this.prefEndpoint + scope + '/externalsystems/attribute/' + id).pipe(
+      catchError(this.handleError));
+  }
+  deleteExtSystemMDMAttr(scope: string, id: string) {
+    return this.http.delete(this.prefEndpoint + scope + '/externalsystems/mdmattribute/' + id).pipe(
+      catchError(this.handleError));
+  }
+
+  private handleError(e: Error | any) {
+    if (e instanceof Response) {
+      let response = <Response> e;
+      if (response.status !== 200) {
+        return observableThrowError('Could not request extSystems! '
+          + 'Please check if application server is running and extSystem database is configured correctly.');
+      }
+    }
+    return this.httpErrorHandler.handleError(e);
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference-module.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference-module.component.html
new file mode 100644
index 0000000..e818119
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference-module.component.html
@@ -0,0 +1,30 @@
+<!--/********************************************************************************
+* Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+*
+* See the NOTICE file(s) distributed with this work for additional
+* information regarding copyright ownership.
+*
+* This program and the accompanying materials are made available under the
+* terms of the Eclipse Public License v. 2.0 which is available at
+* http://www.eclipse.org/legal/epl-2.0.
+*
+* SPDX-License-Identifier: EPL-2.0
+*
+********************************************************************************/-->
+
+<nav class="navbar navbar-default navbar-expand  bg-light">
+  <div class="container-fluid">
+    <div class="collapse navbar-collapse" id="bs-admin-navbar">
+      <a class="navbar-brand" style="font-weight: 500;">{{'administration.admin-modules.scope' | translate }}</a>
+      <ul class="nav navbar-nav mdm-link-list">
+        <li *ngFor="let m of links" [routerLinkActive]="['active']" class="nav-item">
+          <a (click)="onScopeChange(m.path)" routerLink="{{m.path}}" class="nav-link" style="cursor:pointer;">
+            {{m.name | translate}}
+          </a>
+        </li>
+      </ul>
+    </div>
+
+  </div>
+</nav>
+<mdm-preference [scope]="scope" [preferences]="preferences"></mdm-preference>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference-module.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference-module.component.ts
new file mode 100644
index 0000000..ab14b0a
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference-module.component.ts
@@ -0,0 +1,52 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Component, OnInit} from '@angular/core';
+import {Router} from '@angular/router';
+
+import { TRANSLATE } from '../core/mdm-core.module';
+import { PreferenceService, Preference } from '../core/preference.service';
+
+@Component({
+  selector: 'preference-module',
+  templateUrl: 'preference-module.component.html',
+  providers: []
+})
+export class PreferenceModuleComponent implements OnInit {
+
+  preferences: Preference[];
+  scope: string;
+  sub: any;
+
+  links = [
+    { name: TRANSLATE('administration.admin-modules.system'), path: 'system'},
+    { name: TRANSLATE('administration.admin-modules.source'), path: 'source'},
+    { name: TRANSLATE('administration.admin-modules.user'), path: 'user'}
+  ];
+  constructor(private router: Router,
+    private preferenceService: PreferenceService) { }
+
+  ngOnInit() {
+    this.onScopeChange('system');
+  }
+
+  onScopeChange(path: string) {
+    this.scope = path.toUpperCase();
+    if (this.scope !== undefined) {
+      this.preferenceService.getPreferenceForScope(this.scope)
+        .subscribe(pref => this.preferences = pref);
+    }
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference-routing.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference-routing.module.ts
new file mode 100644
index 0000000..b36bfc4
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference-routing.module.ts
@@ -0,0 +1,41 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+
+import { PreferenceComponent } from './preference.component';
+import { PreferenceModuleComponent } from './preference-module.component';
+
+const moduleRoutes: Routes = [
+  {
+    path: '', component: PreferenceModuleComponent,
+    children: [
+      { path: ':scope', component: PreferenceComponent },
+      { path: '', redirectTo: 'system', pathMatch: 'full' }
+    ]
+  }
+];
+
+@NgModule({
+  imports: [
+    RouterModule.forChild(moduleRoutes)
+  ],
+  exports: [
+    RouterModule
+  ]
+})
+
+export class PreferenceRoutingModule { }
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference.component.css b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference.component.css
new file mode 100644
index 0000000..e1b304e
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference.component.css
@@ -0,0 +1,41 @@
+@charset "ISO-8859-1";
+
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+.form-group {
+  margin-bottom: 0;
+  padding-right: 0;
+ 	padding-left: 0;
+}
+
+.form-control {
+  border-radius: 0;
+}
+
+.btn {
+  border-radius: 0;
+}
+
+ul {
+  list-style-type: none;
+}
+
+#truncatelongtexts {
+  width: 100%;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference.component.html
new file mode 100644
index 0000000..e72c10f
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference.component.html
@@ -0,0 +1,50 @@
+<!-- ********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ******************************************************************************** -->
+
+<table class="table table-bordered" style="table-layout: fixed;">
+  <tr>
+    <th class="col-lg-5" i18n="administration_preference Key|Key table header">Key</th>
+    <th class="col-lg-7" i18n="administration_preference Value|Value">Value</th>
+    <th style="width: 60px;"></th>
+    <th style="width: 60px;"></th>
+  </tr>
+  <tr *ngFor="let preference of preferences">
+    <td>
+      <div id="truncatelongtexts">
+        {{preference.key}}
+      </div>
+    </td>
+    <td>
+      <div id="truncatelongtexts">
+        {{preference.value}}
+      </div>
+    </td>
+    <td>
+      <button type="button" class="btn btn-default" (click)="editPreference(preference)" title="{{ 'administration.preference.btn-tooltip-edit-preference' | translate }}">
+		      <span class="fa fa-pencil-square-o"></span>
+	    </button>
+    </td>
+    <td>
+      <button type="button" class="btn btn-default" (click)="removePreference(preference)" title="{{ 'administration.preference.btn-tooltip-delete-preference' | translate }}">
+		    <span class="fa fa-times"></span>
+	    </button>
+    </td>
+  </tr>
+</table>
+<div class="col-lg-12">
+  <button type="button" class="btn btn-default pull-right" (click)="editPreference()">
+  	<span class="fa fa-plus"></span> {{'administration.preference.btn-add-preference' | translate }}
+  </button>
+</div>
+<edit-preference [scope]="scope"></edit-preference>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference.component.ts
new file mode 100644
index 0000000..409b20c
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference.component.ts
@@ -0,0 +1,97 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Component, OnInit, ViewChild, Input, OnDestroy } from '@angular/core';
+import { FormGroup, FormControl, FormBuilder, FormArray, Validators } from '@angular/forms';
+import { ActivatedRoute } from '@angular/router';
+
+import { PreferenceService, Preference, Scope } from '../core/preference.service';
+import { EditPreferenceComponent } from './edit-preference.component';
+
+import { MDMNotificationService } from '../core/mdm-notification.service';
+
+import { TranslateService } from '@ngx-translate/core';
+
+@Component( {
+    selector: 'mdm-preference',
+    templateUrl: './preference.component.html',
+    styleUrls: ['./preference.component.css']
+})
+export class PreferenceComponent implements OnInit, OnDestroy {
+
+  @Input() preferences: Preference[];
+  @Input() scope: string;
+  subscription: any;
+  sub: any;
+
+  @ViewChild( EditPreferenceComponent )
+  editPreferenceComponent: EditPreferenceComponent;
+
+  constructor( private formBuilder: FormBuilder,
+               private preferenceService: PreferenceService,
+               private route: ActivatedRoute,
+               private notificationService: MDMNotificationService,
+               private translateService: TranslateService) { }
+
+  ngOnInit() {
+  }
+
+  ngOnDestroy() {
+  }
+
+  editPreference( preference?: Preference ) {
+      this.subscription = this.editPreferenceComponent.childModal.onHide.subscribe(() => this.handleDialogResult() );
+      this.editPreferenceComponent.showDialog( preference );
+  }
+
+  removePreference( preference: Preference ) {
+      if (preference.id) {
+        this.preferenceService.deletePreference( preference.id )
+        .subscribe();
+      }
+      let index = this.preferences.findIndex( p => p === preference );
+      this.preferences.splice( index, 1 );
+  }
+
+  handleDialogResult() {
+      if ( !this.editPreferenceComponent.needSave ) {
+          return;
+      }
+
+      let preference = this.editPreferenceComponent.preferenceForm.value;
+      let index = this.preferences.findIndex( p => this.preferenceEqualsWithoutId( p, preference ) );
+
+      this.preferenceService.savePreference( preference )
+          .subscribe(
+            () => index !== -1 ? this.preferences[index] = preference : this.reloadPreference( preference ),
+            error => this.notificationService.notifyError(
+              this.translateService.instant('administration.preference.err-cannot-save-preference'), error)
+          );
+      this.subscription.unsubscribe();
+  }
+
+  reloadPreference( preference: Preference ) {
+      this.preferenceService.getPreferenceForScope( preference.scope, preference.key )
+          .subscribe(
+            p => this.preferences.push(p[0]),
+            error => this.notificationService.notifyError(
+              this.translateService.instant('administration.preference.err-cannot-update-preference'), error)
+          );
+  }
+
+  preferenceEqualsWithoutId( pref1: Preference, pref2: Preference ) {
+      return pref1.key === pref2.key && pref1.source === pref2.source && pref1.user === pref2.user;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference.module.ts
new file mode 100644
index 0000000..49becfa
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/administration/preference.module.ts
@@ -0,0 +1,45 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { NgModule } from '@angular/core';
+import { PreferenceRoutingModule } from './preference-routing.module';
+import { PreferenceModuleComponent } from './preference-module.component';
+import { PreferenceComponent } from './preference.component';
+import { EditPreferenceComponent } from './edit-preference.component';
+import { MDMCoreModule } from '../core/mdm-core.module';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
+import { PreferenceService } from '../core/preference.service';
+import { ComponentLoaderFactory } from 'ngx-bootstrap';
+
+
+@NgModule({
+  imports: [
+    MDMCoreModule,
+    FormsModule,
+    ReactiveFormsModule,
+    PreferenceRoutingModule
+  ],
+  declarations: [
+    EditPreferenceComponent,
+    PreferenceModuleComponent,
+    PreferenceComponent
+  ],
+  exports: [
+  ],
+  providers: [
+    ComponentLoaderFactory,
+    PreferenceService
+  ],
+})
+export class PreferenceModule {}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/app-routing.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/app-routing.module.ts
new file mode 100644
index 0000000..2198535
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/app-routing.module.ts
@@ -0,0 +1,36 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { NgModule, Component } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+import { AuthGuard } from './authentication/authguard';
+import { Role } from './authentication/authentication.service';
+
+const appRoutes: Routes = [
+  { path: 'navigator', loadChildren: './navigator-view/mdm-navigator-view.module#MDMNavigatorViewModule' },
+  { path: 'administration', loadChildren: './administration/admin.module#AdminModule',
+    canActivate: [AuthGuard], data: { roles: [Role.Admin] } },
+  { path: '', redirectTo: 'navigator', pathMatch: 'full' }
+];
+
+@NgModule({
+  imports: [
+    RouterModule.forRoot(appRoutes)
+  ],
+  exports: [
+    RouterModule
+  ]
+})
+export class AppRoutingModule {}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/app.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/app.component.html
new file mode 100644
index 0000000..e650581
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/app.component.html
@@ -0,0 +1,38 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+
+<nav class="navbar navbar-dark bg-dark fixed-top navbar-expand py-0">
+  <a class="navbar-brand" routerLink="/navigator" style="cursor:pointer;">openMDM5 Web</a>
+  <div class="collapse navbar-collapse" id="bs-mdm-navbar">
+      <ul class="navbar-nav mr-auto">
+        <li class="nav-item" *ngFor="let m of (links | authPipe | async)" [routerLinkActive]="['active']"><a class="nav-link" routerLink="{{m.path}}" style="cursor:pointer;"> {{m.name}}</a></li>
+      </ul>
+      <ul class="navbar-nav ml-md-auto">
+        <li class="nav-item"><span class="navbar-text" style="padding: 0 5px; vertical-align: middle;">{{ 'app.language' | translate }}</span> <p-dropdown [options]="languages" (onChange)="selectLanguage($event)" [(ngModel)]="selectedLanguage" [style]="{ 'margin-top': '2px' }"></p-dropdown></li>
+        <li class="nav-item"><a class="nav-link" [routerLink]="" (click)="showAboutDialog()" href="#">{{ 'app.about' | translate }}</a></li>
+        <li class="nav-item"><a class="nav-link" href="mdm/logout"><span class="fa fa-sign-in"></span> {{ 'app.logout' | translate }}<span *ngIf="user?.username" title="{{ 'app.roles' | translate }}: {{ rolesTooltip }}"> ({{ user?.username }})</span></a></li>
+      </ul>
+    </div>
+</nav>
+
+<div>
+  <router-outlet></router-outlet>
+</div>
+
+<p-dialog header="About" [(visible)]="displayAboutDialog" modal="true" dismissableMask="true" responsive="true">
+  <notice></notice>
+</p-dialog>
+
+<mdm-notifications></mdm-notifications>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/app.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/app.component.ts
new file mode 100644
index 0000000..abf1828
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/app.component.ts
@@ -0,0 +1,71 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Component, OnInit } from '@angular/core';
+import {DialogModule} from 'primeng/primeng';
+import { TranslateService } from '@ngx-translate/core';
+
+import {SelectItem} from 'primeng/api';
+import { User, Role } from './authentication/authentication.service';
+import { AuthenticationService } from './authentication/authentication.service';
+
+@Component({
+  selector: 'app-root',
+  templateUrl: './app.component.html'
+})
+export class AppComponent implements OnInit {
+
+  readonly TtlLogout = 'Logout';
+  readonly TtlAbout = 'About';
+  readonly TtlLanguage = 'Language';
+
+  languages = <SelectItem[]> [
+    { label: 'English', value: 'en' },
+    { label: 'Deutsch', value: 'de' },
+  ];
+
+  selectedLanguage = 'en';
+
+  links = [
+      { name: 'Administration', path: '/administration', roles: [ Role.Admin ] }
+  ];
+  displayAboutDialog = false;
+  user: User = null;
+  rolesTooltip: string;
+
+  constructor(private translate: TranslateService, private authService: AuthenticationService) {
+  }
+
+  ngOnInit() {
+    this.translate.langs = this.languages.map(i => i.value);
+    let browserLang = this.translate.getBrowserLang();
+    if (this.translate.langs.findIndex(l => l === browserLang) > -1) {
+      this.selectedLanguage = browserLang;
+    }
+    this.translate.setDefaultLang(this.selectedLanguage);
+    this.translate.use(this.selectedLanguage);
+    this.authService.getLoginUser().subscribe(value => {
+      this.user = value;
+      this.rolesTooltip = value.roles.join(', ');
+    })
+  }
+
+  selectLanguage($event: any) {
+    this.translate.use(this.selectedLanguage);
+  }
+
+  showAboutDialog() {
+    this.displayAboutDialog = true;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/app.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/app.module.ts
new file mode 100644
index 0000000..4cd625e
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/app.module.ts
@@ -0,0 +1,97 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { BrowserModule } from '@angular/platform-browser';
+import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+import { NgModule, ErrorHandler } from '@angular/core';
+import { FormsModule } from '@angular/forms';
+import { HttpModule } from '@angular/http';
+import { HttpClient } from '@angular/common/http';
+
+import { TranslateModule, TranslateLoader, TranslateService } from '@ngx-translate/core';
+import { TranslateHttpLoader } from '@ngx-translate/http-loader';
+
+import { DialogModule, DropdownModule } from 'primeng/primeng';
+
+import { MDMCoreModule} from './core/mdm-core.module';
+import { MDMErrorHandler } from './core/mdm-error-handler';
+import { HttpErrorHandler } from './core/http-error-handler';
+import { MDMNotificationService } from './core/mdm-notification.service';
+
+import { AppComponent } from './app.component';
+import { AppRoutingModule } from './app-routing.module';
+
+import { NoticeComponent } from './notice.component';
+import { NodeService } from './navigator/node.service';
+import { NodeproviderService } from './navigator/nodeprovider.service';
+import { NavigatorService } from './navigator/navigator.service';
+import { BasketService } from './basket/basket.service';
+import { LocalizationService } from './localization/localization.service';
+import { FilereleaseService } from './filerelease/filerelease.service';
+import { QueryService } from './tableview/query.service';
+import { ViewService } from './tableview/tableview.service';
+import { environment } from '../environments/environment';
+import { FilesAttachableService } from './file-explorer/services/files-attachable.service';
+import { AuthenticationModule } from './authentication/authentication.module';
+
+// AoT requires an exported function for factories
+export function HttpLoaderFactory(http: HttpClient) {
+  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
+}
+
+
+@NgModule({
+  imports: [
+    BrowserModule,
+    BrowserAnimationsModule,
+    HttpModule,
+    FormsModule,
+    MDMCoreModule,
+    AuthenticationModule,
+    DialogModule,
+    AppRoutingModule,
+    DropdownModule,
+    TranslateModule.forRoot({
+      loader: {
+          provide: TranslateLoader,
+          useFactory: HttpLoaderFactory,
+          deps: [HttpClient]
+      }
+  }),
+  ],
+  declarations: [
+    AppComponent,
+    NoticeComponent,
+  ],
+  providers: [
+    NodeService,
+    LocalizationService,
+    FilereleaseService,
+    BasketService,
+    NavigatorService,
+    QueryService,
+    NodeproviderService,
+    MDMNotificationService,
+    FilesAttachableService,
+    ViewService,
+    HttpErrorHandler,
+    TranslateService,
+    { provide: ErrorHandler, useClass: MDMErrorHandler }
+  ],
+  bootstrap: [AppComponent]
+})
+export class AppModule {
+
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/authentication/auth.pipe.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/authentication/auth.pipe.ts
new file mode 100644
index 0000000..a696573
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/authentication/auth.pipe.ts
@@ -0,0 +1,24 @@
+import { Pipe, PipeTransform } from '@angular/core';
+import { AuthenticationService } from './authentication.service';
+import { forkJoin, Observable, of } from 'rxjs';
+import { map } from 'rxjs/operators';
+
+
+@Pipe({
+    name: 'authPipe',
+    pure: true
+})
+export class AuthPipe implements PipeTransform {
+    constructor(private authService: AuthenticationService) {
+    }
+
+    transform(linksWithRoles: { roles: string }[]): Observable<{ roles: string }[]> {
+        if (!linksWithRoles) {
+            return of(linksWithRoles);
+        }
+
+        return forkJoin(linksWithRoles.map(l => this.authService.isUserInRole(l.roles))).pipe(
+            map(booleanFilter => linksWithRoles.filter((l, i) => booleanFilter[i]))
+        );
+    }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/authentication/authentication.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/authentication/authentication.module.ts
new file mode 100644
index 0000000..0e80250
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/authentication/authentication.module.ts
@@ -0,0 +1,27 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { NgModule } from '@angular/core';
+import { AuthPipe } from './auth.pipe';
+
+@NgModule({
+declarations: [
+    AuthPipe,
+],
+exports: [
+    AuthPipe,
+],
+})
+export class AuthenticationModule {
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/authentication/authentication.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/authentication/authentication.service.ts
new file mode 100644
index 0000000..2a89bb8
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/authentication/authentication.service.ts
@@ -0,0 +1,82 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Injectable } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import { Router, ResolveStart } from '@angular/router';
+import { PropertyService } from '../core/property.service';
+import { Observable } from 'rxjs';
+import { publishReplay, refCount, map, tap } from 'rxjs/operators';
+
+export class User {
+  username: string;
+  roles: string[];
+}
+
+export enum Role {
+  Admin = 'Admin',
+  User = 'DescriptiveDataAuthor',
+  Guest = 'Guest',
+}
+
+@Injectable({
+  providedIn: 'root'
+})
+export class AuthenticationService {
+  readonly loginURL: string;
+  readonly logoutURL: string;
+  readonly currentUserURL: string;
+
+  private loginUser: Observable<User>;
+
+  constructor(private http: HttpClient,
+    private _prop: PropertyService) {
+    this.currentUserURL = _prop.getUrl('mdm/user/current');
+  }
+
+  isLoggedIn() {
+    return this.getLoginUser().pipe(map(user => user !== null));
+  }
+
+  getLoginUser() {
+    if (!this.loginUser) {
+      this.loginUser = this.loadUser().pipe(
+        publishReplay(1),
+        refCount()
+      );
+    }
+
+    return this.loginUser;
+  }
+
+  isUserInRole(roles: string | string[]) {
+    if (roles === undefined) {
+      return Observable.of(true);
+    } else if (typeof roles === 'string') {
+      roles = [ roles ];
+    }
+
+    return this.getLoginUser().pipe(
+          map(user => user.roles.filter(x => roles.includes(x)).length > 0)
+      );
+  }
+
+  private loadUser() {
+    return this.http.get<User>(this.currentUserURL, {
+      params: {
+        roles: Object.values(Role).join(',')
+      }
+    });
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/authentication/authguard.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/authentication/authguard.ts
new file mode 100644
index 0000000..fc126f5
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/authentication/authguard.ts
@@ -0,0 +1,23 @@
+import { Injectable } from '@angular/core';
+import { CanActivate } from '@angular/router/src/utils/preactivation';
+import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
+
+import { AuthenticationService } from './authentication.service';
+
+@Injectable({
+    providedIn: 'root'
+})
+export class AuthGuard implements CanActivate {
+    path: ActivatedRouteSnapshot[];
+    route: ActivatedRouteSnapshot;
+
+    constructor(private authStateService: AuthenticationService) { }
+
+    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
+        if (route.data.roles) {
+            // check if current user has any role the route requires
+            return this.authStateService.isUserInRole(route.data.roles);
+        }
+        return true;
+    }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/basket/basket.service.spec.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/basket/basket.service.spec.ts
new file mode 100644
index 0000000..df38fa5
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/basket/basket.service.spec.ts
@@ -0,0 +1,108 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { async, TestBed, inject } from '@angular/core/testing';
+import { BaseRequestOptions, Http, HttpModule, Response, ResponseOptions } from '@angular/http';
+import { MockBackend } from '@angular/http/testing';
+
+import { PreferenceService, Scope } from '../core/preference.service';
+import { PropertyService } from '../core/property.service';
+import { HttpErrorHandler } from '../core/http-error-handler';
+import { BasketService } from './basket.service';
+
+describe('BasketService', () => {
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      imports: [HttpModule],
+      providers: [
+        BasketService,
+        PropertyService,
+        PreferenceService,
+        MockBackend,
+        BaseRequestOptions,
+        HttpErrorHandler,
+        {
+          provide: Http,
+          useFactory: (mockBackend, options) => {
+            return new Http(mockBackend, options);
+          },
+          deps: [MockBackend, BaseRequestOptions]
+        }
+      ]
+    });
+  });
+
+
+  describe('getFileExtension()', () => {
+    it('should return value configured in preference', async(inject([BasketService, MockBackend], (basketService, mockBackend) => {
+
+      mockBackend.connections.subscribe(conn => {
+
+        let mockResponse = {
+          preferences: [
+          {
+            id: 2,
+            key: 'shoppingbasket.fileextensions',
+            scope: Scope.SYSTEM,
+            source: null,
+            user: null,
+            value: '[ { "label": "MyTool", "extension": "mdm-mytool" }, { "label": "OtherTool", "extension": "mdm-other" } ]'
+          }
+        ]};
+        conn.mockRespond(new Response(new ResponseOptions({ body: mockResponse })));
+      });
+
+      basketService.getFileExtensions().subscribe(
+        ext => expect(ext).toEqual([
+          { 'label': 'MyTool', 'extension': 'mdm-mytool' },
+          { 'label': 'OtherTool', 'extension': 'mdm-other' } ]),
+        err => expect(err).toBeUndefined());
+    })));
+
+    it('should return empty array (default) if no preferences were found',
+        async(inject([BasketService, MockBackend], (basketService, mockBackend) => {
+
+      mockBackend.connections.subscribe(conn => {
+        conn.mockRespond(new Response(new ResponseOptions({ body: { preferences: [] } })));
+      });
+
+      basketService.getFileExtensions().subscribe(
+        ext => expect(ext).toEqual([]),
+        err => expect(err).toBeUndefined());
+    })));
+
+    it('should return empty array (default) if no preferences value is invalid',
+        async(inject([BasketService, MockBackend], (basketService, mockBackend) => {
+
+      mockBackend.connections.subscribe(conn => {
+        let mockResponse = {
+          preferences: [
+          {
+            id: 2,
+            key: 'shoppingbasket.fileextensions',
+            scope: Scope.SYSTEM,
+            source: null,
+            user: null,
+            value: 'asdf'
+          }
+        ]};
+        conn.mockRespond(new Response(new ResponseOptions({ body: mockResponse })));
+      });
+
+      basketService.getFileExtensions().subscribe(
+        ext => expect(ext).toEqual([]));
+    })));
+  });
+});
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/basket/basket.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/basket/basket.service.ts
new file mode 100644
index 0000000..783a868
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/basket/basket.service.ts
@@ -0,0 +1,145 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Injectable, Output, EventEmitter} from '@angular/core';
+import { Http, Response, Headers, RequestOptions } from '@angular/http';
+
+import {of as observableOf, Observable} from 'rxjs';
+import {defaultIfEmpty, catchError, mergeMap, map} from 'rxjs/operators';
+
+import {Type, Exclude, plainToClass, serialize, deserialize} from 'class-transformer';
+
+import {MDMItem} from '../core/mdm-item';
+import {PreferenceService, Preference, Scope} from '../core/preference.service';
+
+import { HttpErrorHandler } from '../core/http-error-handler';
+import { PropertyService } from '../core/property.service';
+
+export class Basket {
+  name: string;
+  @Type(() => MDMItem)
+  items: MDMItem[] = [];
+
+  constructor(name: string, items: MDMItem[]) {
+    this.name = name;
+    this.items = items;
+  }
+}
+
+@Injectable()
+export class BasketService {
+
+  @Output() itemsAdded$ = new EventEmitter<MDMItem[]>();
+  @Output() itemsRemoved$ = new EventEmitter<MDMItem[]>();
+  readonly preferencePrefix = 'basket.nodes.';
+  readonly preferenceFileextensions = 'shoppingbasket.fileextensions';
+
+  items: MDMItem[] = [];
+
+  constructor(private _pref: PreferenceService,
+              private http: Http,
+              private httpErrorHandler: HttpErrorHandler,
+              private _prop: PropertyService) {
+  }
+
+  public add(item: MDMItem) {
+    let existingItem = this.items.find(i => i.equals(item));
+
+    if (!existingItem) {
+      this.items.push(item);
+      this.itemsAdded$.emit([item]);
+    }
+  }
+
+  public addAll(items: MDMItem[]) {
+    let newItemsWithoutExisting = items.filter(newItem => this.items.findIndex(existingItem => existingItem.equals(newItem)) < 0);
+
+    if (newItemsWithoutExisting) {
+      newItemsWithoutExisting.forEach(item => this.items.push(item));
+      this.itemsAdded$.emit(newItemsWithoutExisting);
+    }
+  }
+
+  public remove(item: MDMItem) {
+    let itemsToRemove = this.items.filter(i => i.equals(item));
+
+    if (itemsToRemove.length >= 0) {
+      itemsToRemove.forEach(i => this.items = this.items.filter(it => !it.equals(i)));
+      this.itemsRemoved$.emit(itemsToRemove);
+    }
+  }
+
+  removeAll() {
+    this.items = [];
+  }
+
+  saveBasketWithName(name: string) {
+    return this.saveBasket(new Basket(name, this.items));
+  }
+
+  saveBasket(basket: Basket) {
+    return this._pref.savePreference(this.basketToPreference(basket)).subscribe();
+  }
+
+  getBaskets() {
+    return this._pref.getPreference(this.preferencePrefix).pipe(
+      map(preferences => preferences.map(p => this.preferenceToBasket(p))));
+  }
+
+  getItems() {
+    return this.items;
+  }
+
+  setItems(items: MDMItem[]) {
+    this.items = items;
+  }
+
+  getBasketAsXml(basket: Basket) {
+    return this.http.post(this._prop.getUrl('mdm/shoppingbasket'), basket).pipe(
+      map(r => r.text()));
+  }
+
+  getBasketAsAtfx(basket: Basket) {
+    let headers = new Headers();
+    headers.append('Content-Type', 'application/xml');
+
+    return this.getBasketAsXml(basket)
+      .flatMap(b => this.http.post(this._prop.getUrl('mdm/export'), b, { headers: headers }))
+      .map(r => r.text());
+  }
+
+  getFileExtensions() {
+    return this._pref.getPreferenceForScope(Scope.SYSTEM, this.preferenceFileextensions)
+      .flatMap(prefs => prefs)
+      .map(pref => JSON.parse(pref.value))
+      .catch(e => {
+        console.log('Unable to parse value of preference "' + this.preferenceFileextensions + '"!');
+        return Observable.of([]);
+      })
+      .defaultIfEmpty([]);
+  }
+
+  private preferenceToBasket(pref: Preference) {
+    return deserialize(Basket, pref.value);
+  }
+
+  private basketToPreference(basket: Basket) {
+    const pref = new Preference();
+    pref.value = serialize(basket);
+    pref.key = this.preferencePrefix + basket.name;
+    pref.scope = Scope.USER;
+    return pref;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/basket/mdm-basket.component.css b/org.eclipse.mdm.application/src/main/webapp/src/app/basket/mdm-basket.component.css
new file mode 100644
index 0000000..3e61b3a
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/basket/mdm-basket.component.css
@@ -0,0 +1,50 @@
+@charset "ISO-8859-1";
+
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+.remove {
+  color: black;
+  cursor: pointer;
+  float: right;
+}
+
+.fileupload {
+  overflow: hidden;
+  position: relative;
+}
+
+.fileupload input.upload {
+  float: right;
+  position: absolute;
+  top: 0;
+  right: 0;
+  margin: 0;
+  padding: 0;
+  font-size: 20px;
+  cursor: pointer;
+  opacity: 0;
+  filter: alpha(opacity=0);
+}
+
+a.disabled {
+  pointer-events: none;
+  cursor: not-allowed;
+}
+
+.badge{
+  margin: 0 0 2px 6px;
+  float: none;
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/basket/mdm-basket.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/basket/mdm-basket.component.html
new file mode 100644
index 0000000..fc93595
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/basket/mdm-basket.component.html
@@ -0,0 +1,174 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+ <style>
+    :host /deep/ .dropdown {
+     width: 200px;
+   }
+
+    :host /deep/ .dropdown-toggle {
+     overflow: hidden;
+     padding-right: 24px/* Optional for caret */
+     ;
+     text-align: left;
+     text-overflow: ellipsis;
+     width: 100%;
+   }
+   /* Optional for caret */
+
+    :host /deep/ .dropdown-toggle .caret {
+     position: absolute;
+     right: 12px;
+     top: calc(50% - 2px);
+   }
+   .ui-button-text {
+     padding: 0;
+   }
+
+   :host /deep/ .ui-splitbutton.ui-buttonset .ui-button {
+     color: black;
+     border: 1px solid #ccc;
+     font-size: 14px;
+     height: 37px;
+     background-color: transparent;
+   }
+   :host /deep/ .ui-splitbutton.ui-buttonset .ui-button:hover {
+     color: black;
+     background-color: #e6e6e6;
+     border-color: #adadad;
+   }
+ </style>
+
+<div style="padding-top: 15px;">
+  <accordion>
+    <accordion-group #basketGroup [isOpen]="false">
+      <div accordion-heading class="thinheader container-fluid">
+        <div class="row">
+          <div class="col text-left">
+            {{'basket.mdm-basket.shopping-basket' | translate }} &nbsp;&nbsp;
+            <mdm-view (click)="onViewClick($event)"></mdm-view>
+          </div>
+          <div class="col text-right">
+            <button type="button" class="btn btn-mdm" (click)="clearBasket($event)"  title="{{'basket.mdm-basket.tooltip-clear-shopping-basket' | translate }}"><span class="fa fa-eraser"></span></button>
+            <p-splitButton icon="fa fa-arrow-circle-o-down" class="dropdown" (onClick)="saveBasketWithExtension($event, 'mdm')" (onDropdownClick)="stopEvent($event)" title="{{'basket.mdm-basket.tooltip-download-shopping-basket' | translate }}" [model]="launchers" [disabled]="isDownloadDisabled()"></p-splitButton>
+            <div class="fileupload btn btn-mdm" title="{{'basket.mdm-basket.tooltip-upload-shopping-basket' | translate }}" (click)=onUploadClick($event)>
+              <span class="fa fa-arrow-circle-o-up"></span>
+              <input title="{{'basket.mdm-basket.tooltip-upload-shopping-basket' | translate }}" class="upload" name="datei" type="file" [accept]="allowedExtensions" id="fileInput" (change)="onUploadChange($event)">
+            </div>
+            <button type="button" type="submit" class="btn btn-mdm" (click)="showLoadModal($event)"  title="{{'basket.mdm-basket.tooltip-open-shopping-basket' | translate }}"><span class="fa fa-folder-open"></span></button>
+            <button type="button" type="submit" class="btn btn-mdm btn-outline-secondary" (click)="showSaveModal($event)" title="{{'basket.mdm-basket.tooltip-save-shopping-basket' | translate }}"><span class="fa fa-floppy-o"></span></button>
+            &nbsp;&nbsp;
+            <span class="fa" [ngClass]="{'fa-chevron-down': basketGroup?.isOpen, 'fa-chevron-right': !basketGroup?.isOpen}"></span>
+          </div>
+        </div>
+      </div>
+      <div class="container-fluid">
+        <div class="row">
+          <mdm-tableview [results]="basketContent"
+                         [view]="viewComponent.selectedView"
+                         isRemovable="true"
+                         [menuItems]="contextMenuItems"
+                         [selectedEnvs]="environments"
+                         [environments]="environments">
+          </mdm-tableview>
+        </div>
+      </div>
+    </accordion-group>
+  </accordion>
+</div>
+
+<p-confirmDialog header="Information" icon="pi pi-exclamation-triangle" ></p-confirmDialog>
+
+<div bsModal #lgLoadModal="bs-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="SelectSearchComponents" aria-hidden="true" (keyup.enter)="loadBasket()">
+  <div class="modal-dialog modal-md">
+    <div class="modal-content">
+      <div class="modal-header">
+        <button type="button" title="{{ 'basket.mdm-basket.tooltip-close' | translate }}" class="close" (click)="childLoadModal.hide()" aria-label="Close">
+          <span aria-hidden="true">&times;</span>
+        </button>
+        <h4 class="modal-title">{{'basket.mdm-basket.load-shopping-basket' | translate }}</h4>
+      </div>
+      <div class="modal-body">
+        <div class="container-fluid">
+          <div class="row" *ngIf="baskets.length > 0">
+            <ul class="list-group" style="max-height:80vh; padding: 0; list-style-type: none; overflow-y:auto;">
+              <div style="display: table; width: 100%; border: 1px solid #ddd;">
+                <li class="list-group-item" *ngFor="let basket of baskets" [ngClass]="{'active': selectedBasket == basket}" (click)="toggleSelect(basket)" (dblclick)="loadBasket(basket)" style="cursor: pointer">
+                  {{basket.name}}<span class="badge">{{basket.items.length}}</span>
+                </li>
+              </div>
+            </ul>
+          </div>
+          <div class="row" *ngIf="baskets.length === 0">
+            {{'basket.mdm-basket.no-saved-shopping-baskets-available' | translate }}
+          </div>
+          <div class="row" style="margin-top: 20px;">
+            <button type="button" class="btn btn-outline-secondary pull-right" (click)="loadBasket()" [disabled]="baskets.length <= 0 || selectedBasket == undefined">
+              <span class="fa fa-upload"></span> {{'basket.mdm-basket.btn-load' | translate }}
+            </button>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+
+<div bsModal #lgSaveModal="bs-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="SelectSearchComponents" aria-hidden="true">
+  <div class="modal-dialog modal-md">
+    <div class="modal-content">
+      <div class="modal-header">
+        <button type="button" title="{{'basket.mdm-basket.close' | translate }}" class="close" (click)="childSaveModal.hide()" aria-label="Close">
+          <span aria-hidden="true">&times;</span>
+        </button>
+        <h4 class="modal-title">{{'basket.mdm-basket.save-basket-as' | translate }}:</h4>
+      </div>
+      <div class="modal-body">
+        <div class="container-fluid">
+          <div class="row" *ngIf="baskets.length > 0">
+            <p-dataTable
+              [value]="baskets"
+              resizableColumns="false"
+              [reorderableColumns]="false"
+              [rows]="10"
+              [paginator]="true"
+              [pageLinks]="3"
+              [rowsPerPageOptions]="[10,20,50]"
+              [(selection)]="selectedRow"
+              (onRowClick)="onRowSelect($event)"
+              (onRowSelect)="onRowSelect($event)">
+              <p-column [style]="{'width':'30px'}" selectionMode="single"></p-column>
+              <p-column header="{{ 'basket.mdm-basket.existing-shopping-baskets' | translate }}">
+                <ng-template pTemplate="body" let-col let-row="rowData" >
+                  {{row.name}}
+                </ng-template>
+              </p-column>
+            </p-dataTable>
+          </div>
+          <div class="row" style="margin-top: 15px;">
+            <div class="col-md-10" style="padding-left: 0;">
+              <input type="text" class="form-control" placeholder="{{'basket.mdm-basket.shopping-basket-name' | translate }}" [value]="basketName" (input)="basketName = $event.target.value" (keyup.enter)="saveBasket($event)" required>
+            </div>
+            <div class="col-md-2" style="padding: 0;">
+              <button type="button" class="btn btn-outline-secondary pull-right" (click)="saveBasket($event)" [disabled]="!basketName" title="{{getSaveBtnTitle()}}">
+                <span class="fa fa-floppy-o"></span> {{'basket.mdm-basket.btn-shopping-basket' | translate }}
+              </button>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+
+<overwrite-dialog></overwrite-dialog>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/basket/mdm-basket.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/basket/mdm-basket.component.ts
new file mode 100644
index 0000000..40fa2ba
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/basket/mdm-basket.component.ts
@@ -0,0 +1,425 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Component, Input, Output, EventEmitter, OnInit, ViewChild } from '@angular/core';
+import { DomSanitizer } from '@angular/platform-browser';
+import { ModalDirective } from 'ngx-bootstrap';
+
+import { BasketService, Basket} from './basket.service';
+
+import { MDMItem} from '../core/mdm-item';
+import { OverwriteDialogComponent } from '../core/overwrite-dialog.component';
+import { NavigatorService } from '../navigator/navigator.service';
+import { Node} from '../navigator/node';
+import { NodeService } from '../navigator/node.service';
+import { TableviewComponent } from '../tableview/tableview.component';
+import { ViewComponent } from '../tableview/view.component';
+import { View } from '../tableview/tableview.service';
+import { QueryService, SearchResult, Row } from '../tableview/query.service';
+
+import { deserialize } from 'class-transformer';
+
+import {MenuItem} from 'primeng/primeng';
+import * as FileSaver from 'file-saver';
+
+import {MDMNotificationService} from '../core/mdm-notification.service';
+
+import { TranslateService } from '@ngx-translate/core';
+import { streamTranslate, TRANSLATE } from '../core/mdm-core.module';
+import {ConfirmationService} from 'primeng/api';
+import { Observable } from 'rxjs/Observable';
+import { forkJoin, throwError } from 'rxjs';
+import { map, flatMap } from 'rxjs/operators';
+
+@Component({
+  selector: 'mdm-basket',
+  templateUrl: 'mdm-basket.component.html',
+  styleUrls: ['./mdm-basket.component.css'],
+})
+export class MDMBasketComponent implements OnInit {
+  @Output() onActive = new EventEmitter<Node>();
+  @Output() onSelect = new EventEmitter<Node>();
+  @Input() activeNode: Node;
+
+  exportableTypes = ['Project', 'Pool', 'Test', 'TestStep', 'Measurement'];
+
+  basketName = '';
+  basketContent: SearchResult = new SearchResult();
+  basket = 'Warenkorb';
+
+  baskets: Basket[] = [];
+  selectedBasket: Basket;
+  environments: Node[];
+
+  public selectedRow: string;
+  public lazySelectedRow: string;
+
+  _currentChange: any;
+
+  contextMenuItems: MenuItem[] = [
+      { label: 'Remove selection from basket', icon: 'fa fa-times', command: (event) => this.removeSelected() }
+  ];
+
+  fixedLaunchers: MenuItem[] = [
+    {label: 'ATFX', command: (event) => this.saveBasketAsATFX(event.originalEvent)}
+  ];
+  launchers: MenuItem[] = [];
+  allowedExtensions: string[] = [];
+
+  @ViewChild(TableviewComponent)
+  tableViewComponent: TableviewComponent;
+  @ViewChild(ViewComponent)
+  viewComponent: ViewComponent;
+  @ViewChild('lgLoadModal')
+  childLoadModal: ModalDirective;
+  @ViewChild('lgSaveModal')
+  childSaveModal: ModalDirective;
+  @ViewChild(OverwriteDialogComponent)
+  overwriteDialogComponent: OverwriteDialogComponent;
+
+  constructor(private _basketService: BasketService,
+              private queryService: QueryService,
+              private navigatorService: NavigatorService,
+              private sanitizer: DomSanitizer,
+              private nodeService: NodeService,
+              private notificationService: MDMNotificationService,
+              private translateService: TranslateService,
+              private confirmationService: ConfirmationService) {
+  }
+
+  removeSelected() {
+    this._basketService.remove(this.tableViewComponent.menuSelectedRow.getItem());
+  }
+
+  ngOnInit() {
+    streamTranslate(this.translateService, TRANSLATE('basket.mdm-basket.remove-selection')).subscribe(
+      (msg: string) => this.contextMenuItems[0].label = msg);
+
+    this.nodeService.getRootNodes().subscribe(
+      envs => this.environments = envs,
+      error => this.translateService.getTranslation(TRANSLATE('basket.mdm-basket.err-cannot-load-sources'))
+        .subscribe(msg => this.notificationService.notifyError(msg, error)
+    ));
+
+    this._basketService.getFileExtensions()
+      .map(launchers => <{ menuItems: MenuItem[], extensions: string[] }>{
+          menuItems: launchers.map((l: { label: string; extension: string; }) =>  <MenuItem> {
+            label: l.label,
+            command: (event) => this.saveBasketWithExtension(event.originalEvent, l.extension) }),
+          extensions: launchers.map((l: { extension: string; }) => '.' + l.extension).join(',')
+      })
+      .subscribe(({menuItems, extensions}) => {
+        this.launchers = this.fixedLaunchers.concat(menuItems);
+        this.allowedExtensions = [ 'application/xml' ].concat(extensions);
+      });
+
+    this.setItems(this._basketService.items);
+
+    this._basketService.itemsAdded$.subscribe(
+      items => this.addItems(items),
+      error => this.translateService.getTranslation(TRANSLATE('basket.mdm-basket.err-cannot-add-selection'))
+        .subscribe(msg => this.notificationService.notifyError(msg, error)
+    ));
+
+    this._basketService.itemsRemoved$.subscribe(
+      items => this.removeItems(items),
+      error => this.translateService.getTranslation(TRANSLATE('basket.mdm-basket.err-cannot-remove-selection'))
+        .subscribe(msg => this.notificationService.notifyError(msg, error)
+    ));
+
+    this.viewComponent.viewChanged$.subscribe(
+      () => this.setItems(this._basketService.items),
+      error => this.translateService.getTranslation(TRANSLATE('basket.mdm-basket.err-cannot-select-view'))
+        .subscribe(msg => this.notificationService.notifyError(msg, error)
+    ));
+  }
+
+  onViewClick(e: Event) {
+    e.stopPropagation();
+  }
+
+  setItems(items: MDMItem[]) {
+    this.basketContent.rows = [];
+    this.addItems(items);
+  }
+
+  addItems(items: MDMItem[]) {
+    if (this.viewComponent.selectedView) {
+      this.queryService.queryItems(items, this.viewComponent.selectedView.columns.map(c => c.type + '.' + c.name))
+        .forEach(q =>
+          q.subscribe(
+          r => this.addData(r.rows),
+          error => this.notificationService.notifyError(
+            this.translateService.instant('basket.mdm-basket.err-cannot-add-items-to-shopping-basket'), error))
+        );
+    }
+  }
+
+  removeItems(items: MDMItem[]) {
+    // copy and reasign to get new object refference triggering angular change detection in tableview.
+    let tmp = Object.assign({}, this.basketContent);
+    items.forEach(item =>
+      tmp.rows = tmp.rows.filter(row =>
+        !(row.source === item.source && row.type === item.type && row.id === item.id)));
+    this.basketContent = tmp;
+  }
+
+  setView(view: View) {
+    console.log('setView', view);
+  }
+
+  saveBasket(e: Event) {
+    if (e) {
+      e.stopPropagation();
+    }
+    if (this.baskets.find(f => f.name === this.basketName) != undefined) {
+      this.childSaveModal.hide();
+      this.overwriteDialogComponent.showOverwriteModal(
+        this.translateService.instant('basket.mdm-basket.item-save-shopping-basket')).subscribe(
+          needSave => this.saveBasket2(needSave),
+          error => {
+            this.saveBasket2(false);
+            this.notificationService.notifyError(this.translateService.instant('basket.mdm-basket.err-save-shopping-basket'), error);
+        });
+    } else {
+      this.saveBasket2(true);
+    }
+  }
+
+  saveBasket2(save: boolean) {
+    if (save) {
+      this._basketService.saveBasketWithName(this.basketName);
+      this.childSaveModal.hide();
+    } else {
+      this.childSaveModal.show();
+    }
+  }
+
+  loadBasket(basket?: Basket) {
+    if (basket == undefined) {
+      basket = this.selectedBasket;
+      if (this.selectedBasket == undefined) {
+        return;
+      }
+    }
+    this.basketName = basket.name;
+    this.setItems(basket.items);
+    this._basketService.setItems(basket.items);
+    this.childLoadModal.hide();
+  }
+
+  loadBaskets() {
+    this._basketService.getBaskets().subscribe(
+      baskets => this.baskets = baskets,
+      error => this.notificationService.notifyError(
+        this.translateService.instant('basket.mdm-basket.err-cannot-load-shopping-basket'), error));
+  }
+
+  clearBasket(e: Event) {
+    e.stopPropagation();
+    this.basketContent = new SearchResult();
+    this._basketService.removeAll();
+    this.basketName = '';
+  }
+
+  showLoadModal(e: Event) {
+    e.stopPropagation();
+    this.selectedBasket = undefined;
+    this.loadBaskets();
+    this.childLoadModal.show();
+  }
+
+  showSaveModal(e: Event) {
+    e.stopPropagation();
+    this.loadBaskets();
+    this.basketName = this.selectedBasket ? this.selectedBasket.name : '';
+    this.childSaveModal.show();
+  }
+
+  stopEvent(event: Event) {
+    event.stopPropagation();
+  }
+
+  saveBasketWithExtension(event: any, extension: string) {
+    if (event) {
+      event.stopPropagation();
+    }
+    let downloadContent = new Basket(this.basketName, this._basketService.getItems());
+
+    this._basketService.getBasketAsXml(downloadContent)
+      .map(xml => new Blob([xml], { type: 'application/xml' }))
+      .subscribe(blob => this.saveAsFile(blob, extension, 'shoppingbasket'));
+  }
+
+  isExportable(item: MDMItem) {
+    return this.exportableTypes.indexOf(item.type) >= 0;
+  }
+
+  saveBasketAsATFX(event: any) {
+    if (event) {
+      event.stopPropagation();
+    }
+    const notExportableItems = this._basketService.getItems().filter(i => !this.isExportable(i));
+    const exportableItems = this._basketService.getItems().filter(i => this.isExportable(i)).map(i => i.type).join(', ');
+
+    if (exportableItems.length === 0) {
+      // No exportable item in shopping basket -> show message and cancel export
+      const msg = this.translateService.instant('basket.mdm-basket.msg-atfx-only-supports-types',
+          { types: this.exportableTypes.join(', ') })
+          + ' ' + this.translateService.instant('basket.mdm-basket.msg-only-not-exportable-types-selected',
+          { types: notExportableItems.map(i => i.type).join(', ') });
+
+      this.confirmationService.confirm({
+        message: msg,
+        acceptLabel: 'OK',
+        rejectVisible: false,
+      });
+    } else if (notExportableItems.length > 0) {
+      // shopping basket contains not exportable items -> show message and ask if export should continue
+      const msg = this.translateService.instant('basket.mdm-basket.msg-atfx-only-supports-types',
+          { types: this.exportableTypes.join(', ') })
+          + ' ' + this.translateService.instant('basket.mdm-basket.msg-not-exportable-types-continue',
+          { types: exportableItems });
+
+      this.confirmationService.confirm({
+        message: msg,
+        acceptLabel: 'Yes',
+        rejectLabel: 'No',
+        icon: 'pi pi-question-circle',
+        accept: () => this.exportItemsToAtfx(this._basketService.getItems().filter(i => this.isExportable(i))),
+        rejectVisible: true,
+      });
+    } else {
+      this.exportItemsToAtfx(this._basketService.getItems());
+    }
+  }
+
+  exportItemsToAtfx(basket: MDMItem[]) {
+    let downloadContent = new Basket(this.basketName, basket);
+
+    this._basketService.getBasketAsAtfx(downloadContent)
+      .map(atfx => new Blob([atfx], { type: 'application/xml' }))
+      .subscribe(atfx => this.saveAsFile(atfx, '.atfx'));
+  }
+
+  saveAsFile(blob: Blob, fileExtension: string, defaultFilename = 'export') {
+    let name = 'export.' + fileExtension;
+    if (this.basketName && this.basketName.trim().length !== 0) {
+      name = this.basketName + '.' + fileExtension;
+    }
+    FileSaver.saveAs(blob, name);
+  }
+
+  onUploadChange(event: Event) {
+    this._currentChange = event.target;
+    this.onUploadEvent(this._currentChange);
+  }
+
+  onUploadClick(e: Event) {
+    e.stopPropagation();
+  }
+
+  toggleSelect(basket: Basket) {
+    this.selectedBasket = this.selectedBasket === basket ? undefined : basket;
+  }
+
+  isDownloadDisabled() {
+    return this.basketContent.rows.length <= 0;
+  }
+
+  getSaveBtnTitle() {
+    return this.basketName
+      ? TRANSLATE('basket.mdm-basket.tooltip-save-shopping-basket')
+      : TRANSLATE('basket.mdm-basket.tooltip-no-name-set');
+  }
+
+  private onUploadEvent(fileInput: any) {
+    if (fileInput.files[0]) {
+      const readFile = (blob: Blob): Observable<string> => Observable.create(o => {
+        if (!(blob instanceof Blob)) {
+          o.error(new Error('Parameter `blob` must be an instance of Blob.'));
+          return;
+        }
+
+        const fileReader = new FileReader();
+        fileReader.onload = () => o.next(fileReader.result);
+        fileReader.onloadend = () => o.complete();
+        fileReader.onabort = err => o.error(err);
+        fileReader.onerror = err => o.error(err);
+        return fileReader.readAsText(blob);
+      });
+
+      readFile(fileInput.files[0]).pipe(
+        flatMap(xml => this.parseXmlShoppingBasket(xml))
+      ).subscribe(
+        basket => this.loadBasket(basket),
+        err => this.notificationService.notifyWarn('Could not load shopping basket from file.', err)
+      );
+    }
+  }
+
+  private parseXmlShoppingBasket(xml: string) {
+    let oParser = new DOMParser();
+    let oDOM = oParser.parseFromString(xml, 'application/xml');
+    // print the name of the root element or error message
+    if (oDOM.documentElement.tagName !== 'shoppingbasket') {
+      if (oDOM.documentElement.innerText) {
+        return throwError(new Error('Error while parsing shopping basket: ' + oDOM.documentElement.innerText));
+      } else {
+        return throwError(new Error('Error while parsing shopping basket: XML is missing shoppingbasket root tag'));
+      }
+    }
+
+    // load the name of the shopping basket
+    let name = '';
+    let nameTags = oDOM.documentElement.getElementsByTagName('name');
+    if (nameTags.length > 0) {
+      name = nameTags[0].textContent;
+    }
+
+    // load the business objectes defined by the resturi values in the xml file
+    let items: Observable<Node[]>[] = [];
+    let uris = oDOM.documentElement.getElementsByTagName('resturi');
+    if (uris.length === 0) {
+      return throwError(new Error('No resturis found!'));
+    }
+    for (let uri of <any>uris) {
+      let url = uri.textContent;
+      items.push(this.nodeService.getNodesByAbsoluteUrl(url));
+    }
+
+    // map business objects to MDMItems and load basket
+    return forkJoin(items).pipe(
+      map(n => n.map(x => new MDMItem(x[0].sourceName, x[0].type, x[0].id))),
+      map(i => new Basket(name, i)));
+  }
+
+  private addData(rows: Row[]) {
+    this.basketContent.rows.push(... rows);
+    // copy and reasign to get new object refference triggering angular change detection in tableview.
+    this.basketContent = Object.assign({}, this.basketContent);
+  }
+
+  onRowSelect(e: any) {
+    if (this.lazySelectedRow !== e.data) {
+      this.selectedRow = e.data;
+      this.basketName = e.data.name;
+    } else {
+      this.selectedRow = undefined;
+      this.basketName = '';
+    }
+    this.lazySelectedRow = this.selectedRow;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/basket/mdm-basket.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/basket/mdm-basket.module.ts
new file mode 100644
index 0000000..d74cbd6
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/basket/mdm-basket.module.ts
@@ -0,0 +1,33 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { NgModule } from '@angular/core';
+import { MDMBasketComponent } from './mdm-basket.component';
+import { MDMCoreModule } from '../core/mdm-core.module';
+import { TableViewModule } from '../tableview/tableview.module';
+
+import {SplitButtonModule, ConfirmDialogModule, ConfirmationService} from 'primeng/primeng';
+
+@NgModule({
+  imports: [
+    MDMCoreModule,
+    TableViewModule,
+    SplitButtonModule,
+    ConfirmDialogModule,
+  ],
+  declarations: [ MDMBasketComponent ],
+  exports: [ MDMBasketComponent],
+  providers: [ ConfirmationService ],
+})
+export class MDMBasketModule { }
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/chart-viewer.style.css b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/chart-viewer.style.css
new file mode 100644
index 0000000..364c1cb
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/chart-viewer.style.css
@@ -0,0 +1,167 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+.toolbar {
+  background-color: #f8f8f8;
+  border-color:#ddd !important;
+  border-radius: 4px;
+  border: 1px solid;
+  margin-bottom: 4px;
+}
+
+.thin {
+  padding: 4px;
+}
+
+.toggler {
+  text-align: right;
+  color: #6c757d;
+  cursor: pointer;
+}
+
+.toggler:hover {
+  color: black;
+}
+
+p-listbox >>> .ui-listbox-item {
+  padding: 4px 0 4px 8px !important;
+}
+
+p-listbox >>> p-header {
+  display: grid; 
+  grid-template-columns: 12% 63% 25%;
+  align-items: center;
+}
+
+p-listbox >>> .ui-listbox-header {
+  border-bottom-left-radius: 0;
+  border-bottom-right-radius: 0;
+  /* border-bottom-color: rgb(166,166,166); */
+}
+
+p-listbox >>> .ui-listbox-header-w-checkbox {
+  padding: 4px 8px;
+}
+
+.hiddenList >>> .ui-listbox-list-wrapper {
+  display: none;
+}
+
+.hiddenList >>> .ui-listbox-header-w-checkbox {
+  display: none;
+}
+
+p-listbox >>> .ypanel .ui-listbox-header-w-checkbox {
+  text-align: right;
+}
+
+p-togglebutton >>> .ui-button {
+  font-size: 14px;
+  margin: 0 3px;
+  color: #6c757d;
+  background-color: transparent;
+  background-image: none;
+  border-color: #6c757d;
+}
+
+p-togglebutton >>> .ui-button.ui-state-active {
+  /* color: #333333!important; */
+  color: #fff!important;
+  background-color: #a0a0a0;
+}
+
+p-togglebutton >>> .ui-button.ui-state-active >>> .ui-button-icon-left {
+  /* color: #333333!important; */
+  color: #fff!important;
+  background-color: #a0a0a0;
+}
+
+p-togglebutton >>> .ui-button:not(.ui-state-active).ui-state-focus {
+  border-color: #6c757d;
+  background-color: transparent!important;
+}
+
+p-togglebutton >>> .ui-button:not(.ui-state-active).ui-state-focus >>> .ui-button-icon-left {
+  color: #6c757d!important;
+}
+
+p-spinner {
+  margin: 0 3px;
+}
+
+p-spinner >>> .ui-button {
+  font-size: 14px;
+  color: #6c757d;
+  background-color: transparent;
+  background-image: none;
+  border-color: #6c757d;
+}
+
+p-spinner >>> .ui-button:hover {
+  background-color:#c8c8c8;
+  border-color:#c8c8c8;
+  color:#333333;
+}
+
+p-spinner >>> .ui-spinner {
+  margin-top: -3px;
+}
+
+p-spinner >>> .ui-spinner-input {
+  height: 32px;
+}
+
+.hidden {
+  display: none;
+}
+
+.channelList {
+  list-style-type: none;
+  padding: 0;
+  margin-bottom: 0;
+  min-height: 80px;
+}
+
+.row {
+  display: grid;
+  grid-template-columns: 155px 185px;
+  align-items: center;
+  padding: 1px 8px 1px 8px;
+}
+
+p-panel >>> .ui-panel-content.ui-widget-content {
+  overflow-x: scroll;
+  overflow-y: visible;
+}
+
+p-panel >>> .ui-panel .ui-panel-titlebar {
+  background-color: inherit;
+  border-color: rgb(166,166,166);
+  padding: 6px 12px;
+}
+
+p-panel >>> .ui-panel .ui-panel-content {
+  border-color: rgb(166,166,166);
+  border-bottom-left-radius: 3px;
+  border-bottom-right-radius: 3px;
+  padding: 4px 10px
+}
+
+p-panel >>> .ui-inputtext {
+  padding: 2px 0.429em;
+}
+
+p-panel label {
+  font-weight: inherit;
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/chartviewer.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/chartviewer.module.ts
new file mode 100644
index 0000000..efd8d58
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/chartviewer.module.ts
@@ -0,0 +1,81 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { NgModule } from '@angular/core';
+import { HttpClientModule } from '@angular/common/http';
+
+import { CheckboxModule } from 'primeng/checkbox';
+import { ButtonModule } from 'primeng/button';
+import { SliderModule } from 'primeng/slider';
+import { InputTextModule } from 'primeng/inputtext';
+import { AccordionModule } from 'primeng/accordion';
+import { TableModule } from 'primeng/table';
+import { SelectButtonModule } from 'primeng/selectbutton';
+import { ChartModule } from 'primeng/chart';
+import { ToggleButtonModule } from 'primeng/togglebutton';
+import { SpinnerModule } from 'primeng/spinner';
+import { MultiSelectModule } from 'primeng/multiselect';
+import { ListboxModule } from 'primeng/listbox';
+import { PanelModule } from 'primeng/panel';
+import { ConfirmDialogModule } from 'primeng/confirmdialog';
+
+import { MDMCoreModule } from '../core/mdm-core.module';
+import { ChartViewerComponent } from './components/chartviewer/chart-viewer.component';
+import { DataTableComponent } from './components/datatable/data-table.component';
+import { ChartViewerNavCardComponent } from './components/chatviewer-nav-card/chart-viewer-nav-card.component';
+import { XyChartViewerComponent } from './components/xy-chart-viewer/xy-chart-viewer.component';
+import { XyChartViewerNavCardComponent } from './components/xy-chart-viewer-nav-card/xy-chart-viewer-nav-card.component';
+import { RequestOptionsComponent } from './components/request-options/request-options.component';
+import { XyChartViewerToolbarComponent } from './components/xy-chart-viewer-toolbar/xy-chart-viewer-toolbar.component';
+import { XyChartDataSelectionPanelComponent } from './components/xy-chart-data-selection-panel/xy-chart-data-selection-panel.component';
+import { ConfirmationService } from 'primeng/api';
+
+@NgModule({
+  imports: [
+    MDMCoreModule,
+    HttpClientModule,
+    CheckboxModule,
+    ButtonModule,
+    SelectButtonModule,
+    TableModule,
+    SliderModule,
+    InputTextModule,
+    AccordionModule,
+    ChartModule,
+    ToggleButtonModule,
+    SpinnerModule,
+    MultiSelectModule,
+    ListboxModule,
+    PanelModule,
+    ConfirmDialogModule,
+  ],
+  declarations: [
+    ChartViewerNavCardComponent,
+    ChartViewerComponent,
+    DataTableComponent,
+    XyChartViewerComponent,
+    XyChartViewerNavCardComponent,
+    RequestOptionsComponent,
+    XyChartViewerToolbarComponent,
+    XyChartDataSelectionPanelComponent,
+  ],
+  exports: [
+    ChartViewerNavCardComponent,
+    XyChartViewerNavCardComponent,
+  ],
+  providers: [
+    ConfirmationService
+  ]
+})
+export class ChartviewerModule {}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/chartviewer/chart-viewer.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/chartviewer/chart-viewer.component.html
new file mode 100644
index 0000000..85ba743
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/chartviewer/chart-viewer.component.html
@@ -0,0 +1,31 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+<p-chart #lineChart type="line" [data]="data" [options]="options"></p-chart>
+
+<p-accordion>
+    <p-accordionTab header="Optionen">
+        
+        Von <input type="number" numbersOnly pInputText [(ngModel)]="rangeValues[0]" />
+        Bis <input type="number" numbersOnly pInputText [(ngModel)]="rangeValues[1]" />
+        Gesamt {{numberOfRows}}
+        Schrittweite: <input type="text" numbersOnly pInputText [(ngModel)]="step"/>
+        Vorschauwerte<p-checkbox [(ngModel)]="previewEnabled" binary="true"></p-checkbox> <input *ngIf="previewEnabled" type="text" numbersOnly pInputText [(ngModel)]="numberOfChunks" />
+ 
+        <div style="margin: 20px 0;">
+            <p-slider [(ngModel)]="rangeValues" [range]="true" [min]="1" [max]="numberOfRows" [step]="step"></p-slider>
+        </div>
+        <p-button label="Anwenden" (onClick)="applySettings($event)"></p-button>
+    </p-accordionTab>
+</p-accordion>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/chartviewer/chart-viewer.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/chartviewer/chart-viewer.component.ts
new file mode 100644
index 0000000..10262be
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/chartviewer/chart-viewer.component.ts
@@ -0,0 +1,165 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Component,  ViewChild, Input, SimpleChanges, OnChanges } from '@angular/core';
+import { Observable } from 'rxjs';
+import { map, tap, catchError } from 'rxjs/operators';
+
+import { UIChart } from 'primeng/primeng';
+
+import { HttpErrorHandler } from '../../../core/http-error-handler';
+import { Node } from '../../../navigator/node';
+import { ChartViewerDataService, getDataArray } from '../../services/chart-viewer-data.service';
+import { MeasuredValues } from '../../model/chartviewer.model';
+
+@Component({
+  selector: 'mdm5-chartViewer',
+  templateUrl: 'chart-viewer.component.html',
+  providers: []
+})
+export class ChartViewerComponent implements OnChanges {
+
+  @Input()
+  channelGroup = new Node();
+  @Input()
+  channels = [new Node()];
+
+  @ViewChild('lineChart')
+  chart: UIChart;
+
+  maxRequestedValues = 10000;
+  previewEnabled = true;
+  numberOfChunks = 600;
+  numberOfRows = 0;
+  startIndex = 1;
+  requestedValues = 0;
+
+  // range of values to show; 1-based; start and end inclusive
+  rangeValues: number[] = [this.startIndex, this.requestedValues];
+  step = 1000;
+
+  data = {
+    labels: [],
+    datasets: [
+      {
+        label: 'No data',
+        data: [],
+        borderColor: '#fff',
+      }
+    ]
+  };
+
+  options = {
+    elements: {
+      point: {
+        radius: 0
+      },
+      line: {
+        tension: 0
+      }
+    },
+    legend: {
+      display: true,
+    },
+    plugins: {
+      zoom: {
+        pan: {
+          enabled: true,
+          mode: 'xy'
+        },
+        zoom: {
+          enabled: true,
+          mode: 'xy'
+        }
+      }
+    },
+  };
+
+  constructor(private httpErrorHandler: HttpErrorHandler,
+    private chartService: ChartViewerDataService) {
+  }
+
+  ngOnChanges(changes: SimpleChanges) {
+    for (let propName in changes) {
+      if (propName === 'channelGroup' || propName === 'channels') {
+        this.channelGroup = this.channelGroup;
+        this.numberOfRows = this.chartService.getNumberOfRows(this.channelGroup);
+        if (this.numberOfRows < this.numberOfChunks) {
+          this.previewEnabled = false;
+        }
+        this.requestedValues = Math.min(this.numberOfRows, this.maxRequestedValues);
+
+        this.updateRange();
+        this.chartChannel();
+        break;
+      }
+    }
+  }
+
+  getColor(name: string) {
+    return this.data.datasets.find(dataset => dataset.label === name).borderColor;
+  }
+
+  applySettings(event: any) {
+    this.chartChannel();
+  }
+
+  chartChannel() {
+    this.chartMeasuredValues(this.chartService.loadPreviewValues(
+      this.channelGroup, [this.channels[0]], this.numberOfChunks, this.rangeValues[0] - 1, this.rangeValues[1]));
+  }
+
+  chartMeasuredValues(measuredValues: Observable<MeasuredValues[]>) {
+    measuredValues.pipe(
+      map(mvl => <any>{
+        data: {
+          labels: this.getLabels(this.rangeValues[0], this.rangeValues[1], this.getLength(mvl)),
+          datasets: mvl.map(this.convertToDataset, this)
+        }
+      }),
+      catchError(this.httpErrorHandler.handleError)
+    ).subscribe(d => {
+      console.log(d);
+      this.data = d.data;
+    });
+  }
+
+  updateRange() {
+    this.rangeValues = [this.startIndex, this.requestedValues];
+    this.step = Math.min(1000, Math.max(Math.floor(this.numberOfRows / 1000), 1));
+  }
+
+  getLabels(startIndex: number, endIndex: number, numberOfChunks: number) {
+    let labels: number[] = Array();
+    for (let i = startIndex; i <= endIndex; i += (endIndex - startIndex + 1) / numberOfChunks) {
+      labels.push(Math.floor(i));
+    }
+    return labels;
+  }
+
+  getLength(measuredValues: MeasuredValues[]) {
+    return measuredValues.map(mv => mv.length).reduce((p, l) => Math.max(p, l));
+  }
+
+  convertToDataset(measuredValues: MeasuredValues) {
+    return <any>{
+      label: measuredValues.name + ' [' + measuredValues.unit + ']',
+      unit: measuredValues.unit,
+      data: getDataArray(measuredValues).values,
+      borderColor: '#' + Math.random().toString(16).substr(-6),
+      measuredValues: map,
+      channel: new Node()
+    };
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/chatviewer-nav-card/chart-viewer-nav-card.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/chatviewer-nav-card/chart-viewer-nav-card.component.html
new file mode 100644
index 0000000..8cc9516
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/chatviewer-nav-card/chart-viewer-nav-card.component.html
@@ -0,0 +1,27 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+<div *ngIf="channels === undefined">
+        No Channel selected.
+</div>
+
+<div *ngIf="channels !== undefined">
+    <p-selectButton [options]="modes" [(ngModel)]="selectedMode"></p-selectButton>
+
+    <div [ngSwitch]="selectedMode">
+        <mdm5-chartViewer *ngSwitchCase="'chart'" [channelGroup]="channelGroup" [channels]="channels" ></mdm5-chartViewer>
+        <mdm5-dataTable *ngSwitchCase="'table'" [channelGroup]="channelGroup" [channels]="channels"></mdm5-dataTable>
+        <div *ngSwitchDefault></div>
+    </div>
+</div>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/chatviewer-nav-card/chart-viewer-nav-card.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/chatviewer-nav-card/chart-viewer-nav-card.component.ts
new file mode 100644
index 0000000..7b21a64
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/chatviewer-nav-card/chart-viewer-nav-card.component.ts
@@ -0,0 +1,96 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Component, OnInit, OnDestroy } from '@angular/core';
+import { NavigatorService } from '../../../navigator/navigator.service';
+import { MDMNotificationService } from '../../../core/mdm-notification.service';
+import { TranslateService } from '@ngx-translate/core';
+import { NodeService } from '../../../navigator/node.service';
+import { forkJoin, Observable } from 'rxjs';
+import { Node } from '../../../navigator/node';
+import { SelectItem } from 'primeng/api';
+import { PropertyService } from 'src/app/core/property.service';
+
+@Component({
+  selector: 'mdm5-chartViewerNavCard',
+  templateUrl: 'chart-viewer-nav-card.component.html',
+  providers: []
+})
+export class ChartViewerNavCardComponent implements OnInit, OnDestroy {
+  private _contextUrl: string;
+
+  modes: SelectItem[] = [
+    { label: 'Chart', value: 'chart'},
+    { label: 'Table', value: 'table'},
+  ];
+  selectedMode = 'chart';
+
+  selectedNode: Node;
+  channelGroup: Node;
+  channels: Node[];
+  subscription: any;
+
+  showLegend = false;
+  dataAvailable = false;
+
+  constructor(private navigatorService: NavigatorService,
+    private notificationService: MDMNotificationService,
+    private translateService: TranslateService,
+    private nodeService: NodeService,
+    private _prop: PropertyService) {
+    this._contextUrl = _prop.getUrl('mdm/environments');
+  }
+
+  ngOnInit() {
+    this.onSelectedNodeChange(this.navigatorService.getSelectedNode());
+    this.subscription = this.navigatorService.selectedNodeChanged.subscribe(
+      node => this.onSelectedNodeChange(node),
+      error => this.notificationService.notifyError(this.translateService.instant('details.mdm-detail-view.cannot-update-node'), error)
+    );
+  }
+
+  ngOnDestroy() {
+    this.subscription.unsubscribe();
+  }
+
+  onSelectedNodeChange(node: Node) {
+    if (!node) {
+      this.dataAvailable = false;
+      return;
+    }
+    this.selectedNode = node;
+
+    if (node && node.type === 'Channel') {
+      this.loadChannelGroup(node)
+        .flatMap(channelGroup => forkJoin([Observable.of(channelGroup), this.loadChannels(channelGroup)]))
+        .subscribe(([channelGroup, channels]) => {
+          this.channelGroup = channelGroup;
+          this.channels = [node];
+          this.dataAvailable = true;
+        });
+    } else {
+      this.dataAvailable = false;
+    }
+  }
+
+  loadChannelGroup(channel: Node) {
+    let url = this._contextUrl + '/' + channel.sourceName + '/channelgroups?filter=Channel.Id eq \"' + channel.id + '\"';
+    return this.nodeService.getNode(url).map(channelGroup => channelGroup[0]);
+  }
+
+  loadChannels(channelgroup: Node) {
+    let url = this._contextUrl + '/' + channelgroup.sourceName + '/channels?filter=ChannelGroup.Id eq \"' + channelgroup.id + '\"';
+    return this.nodeService.getNode(url);
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/datatable/data-table.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/datatable/data-table.component.html
new file mode 100644
index 0000000..fd6857b
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/datatable/data-table.component.html
@@ -0,0 +1,44 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+<p-table #datatable [value]="datapoints" [columns]="cols" [lazy]="true" (onLazyLoad)="loadLazy($event)" [paginator]="true" 
+[rows]="recordsPerPage" [totalRecords]="totalRecords" [loading]="tableLoading" [rowsPerPageOptions]="[10, 20, 50, 100, 1000]">
+    <ng-template pTemplate="header" let-columns>
+        <tr>
+            <th>Index</th>
+            <th *ngFor="let col of columns">
+                {{col.header}}
+            </th>
+        </tr>
+    </ng-template>
+    <ng-template pTemplate="body" let-rowData let-i="rowIndex" let-columns="columns">
+        <tr style="height:34px">
+            <td>{{i}}</td>
+            <td *ngFor="let col of columns">
+                {{rowData[col.field]}}
+            </td>
+        </tr>
+    </ng-template>
+    <ng-template pTemplate="emptymessage" let-columns>
+        <tr>
+            <td [attr.colspan]="columns.length">
+                No records found
+            </td>
+        </tr>
+    </ng-template>
+    <ng-template pTemplate="paginatorleft" let-state>
+            Total: {{state.totalRecords}}
+        </ng-template>
+    
+</p-table>
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/datatable/data-table.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/datatable/data-table.component.ts
new file mode 100644
index 0000000..76370f5
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/datatable/data-table.component.ts
@@ -0,0 +1,77 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Component, ViewChild, Input, OnChanges, SimpleChanges } from '@angular/core';
+
+import { LazyLoadEvent, Column } from 'primeng/primeng';
+import { Table } from 'primeng/table';
+
+import { Node } from '../../../navigator/node';
+import { ChartViewerDataService, getDataArray } from '../../services/chart-viewer-data.service';
+import { MeasuredValues } from '../../model/chartviewer.model';
+
+@Component({
+  selector: 'mdm5-dataTable',
+  templateUrl: 'data-table.component.html',
+  providers: []
+})
+export class DataTableComponent implements OnChanges {
+  @ViewChild('datatable')
+  private table: Table;
+
+  @Input()
+  channelGroup = new Node();
+  @Input()
+  channels = [new Node()];
+
+  tableLoading = false;
+  cols: Column[] = [];
+  totalRecords = 0;
+  recordsPerPage = 10;
+  datapoints = [];
+
+  constructor(private chartviewerService: ChartViewerDataService) {
+  }
+
+  ngOnChanges(changes: SimpleChanges) {
+    for (let propName in changes) {
+      if (propName === 'channelGroup' || propName === 'channels') {
+        this.table.reset();
+      }
+    }
+  }
+
+  load(mv: MeasuredValues[]) {
+    let zip = (rows => rows[0].map((_, c) => rows.map(row => row[c])));
+
+    this.cols = mv.map((m, i) => Object.assign(new Column(), { header: m.name, field: i }));
+    this.datapoints = zip(mv.map(m => getDataArray(m).values));
+  }
+
+  loadLazy(event: LazyLoadEvent) {
+    if (this.channelGroup === undefined) {
+      return;
+    }
+
+    setTimeout(() => {
+      this.tableLoading = true;
+      this.totalRecords = this.chartviewerService.getNumberOfRows(this.channelGroup);
+      this.chartviewerService.loadMeasuredValues(this.channelGroup, this.channels, event.first, event.rows).subscribe(mv => {
+        this.load(mv);
+        this.tableLoading = false;
+      },
+      () => this.tableLoading = false);
+    }, 0);
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/request-options/request-options.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/request-options/request-options.component.html
new file mode 100644
index 0000000..108ee9a
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/request-options/request-options.component.html
@@ -0,0 +1,77 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+<p-accordion [style]="{'width':'100%'}">
+  <p-accordionTab header="Optionen" [disabled]="!channelGroups || channelGroups.length === 0">
+    <div class="p-grid nested-grid p-align-center">
+      <!-- Row 1 -->
+        <!-- left -->
+      <div class="p-col-2">
+        <label for="rangeValStart">Von</label>
+        <p-spinner id="rangeValStart"
+          size="4"
+          [(ngModel)]="rangeValues[0]"
+          [step]="step"
+          [min]="minIndex"
+          [max]="rangeValues[1]"
+          (onChange)="onChangeValueRange($event)"
+          ></p-spinner>
+      </div>
+      <div class="p-col-2">
+        <label for="rangeValEnd">Bis</label>
+        <p-spinner id="rangeValEnd"
+          size="4"
+          [(ngModel)]="rangeValues[1]"
+          [step]="step"
+          [min]="rangeValues[0]"
+          [max]="numberOfRows"
+          (onChange)="onChangeValueRange($event)"
+          (onBlur)="onChangeValueRange($event)"
+          ></p-spinner>
+      </div>
+      <div class="p-col-4">
+        <label for="step">Schrittweite</label>
+        <p-spinner id="step" type="text" [(ngModel)]="step" size="4"></p-spinner>
+      </div>
+        <!-- right -->
+      <div class="p-col-4">
+        <label for="preview">Vorschauwerte</label>
+        <p-checkbox id="preview" [(ngModel)]="previewEnabled" binary="true"></p-checkbox>
+      </div>
+
+      <!-- Row 2 -->
+        <!-- left -->
+      <div class="p-col-7">
+        <div class="p-grid p-align-center">
+          <div class="p-col-1" style="text-align: right;">{{minIndex}}</div>
+          <div class="p-col-10"><p-slider [(ngModel)]="rangeValues" [range]="true" [min]="1" [max]="(numberOfRows + 1)" [step]="step"></p-slider></div>
+          <div class="p-col-1">{{numberOfRows + 1}}</div>
+        </div>
+      </div>
+      <div class="p-col-1">
+      </div>
+        <!-- right -->
+      <div class="p-col-4">
+        <input *ngIf="previewEnabled" type="text" numbersOnly pInputText [(ngModel)]="numberOfChunks" />
+      </div>
+
+      <!-- Row 3 -->
+      <div class="p-col-12" style="text-align: right;">
+        <button class="btn btn-mdm" (click)="onApplySettings($event)">
+          <span class="fa fa-check"></span>
+          Übernehmen
+        </button>
+      </div>
+    </div>
+  </p-accordionTab>
+</p-accordion>
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/request-options/request-options.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/request-options/request-options.component.ts
new file mode 100644
index 0000000..ddbf822
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/request-options/request-options.component.ts
@@ -0,0 +1,96 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Component, OnInit, Input, SimpleChanges, OnChanges, Output, EventEmitter } from '@angular/core';
+import { ChartViewerDataService } from '../../services/chart-viewer-data.service';
+import { Node } from '../../../navigator/node';
+import { RequestOptions } from '../../model/chartviewer.model';
+
+@Component({
+  selector: 'mdm5-request-options',
+  templateUrl: './request-options.component.html'
+})
+export class RequestOptionsComponent implements OnInit, OnChanges {
+
+  // octive accordion tab, default: -1 (= non is active).
+  public accordionIndex = undefined;
+
+  public readonly minIndex = 1;
+  // public requestedValues = 1;
+  public rangeValues: number[] = [];
+
+  private maxRequestedValues = 10000;
+
+  public numberOfRows = 0;
+  public numberOfChunks = 600;
+  public step: number;
+  public previewEnabled = true;
+
+  @Input()
+  public channelGroups: Node[];
+
+  @Output()
+  public onRequestOptionsChanged = new EventEmitter<RequestOptions>();
+
+  constructor(
+    private chartService: ChartViewerDataService) { }
+
+  ngOnInit() {
+    this.reload();
+    this.emitRequestOptionsChanged();
+  }
+
+  ngOnChanges(changes: SimpleChanges) {
+    if (changes['channelGroups']) {
+      this.reload();
+      this.emitRequestOptionsChanged();
+    }
+  }
+
+  private reload() {
+    if (this.channelGroups != undefined && this.channelGroups.length > 0) {
+      this.numberOfRows = this.chartService.getNumberOfRows(this.channelGroups[0]);
+      this.step = Math.min(1000, Math.max(Math.floor(this.numberOfRows / 100), 1));
+      if (this.numberOfRows < this.numberOfChunks) {
+        this.previewEnabled = false;
+      }
+      const requestedValues = Math.min(this.numberOfRows, this.maxRequestedValues);
+      this.rangeValues = [this.minIndex, requestedValues];
+    }
+  }
+
+  public onChangeValueRange(event: Event) {
+    // check if input string is numeric, set min/max otherwise
+    if (isNaN(+this.rangeValues[0])) {
+      this.rangeValues[0] = this.minIndex;
+    }
+    if (isNaN(+this.rangeValues[1])) {
+      this.rangeValues[1] = this.numberOfRows;
+    }
+    // reassign for change detection
+    this.rangeValues = [].concat(this.rangeValues);
+  }
+
+  public onApplySettings(event: Event) {
+    // close accordion
+    this.accordionIndex = -1;
+    // emit options
+    this.emitRequestOptionsChanged();
+  }
+
+  private emitRequestOptionsChanged() {
+    this.onRequestOptionsChanged.emit(
+      new RequestOptions(this.rangeValues[1] - this.rangeValues[0], this.rangeValues[0] - 1, this.previewEnabled, this.numberOfChunks));
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-data-selection-panel/xy-chart-data-selection-panel.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-data-selection-panel/xy-chart-data-selection-panel.component.html
new file mode 100644
index 0000000..c2cfc55
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-data-selection-panel/xy-chart-data-selection-panel.component.html
@@ -0,0 +1,98 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+<div class="p-grid">
+  <div class="p-col-12" style="margin-top: 4px">
+    <p-listbox
+      [options]="channelGroups"
+      [(ngModel)]="selectedChannelGroups"
+      multiple="multiple"
+      checkbox="checkbox"
+      filter="filter"
+      optionLabel="name"
+      (onChange)="onSelectedChannelGroupsChanged($event)"
+      [ngClass]="{'hiddenList': hiddenGroups}"
+      [style]="{'width':'100%'}"
+      [listStyle]="{'height':'100px'}">
+      <p-header>
+          <span class="icon channelgroup"></span>
+          {{'SubMatrix' | mdmdatasourcetranslate}}
+          <span
+            class="fa toggler"
+            [ngClass]="{'fa-chevron-down': !hiddenGroups, 'fa-chevron-right': hiddenGroups}"
+            (click)="onToggleChannelGroupPanel($event)"></span>
+      </p-header>
+    </p-listbox>
+  </div>
+  <div class="p-col-12">
+    <p-listbox [options]="yChannelOptions"
+      [(ngModel)]="selectedYChannels"
+      multiple="multiple"
+      checkbox="checkbox"
+      filter="filter"
+      optionLabel="name"
+      (onChange)="onSelectedYChannelsChanged($event)"
+      [ngClass]="{'hiddenList': hiddenYChannels}"
+      [style]="{'width':'100%'}"
+      [styleClass]="'ypanel'"
+      [listStyle]="{'height':'200px'}"
+      [showToggleAll]="false">
+      <p-header>
+        <span class="icon channel"></span>
+        Y-{{'MeaQuantity' | mdmdatasourcetranslate}}
+        <span
+        class="fa toggler"
+        [ngClass]="{'fa-chevron-down': !hiddenYChannels, 'fa-chevron-right': hiddenYChannels}"
+        (click)="onToggleYChannelPanel($event)"></span>
+      </p-header>
+    </p-listbox>
+  </div>
+  <div class="p-col-12">
+    <p-panel
+      [toggleable]="true"
+      [collapsed]="true"
+      expandIcon="fa fa-chevron-right"
+      collapseIcon="fa fa-chevron-down">
+      <p-header>
+        <span class="icon channel"></span>
+        &nbsp;X-{{'MeaQuantity' | mdmdatasourcetranslate}}
+      </p-header>
+      <ul class="channelList">
+        <li *ngFor="let rowData of selectedChannelRows">
+          <div class="row">
+            <label>
+              {{rowData.yChannel.name}}
+            </label>
+            
+            <!-- appendTo="body" is workaround for overlay is hidden in panel. Problem: AppendTo body makes overly stuck on scroll -->
+            <p-dropdown
+              [(ngModel)]="rowData.xChannel"
+              [options]="xChannelOptions[rowData.channelGroup.id]"
+              appendTo="body"
+              [filter]="xChannelOptions[rowData.channelGroup.id]?.length > 5"
+              (onChange)="onSelectedXChannelChanged($event, rowData)"
+              (onShow)="onShowSelectedXChannelChanged($event, rowData)"
+              placeholder="{{'chartviewer.xy-chart-data-selection-panel.select-channel-placeholder' | translate}}"
+              optionLabel="name"
+              [showClear]="false"
+              [style]="{'width':'95%'}">
+            </p-dropdown>
+          </div>
+        </li>
+      </ul>
+    </p-panel>
+  </div>
+</div>
+
+<p-confirmDialog icon="pi pi-exclamation-triangle"></p-confirmDialog>
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-data-selection-panel/xy-chart-data-selection-panel.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-data-selection-panel/xy-chart-data-selection-panel.component.ts
new file mode 100644
index 0000000..7def935
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-data-selection-panel/xy-chart-data-selection-panel.component.ts
@@ -0,0 +1,449 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Component, OnInit, Input, OnDestroy, EventEmitter, Output, OnChanges, SimpleChanges } from '@angular/core';
+import { ChannelSelectionRow, MeasuredValues} from '../../model/chartviewer.model';
+import { Subscription, of } from 'rxjs';
+import { ChartViewerDataService } from '../../services/chart-viewer-data.service';
+import { ChartViewerService } from '../../services/chart-viewer.service';
+import { ArrayUtilService } from 'src/app/core/services/array-util.service';
+import { MDMNotificationService } from 'src/app/core/mdm-notification.service';
+import { TYPE_MEASUREMENT, TYPE_CHANNELGROUP, TYPE_CHANNEL } from '../../model/constants';
+import { tap } from 'rxjs/operators';
+import { Node } from '../../../navigator/node';
+import {ConfirmationService} from 'primeng/api';
+import { TranslateService } from '@ngx-translate/core';
+
+@Component({
+  selector: 'mdm5-xy-chart-data-selection-panel',
+  templateUrl: './xy-chart-data-selection-panel.component.html',
+  styleUrls: ['../../chart-viewer.style.css']
+})
+export class XyChartDataSelectionPanelComponent implements OnInit, OnDestroy, OnChanges {
+
+  @Input()
+  public channelGroups: Node[];
+  @Input()
+  public channels: Map<string, Node[]>;
+
+  @Input()
+  public xyMode: boolean;
+
+  @Output()
+  public onSelectionChanged = new EventEmitter<ChannelSelectionRow[]>();
+
+  // select options for channels
+  public yChannelOptions: Node[] = [];
+  public xChannelOptions: {[key: string]: Node[]} = {};
+
+  // channel(group) selection for chart
+  // !! change via setter to update cache for workarround !!
+  public selectedChannelGroups: Node[] = [];
+  public selectedYChannels: Node[] = [];
+
+  private xYcache = new Map<string, MeasuredValues[]>();
+  private selectionChanged = false;
+
+  // listbox workarround to determine toggled item(s)
+  private lastChannelGroupSelection: Node[] = [];
+  private lastYChannelSelection: Node[] = [];
+
+  public selectedChannelRows: ChannelSelectionRow[] = [];
+
+  // Toggle selection panel visibility
+  public hiddenGroups = false;
+  public hiddenYChannels = false;
+
+  // for x-channel default value
+  private independentChannels = new Map<string, Node>();
+
+  /********** subscriptions */
+  private chartViewerSub: Subscription;
+
+  constructor(private chartviewerDataService: ChartViewerDataService,
+              private chartViewerService: ChartViewerService,
+              private arrayUtil: ArrayUtilService,
+              private confirmationService: ConfirmationService,
+              private notificationService: MDMNotificationService,
+              private translateService: TranslateService) { }
+
+
+  /****************  Angular lifecycle-hooks ****************************/
+
+  ngOnInit() {
+    this.chartViewerSub = this.chartViewerService.onNodeMetaChange().subscribe(node => this.handleNodeSelectionInNavTree(node));
+  }
+
+  ngOnDestroy() {
+    this.chartViewerSub.unsubscribe();
+  }
+
+  ngOnChanges(changes: SimpleChanges) {
+    if (changes['xyMode']) {
+      this.reloadAxisSelectOptions().subscribe(() => {
+        if (this.selectionChanged) {
+          this.fireSelectionChanged();
+          this.selectionChanged = false;
+        }
+      });
+    }
+  }
+
+  /**************** Html-template listeners *****************************/
+
+  // x-axis
+  public onSelectedXChannelChanged(event: any) {
+    if (event.value == undefined) {
+      // work around: if x-axis is deselected for an y-channel, plat over independent channel.
+      // should force selection on dropdown instead.
+      this.selectedChannelRows
+        .filter(row => row.xChannel == undefined)
+        .map(row => row.xChannel = this.getDefaultXChannel(row.channelGroup));
+    }
+    this.fireSelectionChanged();
+  }
+
+  public onShowSelectedXChannelChanged(event: any, rowData: ChannelSelectionRow) {
+    if (this.getDefaultXChannel(rowData.channelGroup) == undefined) {
+      this.confirmationService.confirm({
+        header: this.translateService.instant('chartviewer.xy-chart-data-selection-panel.no-x-channel-dialog-header'),
+        message: this.translateService.instant('chartviewer.xy-chart-data-selection-panel.no-x-channel-dialog-message'),
+        acceptLabel: 'OK',
+        rejectVisible: false
+    });
+    }
+  }
+
+  // y-axis
+  public onSelectedYChannelsChanged(event: any) {
+    let channel: Node;
+    // Deselect
+    if (this.selectedYChannels.length < this.lastYChannelSelection.length) {
+      channel = this.lastYChannelSelection.find(yChannel => !this.selectedYChannels.some(c => yChannel.id === c.id));
+      // .forEach(yChannel => this.addOrRemoveRow(this.findChannelGroup(yChannel), yChannel));
+      // Select
+    } else {
+      channel = this.selectedYChannels.find(group => !this.lastYChannelSelection.some(g => group.id === g.id));
+    }
+    this.addOrRemoveRow(this.findChannelGroup(channel), channel);
+    this.lastYChannelSelection = this.selectedYChannels;
+    this.fireSelectionChanged();
+  }
+
+  public onSelectedChannelGroupsChanged(event: any) {
+    // All deselected
+    if (this.selectedChannelGroups.length === 0) {
+      this.resetChannelData();
+      this.fireSelectionChanged();
+    } else {
+      // Deselect
+      if (this.selectedChannelGroups.length < this.lastChannelGroupSelection.length) {
+        this.lastChannelGroupSelection
+        .filter(group => !this.selectedChannelGroups.some(g => group.id === g.id))
+        .forEach(group => this.handleDeselectChannelGroup(group));
+        // Select
+      } else {
+        this.selectedChannelGroups
+        .filter(group => !this.lastChannelGroupSelection.some(g => group.id === g.id))
+        .forEach(group => this.handleSelectChannelGroup(group));
+      }
+    }
+    this.lastChannelGroupSelection = this.selectedChannelGroups;
+  }
+
+  public onToggleChannelGroupPanel(event: Event) {
+    this.hiddenGroups = !this.hiddenGroups;
+  }
+
+  public onToggleYChannelPanel(event: Event) {
+    this.hiddenYChannels = !this.hiddenYChannels;
+  }
+
+  private handleDeselectChannelGroup(channelGroup: Node) {
+    // remove rows
+    if (this.arrayUtil.isNotEmpty(this.selectedChannelRows)) {
+      this.selectedChannelRows = this.selectedChannelRows.filter(row => row.channelGroup.id !== channelGroup.id);
+    }
+    // remove selection
+    if (this.arrayUtil.isNotEmpty(this.selectedYChannels)) {
+      this.setSelectedYChannels(this.selectedYChannels.filter(channel =>
+        this.channels.get(channelGroup.id).findIndex(c => channel.id === c.id) === -1));
+    }
+    this.reloadAxisSelectOptions().subscribe(() => this.fireSelectionChanged());
+  }
+
+    /**
+   * Handle channelGroup selection via multiselect in html template
+   * @param channelGroup
+   */
+  private handleSelectChannelGroup(channelGroup: Node) {
+    const cached = this.xYcache.get(channelGroup.id);
+    if (cached != undefined) {
+      this.setChannelOptions(cached, channelGroup);
+      this.fireSelectionChanged();
+    } else {
+      this.chartviewerDataService.readAxisType(channelGroup)
+        .subscribe(mvls => {
+          this.setChannelOptions(mvls, channelGroup);
+          this.fireSelectionChanged();
+        });
+    }
+  }
+
+  private handleNodeSelectionInNavTree(node: Node) {
+    if (node != undefined) {
+      switch (node.type) {
+        case TYPE_MEASUREMENT:
+          this.xYcache.clear();
+          this.resetChannelData();
+          this.fireSelectionChanged();
+          break;
+        case TYPE_CHANNELGROUP:
+          this.cleanOldState();
+          this.addChannelGroupToSelection(node.id, node);
+          break;
+        case TYPE_CHANNEL:
+          this.cleanOldState();
+          // add related channel group to selection
+          if (this.arrayUtil.isNotEmpty(this.channelGroups) && this.channels != undefined) {
+            const channelGroup = this.findChannelGroup(node);
+            // this.addChannelGroupToSelection(channelGroupId, this.channelGroups.find(cg => cg.id === channelGroupId));
+            if (!this.isNodeIn(channelGroup, this.selectedChannelGroups)) {
+              this.setSelectedChannelGroups(this.selectedChannelGroups.concat([channelGroup]));
+              this.chartviewerDataService.readAxisType(channelGroup)
+              .subscribe(mvls => {
+                this.setChannelOptions(mvls, channelGroup);
+                this.addChannelToSelection(node, channelGroup);
+              });
+            } else {
+              // if channel is in axis type y, set as selected, if not selected already
+              this.addChannelToSelection(node, channelGroup);
+            }
+          }
+        break;
+      }
+    }
+  }
+
+    /**
+   * reset chart data, select options and selection, if selected channelgroups
+   * contain a channelGroup which does not belongto this measurement.
+   *
+   * notice: this works for channels aswell, since a channel cannot be selected without
+   * selecting the parent channelGroup aswell.
+   */
+  private cleanOldState() {
+    if (this.arrayUtil.isNotEmpty(this.selectedChannelGroups)
+      && this.selectedChannelGroups.some(selected => !this.isNodeIn(selected, this.channelGroups))) {
+      this.xYcache.clear();
+      this.resetChannelData();
+    }
+  }
+
+  /**
+   * Handle channel selection via nav-tree
+   * @param channel
+   * @param channelGroup
+   */
+  private addChannelToSelection(channel: Node, channelGroup: Node) {
+    // adds channel to selected y-channels if possible and creates row in table
+    if (this.isNodeIn(channel, this.yChannelOptions)) {
+      const index = this.selectedYChannels.findIndex(c => c.id === channel.id);
+      if (index === -1) {
+        this.setSelectedYChannels(this.selectedYChannels.concat([channel]));
+        this.addRow(channelGroup, channel);
+        this.fireSelectionChanged();
+      }
+    /**
+     *  @TODO -> expected behaviour on selecting x-channel in tree.
+     * suggestion: set it as x-channel for all selected y-channels of that channelgroup.
+     */
+    // if channel is of axis type x, set ... ?
+    } else if (this.isNodeIn(channel, this.xChannelOptions[channelGroup.id])) {
+      this.notificationService.notifyWarn('Selected X-Channel', 'Selected channel is of type x-axis. Change x/y mode.');
+    } else {
+      this.notificationService.notifyError('Unknown channel option', 'Not sure where you found this..');
+    }
+  }
+
+  /**
+   * Handle channelGroup selection via nav-tree
+   * @param id
+   * @param channelGroup
+   */
+  private addChannelGroupToSelection(id: string, channelGroup: Node) {
+    if (this.selectedChannelGroups == undefined) {
+      this.setSelectedChannelGroups([]);
+    }
+    if (!this.isNodeIn(channelGroup, this.selectedChannelGroups)) {
+      this.setSelectedChannelGroups(this.selectedChannelGroups.concat([channelGroup]));
+      this.handleSelectChannelGroup(channelGroup);
+    }
+  }
+
+  /**
+   * Adds options for x- and y-channels depending on given channelGroup
+   *
+   * @param measuredValues
+   * @param channelGroup
+   */
+  private setChannelOptions(measuredValues: MeasuredValues[], channelGroup: Node) {
+    if (channelGroup != undefined) {
+      // cache measuredValues to avoid reloading
+      this.xYcache.set(channelGroup.id, measuredValues);
+
+      // create empty array if property not exists
+      this.xChannelOptions[channelGroup.id] = this.xChannelOptions[channelGroup.id] || [];
+
+      if (this.xyMode) {
+        measuredValues.forEach(mvl => {
+          const tmpChannel = this.channels.get(channelGroup.id).filter(c => c.name === mvl.name)[0];
+          if (mvl.axisType === 'X_AXIS' || mvl.axisType === 'XY_AXIS' || ( mvl.axisType == undefined && mvl.independent)) {
+            this.xChannelOptions[channelGroup.id] = this.xChannelOptions[channelGroup.id].concat(tmpChannel);
+            // cache independent channels for default x-axis.
+            if (mvl.independent) {
+              this.independentChannels.set(channelGroup.id, tmpChannel);
+            }
+          } else if (mvl.axisType === 'Y_AXIS' || mvl.axisType === 'XY_AXIS') {
+            this.yChannelOptions = this.yChannelOptions.concat(tmpChannel);
+          }
+        });
+      } else {
+        // cache independent channel for default x-axis.
+        const value = measuredValues.find(mvl => mvl.independent);
+        if (value != undefined) {
+          const tmpChannel = this.channels.get(channelGroup.id).filter(c => c.name === value.name)[0];
+          this.independentChannels.set(channelGroup.id, tmpChannel);
+        }
+
+        const tmpChannels = this.channels.get(channelGroup.id);
+        this.xChannelOptions[channelGroup.id] = this.xChannelOptions[channelGroup.id].concat(tmpChannels);
+        this.yChannelOptions = this.yChannelOptions.concat(tmpChannels);
+      }
+    }
+  }
+
+  /**
+   * Resets selections and select options to empty state.
+   */
+  private resetChannelData() {
+    this.setSelectedChannelGroups([]);
+    this.selectedChannelRows = [];
+    this.setSelectedYChannels([]);
+    this.channelGroups = [].concat(this.channelGroups);
+    this.xChannelOptions = {};
+    this.yChannelOptions = [];
+  }
+
+    /**
+   * Reloads the select options for the x- and y-axis dropdowns
+   */
+  private reloadAxisSelectOptions() {
+    this.xChannelOptions = {};
+    this.yChannelOptions = [];
+    if (this.arrayUtil.isNotEmpty(this.selectedChannelGroups)) {
+      const cached = this.selectedChannelGroups.filter(g => this.xYcache.get(g.id) !== undefined);
+      return of(cached.map((group, index) => this.setChannelOptions(this.xYcache.get(group.id), cached[index])))
+              .pipe(tap(() => this.removeSelectionsNotMatchingXYMode()));
+    }
+    return of();
+  }
+
+  private removeSelectionsNotMatchingXYMode() {
+    if (this.selectedYChannels.length > 0) {
+      const l = this.selectedChannelRows.length;
+      this.selectedChannelRows = this.selectedChannelRows.filter(row => this.isNodeIn(row.yChannel, this.yChannelOptions));
+      this.setSelectedYChannels(this.selectedYChannels.filter(channel => this.isNodeIn(channel, this.yChannelOptions)));
+      this.selectionChanged = l !== this.selectedChannelRows.length;
+    }
+  }
+
+   /**
+   * Row control for table with x-channel selection.
+   *
+   * @param channelGroup
+   * @param yChannel
+   */
+  private addOrRemoveRow(channelGroup: Node, yChannel: Node) {
+    const index = this.selectedChannelRows.findIndex(row => row.yChannel.id === yChannel.id);
+    if (index > -1) {
+      this.selectedChannelRows.splice(index, 1);
+      this.selectedChannelRows = [].concat(this.selectedChannelRows);
+    } else {
+      this.addRow(channelGroup, yChannel);
+    }
+  }
+
+  /**
+   * Add row to selection
+   * @param channelGroup
+   * @param yChannel
+   */
+  private addRow(channelGroup: Node, yChannel: Node) {
+    const row = new ChannelSelectionRow(channelGroup, yChannel, this.getDefaultXChannel(channelGroup));
+    this.selectedChannelRows.push(row);
+  }
+
+  /**
+   * Get the default channel for x-axis. First tries to find an independent channel,
+   * if non is found the first channel with axistype X-Axis or XY-Axis is returned.
+   * @param channelGroup
+   */
+  private getDefaultXChannel(channelGroup: Node) {
+    let defaultXChannel = this.independentChannels.get(channelGroup.id);
+    if (defaultXChannel == undefined && this.xChannelOptions[channelGroup.id].length > 0) {
+      defaultXChannel = this.xChannelOptions[channelGroup.id][0];
+    }
+    return defaultXChannel;
+  }
+
+   /**
+   * Returns true if node with given id is in the given array.
+   *
+   * @param array the array
+   * @param id the id
+   */
+  private isNodeIn(node: Node, array: Node[]) {
+    let response = false;
+    if (node != undefined && this.arrayUtil.isNotEmpty(array)) {
+      response = array.findIndex(n => n.id === node.id) > -1;
+    }
+    return response;
+  }
+
+  /**
+   * Looks up parent channelGroup for channel via the channel map.
+   *
+   * @param channel
+   */
+  private findChannelGroup(channel: Node) {
+    const channelGroupId = Array.from(this.channels.keys())
+            .find(key => this.isNodeIn(channel, this.channels.get(key)));
+    return this.channelGroups.find(cg => cg.id === channelGroupId);
+  }
+
+  private fireSelectionChanged() {
+    this.onSelectionChanged.emit(this.selectedChannelRows);
+  }
+
+  private setSelectedYChannels(channels: Node[]) {
+    this.selectedYChannels = channels;
+    this.lastYChannelSelection = channels;
+  }
+
+  private setSelectedChannelGroups(channelGroups: Node[]) {
+    this.selectedChannelGroups = channelGroups;
+    this.lastChannelGroupSelection = channelGroups;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer-nav-card/xy-chart-viewer-nav-card.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer-nav-card/xy-chart-viewer-nav-card.component.html
new file mode 100644
index 0000000..01b2142
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer-nav-card/xy-chart-viewer-nav-card.component.html
@@ -0,0 +1,23 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+<div *ngIf="measurement === undefined || channelGroups === undefined || channels === undefined">
+  <div class="alert alert-info" style="margin: 0;">
+    <strong>{{'chartviewer.xy-chart-viewer-nav-card.no-node-selected' | translate}}</strong>
+  </div>
+</div>
+
+<div *ngIf="measurement !== undefined && channelGroups !== undefined && channels !== undefined">
+  <app-xy-chart-viewer [channelGroups]="channelGroups" [channels]="channels"></app-xy-chart-viewer>
+</div>
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer-nav-card/xy-chart-viewer-nav-card.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer-nav-card/xy-chart-viewer-nav-card.component.ts
new file mode 100644
index 0000000..af4d82d
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer-nav-card/xy-chart-viewer-nav-card.component.ts
@@ -0,0 +1,178 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Component, OnInit, OnDestroy } from '@angular/core';
+import { NavigatorService } from 'src/app/navigator/navigator.service';
+import { MDMNotificationService } from 'src/app/core/mdm-notification.service';
+import { Node } from '../../../navigator/node';
+import { TYPE_CHANNEL, TYPE_CHANNELGROUP, TYPE_MEASUREMENT } from '../../model/constants';
+import { Subscription, forkJoin } from 'rxjs';
+import { NodeService } from 'src/app/navigator/node.service';
+import { map, tap } from 'rxjs/operators';
+import { MDMItem } from 'src/app/core/mdm-item';
+import { ChartViewerService } from '../../services/chart-viewer.service';
+
+@Component({
+  selector: 'app-xy-chart-viewer-nav-card',
+  templateUrl: './xy-chart-viewer-nav-card.component.html'
+})
+export class XyChartViewerNavCardComponent implements OnInit, OnDestroy {
+
+  public channels = new Map<string, Node[]>();
+  public channelGroups: Node[];
+  public measurement: Node;
+
+  private selectedNode: Node;
+
+  // Subscriptions
+  private selectedNodeSub: Subscription;
+
+  constructor(
+    private navigatorService: NavigatorService,
+    private notificationService: MDMNotificationService,
+    private nodeService: NodeService,
+    private chartViewerService: ChartViewerService) {}
+
+  ngOnInit() {
+    this.selectedNodeChanged(this.navigatorService.getSelectedNode());
+    this.selectedNodeSub = this.navigatorService.selectedNodeChanged.subscribe(
+      node => this.selectedNodeChanged(node),
+      error => this.notificationService.notifyError('details.mdm-detail-view.cannot-update-node', error)
+    );
+  }
+
+  ngOnDestroy() {
+    this.selectedNodeSub.unsubscribe();
+  }
+
+  /**
+   * Handle node selection in navigation tree.
+   * Loads necessary data for xy chart, if not present:
+   *  - Measurement:
+   *    + Loaded if a channel or channelgroup is selected that is not present.
+   *    + Also loads all channels and channelgroups for that measurement.
+   *  - Channelgroups:
+   *    + Loaded if a measurement is selected/loaded that is not present.
+   *    + Also loads all channels for all newly loaded channelgroups.
+   *  - Channels:
+   *    + Allways loaded if some node is not present.
+   *
+   * @param node the selected node
+   */
+  private selectedNodeChanged(node: Node) {
+    this.selectedNode = node;
+    if (node != undefined) {
+      switch (node.type) {
+        case TYPE_MEASUREMENT:
+          this.selectedMeasurement(node);
+          break;
+        case TYPE_CHANNELGROUP:
+          this.selectedChannelGroup(node);
+          break;
+        case TYPE_CHANNEL:
+          this.selectedChannel(node);
+          break;
+      }
+    }
+  }
+
+  // reload all, if channel is not present yet.
+  private selectedChannel(node: Node) {
+    if (!this.isChannelPresent(node)) {
+      this.loadMeasurement(node);
+    } else {
+      this.chartViewerService.sendNodeMeta(this.selectedNode);
+    }
+  }
+
+  private selectedChannelGroup(node: Node) {
+    if (!this.isChannelGroupPresent(node)) {
+      this.loadMeasurement(node);
+    } else {
+      this.chartViewerService.sendNodeMeta(this.selectedNode);
+    }
+  }
+
+  private selectedMeasurement(node: Node) {
+    if (this.measurement == undefined || this.measurement.id !== node.id) {
+      this.measurement = node;
+      this.loadChannelGroups(node);
+    } else {
+      this.chartViewerService.sendNodeMeta(this.selectedNode);
+    }
+  }
+
+  private isChannelPresent(node: Node) {
+    if (this.channels != undefined) {
+      /**
+       * @TODO more readable code, but got the impression that performance is bad. Read up on performance topic in depth.
+       */
+      // Array.from(this.channels.values())
+      //       .reduce((a,b) => a.concat(b), [])
+      //       .findIndex(c => c.id === node.id);
+      let index = -1;
+      const iterator = this.channels.values();
+      let res = iterator.next();
+      while (index === -1 && !res.done) {
+        index = res.value.findIndex(c => c.id === node.id);
+        res = iterator.next();
+      }
+      return index > -1;
+    }
+    return false;
+  }
+
+  private isChannelGroupPresent(node: Node) {
+    if (this.channelGroups != undefined) {
+      return this.channelGroups.findIndex(channelGroup => channelGroup.id === node.id) > -1;
+    }
+    return false;
+  }
+
+  private loadMeasurement(node: Node) {
+    this.searchNodes(node, TYPE_MEASUREMENT)
+      .pipe(
+        /** @TODO in general true? */
+        // parent measurement must be distinct
+        map(measurements => measurements[0]),
+      ).subscribe(measurement => {
+        this.measurement = measurement;
+        this.loadChannelGroups(this.measurement);
+      });
+  }
+
+  private loadChannelGroups(measurement: Node) {
+    this.searchNodes(measurement, TYPE_CHANNELGROUP)
+        .subscribe(channelGroups => {
+          this.channelGroups = channelGroups;
+          if (this.channelGroups != undefined) {
+            this.loadChannels(channelGroups);
+          }
+        });
+  }
+
+  private loadChannels(channelGroups: Node[]) {
+    this.channels.clear();
+    let obsArray = channelGroups.map(channelGroup => this.searchNodes(channelGroup, TYPE_CHANNEL));
+    forkJoin(obsArray).pipe(
+        tap(array => array.forEach((channels, index) => this.channels.set(channelGroups[index].id, channels)))
+      ).subscribe(datasets => this.chartViewerService.sendNodeMeta(this.selectedNode));
+  }
+
+  private searchNodes(node: Node, targetType: string) {
+    const filter = 'filter=' + node.type + '.Id eq \"' + node.id + '\"';
+    return this.nodeService.searchNodes(filter, node.sourceName, targetType);
+  }
+
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer-toolbar/xy-chart-viewer-toolbar.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer-toolbar/xy-chart-viewer-toolbar.component.html
new file mode 100644
index 0000000..9264220
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer-toolbar/xy-chart-viewer-toolbar.component.html
@@ -0,0 +1,97 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+<div class="p-col-12 thin" >
+  <!-- ChannelSelection -->
+  <p-toggleButton
+    [(ngModel)]="properties.showSelection"
+    [onIcon]="'fa fa-columns'"
+    offIcon="fa fa-square-o"
+    onLabel=""
+    offLabel=""
+    (onChange)="onChangeProperty($event)"
+    title="{{(properties.showSelection ? 'chartviewer.xy-chart-viewer-toolbar.hide-data-selection-panel' : 'chartviewer.xy-chart-viewer-toolbar.show-data-selection-panel')| translate }}">
+  </p-toggleButton>
+  <!-- X/Y-mode -->
+  <p-toggleButton
+    [(ngModel)]="xyMode"
+    [onIcon]="'fa fa-filter'"
+    offIcon="fa fa-filter"
+    onLabel=""
+    offLabel=""
+    (onChange)="onToggleXyMode($event)"
+    title="{{(xyMode ? 'chartviewer.xy-chart-viewer-toolbar.deactivate-xy-mode' : 'chartviewer.xy-chart-viewer-toolbar.activate-xy-mode')| translate }}">
+  </p-toggleButton>
+  <span style="width:12px; display:inline-block;"></span>
+  <!-- Legend -->
+  <p-toggleButton
+    [onIcon]="'fa fa-map'"
+    offIcon="fa fa-map-o"
+    onLabel=""
+    offLabel=""
+    [(ngModel)]="properties.options.legend.display"
+    (onChange)="onChangeProperty($event)"
+    title="{{(properties?.options?.legend?.display ? 'chartviewer.xy-chart-viewer-toolbar.hide-chart-legend' : 'chartviewer.xy-chart-viewer-toolbar.show-chart-legend')| translate }}">
+  </p-toggleButton>
+  <!-- Linewidth -->
+  <p-spinner
+    [(ngModel)]="properties.lineWidth"
+    [min]="0.25"
+    [step]="0.25"
+    size="1"
+    (onChange)="onChangeProperty($event)"
+    title="{{'chartviewer.xy-chart-viewer-toolbar.line-width' | translate }}">
+  </p-spinner>
+  <!-- draw lines -->
+  <p-toggleButton
+    [onIcon]="'fa fa-line-chart'"
+    offIcon="fa fa-line-chart"
+    onLabel=""
+    offLabel=""
+    [(ngModel)]="properties.showLines"
+    (onChange)="onToggleShowLines($event)"
+    title="{{(properties.showLines ? 'chartviewer.xy-chart-viewer-toolbar.hide-lines' : 'chartviewer.xy-chart-viewer-toolbar.show-lines')| translate }}">
+  </p-toggleButton>
+  <!-- fill area -->
+  <p-toggleButton
+    [onIcon]="'fa fa-area-chart'"
+    offIcon="fa fa-area-chart"
+    onLabel=""
+    offLabel=""
+    [(ngModel)]="properties.fillArea"
+    (onChange)="onChangeProperty($event)"
+    [disabled]="!properties.showLines"
+    title="{{(properties.fillArea ? 'chartviewer.xy-chart-viewer-toolbar.clear-area' : 'chartviewer.xy-chart-viewer-toolbar.fill-area')| translate }}">
+  </p-toggleButton>
+  <!-- Datapoints -->
+  <p-toggleButton
+    title="Show Datapoints"
+    [onIcon]="'fa fa-share-alt'"
+    offIcon="fa fa-share-alt"
+    onLabel=""
+    offLabel=""
+    [(ngModel)]="properties.drawPoints"
+    (onChange)="onChangeProperty($event)"
+    title="{{(properties.drawPoints ? 'chartviewer.xy-chart-viewer-toolbar.hide-datapoints' : 'chartviewer.xy-chart-viewer-toolbar.show-datapoints'| translate) }}">
+  </p-toggleButton>
+  <!-- tension -->
+  <p-spinner
+    size="1"
+    [(ngModel)]="properties.lineTension"
+    [min]="0"
+    [step]="0.1"
+    [max]="1"
+    (onChange)="onChangeProperty($event)"
+    title="{{'chartviewer.xy-chart-viewer-toolbar.tension' | translate }}">
+  </p-spinner>
+</div>
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer-toolbar/xy-chart-viewer-toolbar.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer-toolbar/xy-chart-viewer-toolbar.component.ts
new file mode 100644
index 0000000..b22f402
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer-toolbar/xy-chart-viewer-toolbar.component.ts
@@ -0,0 +1,82 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
+import { ChartToolbarProperties } from '../../model/chartviewer.model';
+
+@Component({
+  selector: 'mdm5-xy-chart-viewer-toolbar',
+  templateUrl: './xy-chart-viewer-toolbar.component.html',
+  styleUrls: ['../../chart-viewer.style.css']
+})
+export class XyChartViewerToolbarComponent implements OnInit {
+
+  @Output()
+  public xyModeChanged = new EventEmitter<boolean>();
+  @Output()
+  public toolbarPropertiesChanged = new EventEmitter<ChartToolbarProperties>();
+
+  // if true, x- and y-channels have to be channels with axisType 'X_AXIS', or 'Y_AXIS' respectively.
+  // change xy requires reloading of select options. Thus requires own event.
+  public xyMode = true;
+  // holds actual properties
+  public properties = new ChartToolbarProperties();
+  // model for showlines.
+  public showLegend = true;
+
+  constructor() { }
+
+  ngOnInit() {
+
+    /** properties for cahrt elements */
+
+    // if true, shows pannel with channel(-group) selection
+    this.properties.showSelection = true;
+    // if true, draws datapoints
+    this.properties.drawPoints = false;
+    // the charts borderwidth (width of lines, border for points)
+    this.properties.lineWidth = 1;
+    // if true, draws lines connecting datapoints
+    this.properties.showLines = true;
+    // if true, fills are below graph
+    this.properties.fillArea = false;
+    // the interpolation degree. 0 = linear, 0.4 = Bezier
+    this.properties.lineTension = 0;
+
+    // /** properties directly passed to cahrt options */
+    // if legend.display true, shows chart legend
+    this.properties.options = {legend: {display: true}};
+
+    // emit to send initial properties to chart viewer
+    this.xyModeChanged.emit(this.xyMode);
+    this.toolbarPropertiesChanged.emit(this.properties);
+  }
+
+  // X- and y-axis options are determined by channels axis type, if xyMode toggled to true
+  public onToggleXyMode(event: Event) {
+    this.xyModeChanged.emit(this.xyMode);
+  }
+
+  public onChangeProperty(event: Event) {
+    this.toolbarPropertiesChanged.emit(this.properties);
+  }
+
+  // displays/hides lines connecting data points
+  public onToggleShowLines(event: Event) {
+    if (!this.properties.showLines) {
+      this.properties.fillArea = false;
+    }
+    this.toolbarPropertiesChanged.emit(this.properties);
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer/xy-chart-viewer.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer/xy-chart-viewer.component.html
new file mode 100644
index 0000000..7273cff
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer/xy-chart-viewer.component.html
@@ -0,0 +1,42 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+<div class="p-grid toolbar">
+  <mdm5-xy-chart-viewer-toolbar #toolbar
+    (xyModeChanged)="onXyModeChanged($event)"
+    (toolbarPropertiesChanged)="onToolbarPropertiesChanged($event)">
+  </mdm5-xy-chart-viewer-toolbar>
+</div>
+
+<!-- View area -->
+<div class="p-grid nested-grid">
+  <!-- Axis selection -->
+  <div [ngClass]="showSelection ? 'p-col-3' : 'hidden'">
+    <mdm5-xy-chart-data-selection-panel
+      [channelGroups]="channelGroups"
+      [channels]="channels"
+      [xyMode]="xyMode"
+      (onSelectionChanged)="onDataSelectionChanged($event)"
+    ></mdm5-xy-chart-data-selection-panel>
+  </div>
+  <!-- Chart / Table -->
+  <div [ngClass]="showSelection ? 'p-col-9' : 'p-col-12'">
+    <p-chart #xyChart type="scatter" [data]="data"></p-chart>
+  </div>
+</div>
+<div class="p-grid">
+  <div class="p-col-12">
+    <mdm5-request-options [channelGroups]="channelGroups" (onRequestOptionsChanged)="onRequestOptionsChanged($event)"></mdm5-request-options>
+  </div>
+</div>
+
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer/xy-chart-viewer.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer/xy-chart-viewer.component.ts
new file mode 100644
index 0000000..549a418
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer/xy-chart-viewer.component.ts
@@ -0,0 +1,220 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Component, OnInit, Input, ViewChild } from '@angular/core';
+
+import { UIChart } from 'primeng/chart';
+import { map, flatMap, tap } from 'rxjs/operators';
+
+import { Node } from '../../../navigator/node';
+
+import { ChartData, ChartDataSet, MeasuredValues, RequestOptions, ChannelSelectionRow,
+         ChartXyDataSet, ChartToolbarProperties} from '../../model/chartviewer.model';
+import { ChartViewerDataService } from '../../services/chart-viewer-data.service';
+import { ArrayUtilService } from 'src/app/core/services/array-util.service';
+import { ChartViewerService } from '../../services/chart-viewer.service';
+import { forkJoin} from 'rxjs';
+import { MDMNotificationService } from 'src/app/core/mdm-notification.service';
+
+@Component({
+  selector: 'app-xy-chart-viewer',
+  templateUrl: './xy-chart-viewer.component.html',
+  styleUrls: ['../../chart-viewer.style.css']
+})
+export class XyChartViewerComponent implements OnInit {
+
+  @ViewChild('xyChart')
+  public chart: UIChart;
+
+  @Input()
+  public channelGroups: Node[];
+  @Input()
+  public channels: Map<string, Node[]>;
+
+  // the chart data
+  public data: ChartData;
+
+  // options for meausred value data request
+  private requestOptions: RequestOptions;
+  // chart properties set via toolbar
+  private toolbarProperties: ChartToolbarProperties;
+  // shows selection pannel if true, set via toolbar
+  public showSelection: boolean;
+  // passed to selection pannel
+  public xyMode: boolean;
+
+  public selectedChannelRows: ChannelSelectionRow[] = [];
+
+  constructor(private chartviewerDataService: ChartViewerDataService,
+              private chartviewerService: ChartViewerService,
+              private arrayUtil: ArrayUtilService,
+              private notificationService: MDMNotificationService) { }
+
+  ngOnInit() {
+    this.initChartData();
+  }
+
+  /**************** Html-template listeners *****************************/
+
+  /**
+   * Draws chart when data selection changes
+   * @param rows
+   */
+  public onDataSelectionChanged(rows: ChannelSelectionRow[]) {
+    this.selectedChannelRows = rows;
+    this.doChart();
+  }
+
+  /**
+   * Passes xyModeChanges from toolbar to selection pannel
+   * @param isXyMode
+   */
+  public onXyModeChanged(isXyMode: boolean) {
+    this.xyMode = isXyMode;
+  }
+
+  /**
+   * Handles toolbar property changes
+   * @param properties
+   */
+  public onToolbarPropertiesChanged(properties: ChartToolbarProperties) {
+    this.toolbarProperties = properties;
+    this.showSelection = properties.showSelection;
+    this.chart.options = properties.options;
+    if (this.chart.data != undefined) {
+      this.chart.data.datasets.forEach( dataSet => {
+        dataSet.showLine = properties.showLines;
+        dataSet.pointRadius = properties.drawPoints ? 3 : 0;
+        dataSet.borderWidth = properties.lineWidth;
+        dataSet.lineTension = properties.lineTension;
+        dataSet.fill = properties.fillArea;
+      });
+      this.chart.reinit();
+    }
+  }
+
+  // Sets new data request options and redraws the graph
+  public onRequestOptionsChanged(options: RequestOptions) {
+    this.requestOptions = options;
+    this.doChart();
+  }
+
+  /********** private methods / class logic ********************************************************/
+
+  // empty chart on initialization
+  private initChartData() {
+    const dataset = new ChartDataSet('No data', []);
+    dataset.borderColor = '#fff';
+    this.data = new ChartData([], [dataset]);
+  }
+
+  /**
+   * Loads measured values for current selection and draws the new chart.
+   */
+  private doChart() {
+    if (this.arrayUtil.isNotEmpty(this.selectedChannelRows) && this.requestOptions != undefined) {
+      const xChannels = this.selectedChannelRows.filter(row => row.xChannel != undefined)
+        .map(row => this.chartviewerDataService.loadMeasuredValues(
+          row.channelGroup, [row.xChannel], this.requestOptions.startIndex, this.requestOptions.requestSize));
+      forkJoin(xChannels)
+        .pipe(
+          map(array => array.map((mea, index) => ({yChannel: this.selectedChannelRows[index].yChannel, measuredValues: mea[0]}))),
+          flatMap(xValues => this.loadYData(xValues)),
+          tap(x => console.log(x))
+        )
+      .subscribe(resp => this.applyData(resp));
+    } else {
+      this.initChartData();
+    }
+  }
+
+  /**
+   * Apply the ChartData to data and options attributes of the chart component
+   * @param xValues
+   */
+  private applyData(resp: ChartData) {
+    this.data = resp;
+    this.chart.options = {
+      scales: {
+        xAxes: [{
+          scaleLabel: {
+            display: true,
+            labelString: resp.datasets.map(ds => (<ChartXyDataSet> ds).xUnit).join(', ')
+          }
+        }],
+      },
+    };
+  }
+
+  /**
+   * Loads measured values for y-channels, merges them with given values for x
+   * @param xValues
+   */
+  private loadYData(xValues: {yChannel: Node; measuredValues: MeasuredValues}[]) {
+    if (xValues != undefined) {
+      const yChannels = this.groupYChannelsByChannelGroup(this.selectedChannelRows);
+      // const channelGroups = this.selectedChannelGroups.filter(cg => this.arrayUtil.isNotEmpty(yChannels[cg.id]));
+      const channelGroups = Array.from(new Set(this.selectedChannelRows.map(row => row.channelGroup)));
+
+      const obs = channelGroups.map(cg => this.chartviewerDataService.loadMeasuredValues(
+        cg, yChannels[cg.id], this.requestOptions.startIndex, this.requestOptions.requestSize));
+      // forkJoin return observables in order of input array. Therefore channelgroup id has to be like tmpChannelGroups[index].id
+      return forkJoin(obs)
+        .pipe(
+          map(array => array.map((yData, channelGroupIndex) =>
+              yData.map((yValues, yChannelIndex) => {
+                const cgId = channelGroups[channelGroupIndex].id;
+                const xMeasuredValues = this.extractXMeasuredValues(xValues, yChannels[cgId][yChannelIndex].id);
+                const dataSet = this.chartviewerService.toXyDataSet(xMeasuredValues, yValues);
+                return this.setChartProperties(dataSet);
+              }))),
+          map(sets => new ChartData([], sets.reduce((a, b) => a.concat(b), [])))
+        );
+    }
+  }
+
+  private extractXMeasuredValues(xValues: {yChannel: Node; measuredValues: MeasuredValues}[], channelId: string) {
+    const val = xValues.find(v => v.yChannel.id === channelId);
+    if (val != undefined ) {
+      return val.measuredValues;
+    }
+  }
+
+  /******* Helping functions */
+
+  private groupYChannelsByChannelGroup(array: ChannelSelectionRow[]) {
+    return array.reduce(
+      (obj, next) => {
+        const value = next.channelGroup.id;
+        obj[value] = obj[value] || [];
+        obj[value] = obj[value].concat(next.yChannel);
+        return obj;
+      }, {});
+  }
+
+  private setChartProperties(dataset: ChartXyDataSet) {
+    if (!this.toolbarProperties.drawPoints) {
+      dataset.pointRadius = 0;
+    }
+    dataset.showLine = this.toolbarProperties.showLines;
+    dataset.fill = this.toolbarProperties.fillArea;
+    dataset.lineTension = this.toolbarProperties.lineTension;
+    dataset.borderWidth = this.toolbarProperties.lineWidth;
+    const color = '#' + Math.random().toString(16).substr(-6);
+    dataset.borderColor = color;
+    dataset.backgroundColor = color;
+
+    return dataset;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/chartviewer.model.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/chartviewer.model.ts
new file mode 100644
index 0000000..82089da
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/chartviewer.model.ts
@@ -0,0 +1,31 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+export { BooleanArray } from './types/boolean-array.class';
+export { DateArray } from './types/date-array.class';
+export { NumberArray } from './types/number-array.class';
+export { MeasuredValues } from './types/measured-values.class';
+export { MeasuredValuesResponse } from './types/measured-values-response.class';
+export { PreviewValueList } from './types/preview-value-list.class';
+export { ChartData } from './types/chart-data.class';
+export { ChartDataSet } from './types/chart-data-set.class';
+export { ChartXyDataSet } from './types/chart-xy-data-set.class';
+export { ChartPoint } from './types/chart-point.class';
+export { RequestOptions } from './types/request-options.class';
+export { ChannelSelectionRow } from './types/channel-selection-row';
+export { ChartToolbarProperties } from './types/chart-toolbar-properties.class';
+
+
+export { PrimeChartDataSet } from './primeNgHelper/prime-chart-data-set.interface';
+export { PrimeChartData } from './primeNgHelper/prime-chart-data.interface';
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/constants.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/constants.ts
new file mode 100644
index 0000000..84c8b5b
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/constants.ts
@@ -0,0 +1,4 @@
+// entity types
+export const TYPE_CHANNEL = 'Channel';
+export const TYPE_CHANNELGROUP = 'ChannelGroup';
+export const TYPE_MEASUREMENT = 'Measurement';
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/primeNgHelper/prime-chart-data-set.interface.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/primeNgHelper/prime-chart-data-set.interface.ts
new file mode 100644
index 0000000..2ab3947
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/primeNgHelper/prime-chart-data-set.interface.ts
@@ -0,0 +1,18 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+export interface PrimeChartDataSet {
+  label: string;
+  data: any[];
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/primeNgHelper/prime-chart-data.interface.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/primeNgHelper/prime-chart-data.interface.ts
new file mode 100644
index 0000000..d2a1d96
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/primeNgHelper/prime-chart-data.interface.ts
@@ -0,0 +1,19 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+import { PrimeChartDataSet } from './prime-chart-data-set.interface';
+
+export interface PrimeChartData {
+  labels: any[];
+  datasets: PrimeChartDataSet[];
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/boolean-array.class.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/boolean-array.class.ts
new file mode 100644
index 0000000..a55de67
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/boolean-array.class.ts
@@ -0,0 +1,17 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+export class BooleanArray {
+  values: boolean[];
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/channel-selection-row.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/channel-selection-row.ts
new file mode 100644
index 0000000..23f0072
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/channel-selection-row.ts
@@ -0,0 +1,26 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+import {Node} from '../../../navigator/node';
+
+export class ChannelSelectionRow {
+  channelGroup: Node;
+  xChannel: Node;
+  yChannel: Node;
+
+  constructor(channelGroup: Node, yChannel: Node, xChannel?: Node) {
+    this.channelGroup = channelGroup;
+    this.yChannel = yChannel;
+    this.xChannel = xChannel;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/chart-data-set.class.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/chart-data-set.class.ts
new file mode 100644
index 0000000..616a91e
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/chart-data-set.class.ts
@@ -0,0 +1,36 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+import { PrimeChartDataSet } from '../chartviewer.model';
+import { Node } from '../../../navigator/node';
+import { MeasuredValues } from './measured-values.class';
+
+export class ChartDataSet implements PrimeChartDataSet {
+  label: string;
+  data: any[];
+  hidden?: boolean;
+  fill?: boolean;
+  measuredValues?: MeasuredValues;
+  channel?: Node;
+  backgroundColor?: string;
+  borderColor?: string;
+  pointBackgroundColor?: string;
+  pointBorderColor?: string;
+  pointHoverBackgroundColor?: string;
+  pointHoverBorderColor?: string;
+
+  constructor (label: string, data: any[]) {
+    this.label = label;
+    this.data = data;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/chart-data.class.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/chart-data.class.ts
new file mode 100644
index 0000000..fc5c2ee
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/chart-data.class.ts
@@ -0,0 +1,26 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+import { PrimeChartData } from '../primeNgHelper/prime-chart-data.interface';
+import { ChartDataSet } from './chart-data-set.class';
+import { ChartXyDataSet } from './chart-xy-data-set.class';
+
+export class ChartData implements PrimeChartData {
+  labels: any[];
+  datasets: (ChartDataSet | ChartXyDataSet)[];
+
+  constructor(labels: any[], datasets: (ChartDataSet | ChartXyDataSet)[]) {
+    this.labels = labels;
+    this.datasets = datasets;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/chart-point.class.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/chart-point.class.ts
new file mode 100644
index 0000000..22e36fe
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/chart-point.class.ts
@@ -0,0 +1,23 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+export class ChartPoint {
+  x: number;
+  y: number;
+
+  constructor (x: number, y: number) {
+    this.x = x;
+    this.y = y;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/chart-toolbar-properties.class.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/chart-toolbar-properties.class.ts
new file mode 100644
index 0000000..454d718
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/chart-toolbar-properties.class.ts
@@ -0,0 +1,31 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+export class ChartToolbarProperties {
+
+  // if true, shows pannel with channel(-group) selection
+  public showSelection: boolean;
+  // if true, draws datapoints
+  public drawPoints: boolean;
+  // the charts borderwidth (width of lines, border for points)
+  public lineWidth: number;
+  // if true, draws lines connecting datapoints
+  public showLines: boolean;
+  // if true, fills are below graph
+  public fillArea: boolean;
+  // the interpolation degree. 0 = linear, 0.4 = Bezier
+  public lineTension: number;
+
+  public options: {legend: {display: boolean}};
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/chart-xy-data-set.class.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/chart-xy-data-set.class.ts
new file mode 100644
index 0000000..23da9aa
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/chart-xy-data-set.class.ts
@@ -0,0 +1,54 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+import { Node } from '../../../navigator/node';
+import { MeasuredValues } from './measured-values.class';
+import { ChartPoint } from './chart-point.class';
+import { PrimeChartDataSet } from '../chartviewer.model';
+
+export class ChartXyDataSet implements PrimeChartDataSet {
+  // mandatory
+  label: string;
+  data: ChartPoint[];
+
+  xUnit?: string;
+  yUnit?: string;
+
+  // remove?
+  hidden?: boolean;
+  measuredValues?: MeasuredValues;
+  channel?: Node;
+
+  // point styles
+  pointBackgroundColor?: string;
+  pointBorderColor?: string;
+  pointHoverBackgroundColor?: string;
+  pointHoverBorderColor?: string;
+  pointRadius: number;
+  pointHoverRadius?: number;
+
+  // line styles
+  borderWidth: number;
+  fill: boolean;
+  borderColor: string;
+  lineTension: number;
+  showLine: boolean;
+
+  // general
+  backgroundColor?: string;
+
+  constructor (label: string, data: ChartPoint[]) {
+    this.label = label;
+    this.data = data;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/date-array.class.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/date-array.class.ts
new file mode 100644
index 0000000..4f13aee
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/date-array.class.ts
@@ -0,0 +1,18 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+export class DateArray {
+  // @Type(() => Date)
+  values: string[];
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/measured-values-response.class.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/measured-values-response.class.ts
new file mode 100644
index 0000000..915b12a
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/measured-values-response.class.ts
@@ -0,0 +1,19 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { MeasuredValues } from './measured-values.class';
+
+export class MeasuredValuesResponse {
+  values: MeasuredValues[];
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/measured-values.class.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/measured-values.class.ts
new file mode 100644
index 0000000..672cb1a
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/measured-values.class.ts
@@ -0,0 +1,54 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { NumberArray } from './number-array.class';
+import { BooleanArray } from './boolean-array.class';
+import { DateArray } from './date-array.class';
+
+export class MeasuredValues {
+  name: string;
+  unit: string;
+  length: number;
+  independent: boolean;
+  axisType: string;
+  scalarType: string;
+  // stringArray: StringArray;
+  dateArray: DateArray;
+  booleanArray: BooleanArray;
+  // byteArray: ByteArray;
+  shortArray: NumberArray;
+  integerArray: NumberArray;
+  longArray: NumberArray;
+  floatArray: NumberArray;
+  doubleArray: NumberArray;
+  // byteStreamArray: ByteStreamArray;
+  // floatComplexArrray: FloatComplexArray;
+  // doubleComplexArrray: DoubleComplexArray;
+  flags: boolean[];
+  getDataArray() {
+    if (this.scalarType === 'INTEGER') {
+      return this.integerArray;
+    } else if (this.scalarType === 'FLOAT') {
+      return this.floatArray;
+    } else if (this.scalarType === 'DOUBLE') {
+      return this.doubleArray;
+    } else if (this.scalarType === 'DATE') {
+      return this.dateArray;
+    } else if (this.scalarType === 'SHORT') {
+      return this.shortArray;
+    } else if (this.scalarType === 'BOOLEAN') {
+      return this.booleanArray;
+    }
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/number-array.class.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/number-array.class.ts
new file mode 100644
index 0000000..7c3c310
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/number-array.class.ts
@@ -0,0 +1,16 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+export class NumberArray {
+  values: number[];
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/preview-value-list.class.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/preview-value-list.class.ts
new file mode 100644
index 0000000..9a42f12
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/preview-value-list.class.ts
@@ -0,0 +1,21 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { MeasuredValues } from './measured-values.class';
+
+export class PreviewValueList {
+  min: MeasuredValues[];
+  avg: MeasuredValues[];
+  max: MeasuredValues[];
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/request-options.class.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/request-options.class.ts
new file mode 100644
index 0000000..c818e02
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/model/types/request-options.class.ts
@@ -0,0 +1,26 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+export class RequestOptions {
+  requestSize: number;
+  startIndex: number;
+  previewEnabled: boolean;
+  numberOfChunks: number;
+
+  constructor(requestSize: number, startIndex: number, previewEnabled: boolean, numberOfChunks: number) {
+    this.requestSize = requestSize;
+    this.startIndex = startIndex;
+    this.previewEnabled = previewEnabled;
+    this.numberOfChunks = numberOfChunks;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/services/chart-viewer-data.service.spec.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/services/chart-viewer-data.service.spec.ts
new file mode 100644
index 0000000..e50383c
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/services/chart-viewer-data.service.spec.ts
@@ -0,0 +1,99 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { TestBed } from '@angular/core/testing';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
+import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
+import { HttpErrorHandler } from '../../core/http-error-handler';
+import { PropertyService } from '../../core/property.service';
+import { Node } from '../../navigator/node';
+import { MeasuredValues, NumberArray, MeasuredValuesResponse } from '../model/chartviewer.model';
+import { ChartViewerDataService } from './chart-viewer-data.service';
+
+
+let timeChannel = new MeasuredValues();
+timeChannel.name = 'time';
+timeChannel.unit = 's';
+timeChannel.length = 5;
+timeChannel.independent = true;
+timeChannel.integerArray = new NumberArray();
+timeChannel.integerArray.values = [1, 2, 3, 4, 5];
+timeChannel.flags = [true, true, true, true, true];
+
+let channel1 = new MeasuredValues();
+channel1.name = 'channel1';
+channel1.unit = 'm';
+channel1.length = 5;
+channel1.independent = true;
+channel1.integerArray = new NumberArray();
+channel1.integerArray.values = [3, 5, 4, 3, 2];
+channel1.flags = [true, true, true, true, true];
+
+export let data = new MeasuredValuesResponse();
+data.values = [channel1, timeChannel];
+
+describe('ChartViewerDataService', () => {
+  let httpTestingController: HttpTestingController;
+  let chartViewerDataService: ChartViewerDataService;
+
+  beforeEach(() => {
+    TestBed.resetTestEnvironment();
+    TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
+    TestBed.configureTestingModule({
+      imports: [ HttpClientTestingModule ],
+      providers: [ChartViewerDataService, HttpErrorHandler, PropertyService]
+    });
+
+    httpTestingController = TestBed.get(HttpTestingController);
+    chartViewerDataService = TestBed.get(ChartViewerDataService);
+  });
+
+  it('can read values', () => {
+    let node = new Node();
+    node.sourceName = 'MDM';
+    node.id = '1';
+
+    chartViewerDataService.loadMeasuredValues(node, [node])
+      .subscribe(channelGroups => expect(channelGroups).toEqual(data.values));
+
+    const req = httpTestingController.expectOne('/org.eclipse.mdm.nucleus/mdm/environments/MDM/values/read');
+    expect(req.request.method).toEqual('POST');
+    req.flush(data);
+
+    // Finally, assert that there are no outstanding requests.
+    httpTestingController.verify();
+  });
+
+  it('can filter on data', () => {
+    let node = new Node();
+    node.sourceName = 'MDM';
+    node.id = '1';
+
+    chartViewerDataService.loadMeasuredValues(node, [node])
+      .subscribe(channelGroups => expect(channelGroups.filter(c => c.name === 'time')).toEqual([timeChannel]));
+
+    const req = httpTestingController.expectOne('/org.eclipse.mdm.nucleus/mdm/environments/MDM/values/read');
+    expect(req.request.method).toEqual('POST');
+    req.flush(data);
+
+    // Finally, assert that there are no outstanding requests.
+    httpTestingController.verify();
+  });
+
+
+  afterEach(() => {
+    // After every test, assert that there are no more pending requests.
+    httpTestingController.verify();
+  });
+});
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/services/chart-viewer-data.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/services/chart-viewer-data.service.ts
new file mode 100644
index 0000000..7773a30
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/services/chart-viewer-data.service.ts
@@ -0,0 +1,146 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+
+import { plainToClass } from 'class-transformer';
+import { map, tap, catchError } from 'rxjs/operators';
+
+import { HttpErrorHandler } from '../../core/http-error-handler';
+import { PropertyService } from '../../core/property.service';
+import { Node } from '../../navigator/node';
+import { MeasuredValuesResponse, MeasuredValues, PreviewValueList } from '../model/chartviewer.model';
+
+export function getDataArray(m: MeasuredValues) {
+  if (m.scalarType === 'INTEGER') {
+    return m.integerArray;
+  } else if (m.scalarType === 'FLOAT') {
+    return m.floatArray;
+  } else if (m.scalarType === 'DOUBLE') {
+    return m.doubleArray;
+  } else if (m.scalarType === 'DATE') {
+    return m.dateArray;
+  } else if (m.scalarType === 'SHORT') {
+    return m.shortArray;
+  } else if (m.scalarType === 'BOOLEAN') {
+    return m.booleanArray;
+  }
+}
+
+@Injectable({
+  providedIn: 'root'
+})
+export class ChartViewerDataService {
+  private _contextUrl: string;
+
+  private httpOptions = {
+    headers: new HttpHeaders({
+      'Content-Type': 'application/json',
+      'Accept': 'application/json'
+    })
+  };
+
+  constructor(private http: HttpClient,
+    private httpErrorHandler: HttpErrorHandler,
+    private _prop: PropertyService) {
+    this._contextUrl = _prop.getUrl('mdm/environments');
+  }
+
+  loadMeasuredValues(channelGroup: Node, channels: Node[], startIndex = 0, requestSize = 0) {
+    let readRequest = {
+      'channelGroupId': channelGroup.id,
+      'channelIds': channels.map(channel => channel.id),
+      'start_index': startIndex,
+      'request_size': requestSize,
+      'valuesMode': 'CALCULATED'
+    };
+
+    return this.http.post<MeasuredValuesResponse>(this._contextUrl + '/' + channelGroup.sourceName + '/values/read',
+      readRequest, this.httpOptions)
+      .pipe(
+        map(res => plainToClass(MeasuredValues, res.values)),
+        map(measurementValues => measurementValues.sort((a, b) => a.name.localeCompare(b.name))),
+        // tap(r => console.log(r)),
+        catchError(this.httpErrorHandler.handleError)
+      );
+  }
+
+  loadPreviewValues(channelGroup: Node, channels: Node[], chunks: number, startIndex = 0, requestSize = 0) {
+    let readRequest = {
+      'channelGroupId': channelGroup.id,
+      'channelIds': channels.map(channel => channel.id),
+      'start_index': startIndex,
+      'request_size': requestSize,
+      'valuesMode': 'CALCULATED'
+    };
+    let previewRequest = {
+      'numberOfChunks': chunks,
+      'readRequest': readRequest
+    };
+
+    return this.http.post<PreviewValueList>(this._contextUrl + '/' + channelGroup.sourceName + '/values/preview',
+      previewRequest, this.httpOptions)
+      .pipe(
+        map(res => plainToClass(MeasuredValues, res.avg)),
+        // tap(r => console.log(r)),
+        catchError(this.httpErrorHandler.handleError)
+      );
+  }
+
+  // readMeasuredValuesMetadata(channelGroup: Node, channels: Node[]) {
+  //   let readRequest = {
+  //     'channelGroupId': channelGroup.id,
+  //     'channelIds': channels.map(channel => channel.id),
+  //     'valuesMode': 'CALCULATED'
+  //   };
+
+  //   return this.http.post<MeasuredValuesResponse>(this._contextUrl + '/' + channelGroup.sourceName + '/values/read',
+  //     readRequest, this.httpOptions)
+  //     .pipe(
+  //       map(res => plainToClass(MeasuredValues, res.values)),
+  //       map(measurementValues => measurementValues.sort((a, b) => a.name.localeCompare(b.name))),
+  //       tap(r => console.log(r)));
+  // }
+
+  /**
+   * @Todo workarround to get axis type. This schould be possible without accessign data. Requires RESTAPI changes.
+   */
+  readAxisType(channelGroup: Node) {
+    let readRequest = {
+      'channelGroupId': channelGroup.id,
+      'start_index': 0,
+      'request_size': 1,
+      'valuesMode': 'CALCULATED'
+    };
+
+    return this.http.post<MeasuredValuesResponse>(this._contextUrl + '/' + channelGroup.sourceName + '/values/read',
+    readRequest, this.httpOptions)
+    .pipe(
+      map(res => plainToClass(MeasuredValues, res.values)),
+      map(measurementValues => measurementValues.sort((a, b) => a.name.localeCompare(b.name))),
+      // tap(r => console.log(r))
+    );
+  }
+
+  getNumberOfRows(channelGroup: Node) {
+    let attr = channelGroup.attributes.find(a => a.name === 'SubMatrixNoRows');
+    if (attr === undefined) {
+      // TODO
+      console.log('Could not find attribute SubMatrixNoRows on ChannelGroup with id ' + channelGroup.id);
+      return;
+    }
+    return parseInt(<string> attr.value, 10);
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/services/chart-viewer.service.spec.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/services/chart-viewer.service.spec.ts
new file mode 100644
index 0000000..b187abc
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/services/chart-viewer.service.spec.ts
@@ -0,0 +1,12 @@
+import { TestBed } from '@angular/core/testing';
+
+import { ChartViewerService } from './chart-viewer.service';
+
+describe('ChartViewerService', () => {
+  beforeEach(() => TestBed.configureTestingModule({}));
+
+  it('should be created', () => {
+    const service: ChartViewerService = TestBed.get(ChartViewerService);
+    expect(service).toBeTruthy();
+  });
+});
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/services/chart-viewer.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/services/chart-viewer.service.ts
new file mode 100644
index 0000000..7e0587d
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/services/chart-viewer.service.ts
@@ -0,0 +1,42 @@
+import { Injectable } from '@angular/core';
+import { Node } from '../../navigator/node';
+import { Subject } from 'rxjs';
+import { MeasuredValues, ChartData, ChartXyDataSet, ChartPoint } from '../model/chartviewer.model';
+import { getDataArray } from './chart-viewer-data.service';
+import { zip } from 'rxjs/operators';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class ChartViewerService {
+
+  private nodeMetaSubject = new Subject<Node>();
+
+  constructor() {}
+
+  public sendNodeMeta(nodeMeta: Node) {
+    this.nodeMetaSubject.next(nodeMeta);
+  }
+
+  public onNodeMetaChange() {
+    return this.nodeMetaSubject.asObservable();
+  }
+
+  public toXyDataSet(xData: MeasuredValues, yData: MeasuredValues) {
+    const xValues = xData.getDataArray().values as number[];
+    const yValues = getDataArray(yData).values as number[];
+    const points = this.getDataPoints(xValues, yValues);
+    const dataset = new ChartXyDataSet(yData.name + ' [' + yData.unit + ']', points);
+    dataset.xUnit = xData.unit;
+    dataset.yUnit = yData.unit;
+    return dataset;
+  }
+
+  private getDataPoints(xData: number[], yData: number[], startIndex = 0) {
+    if (xData != undefined && xData.length <= yData.length) {
+      return xData.map((x, i) => new ChartPoint(x, yData[i]));
+    } else if (xData != undefined && xData.length > yData.length) {
+      return yData.map((y, i) => new ChartPoint(xData[i], y));
+    }
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/services/dummy.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/services/dummy.service.ts
new file mode 100644
index 0000000..731c6ac
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/chartviewer/services/dummy.service.ts
@@ -0,0 +1,66 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Injectable } from '@angular/core';
+import { Observable } from 'rxjs';
+import { Node } from '../../navigator/node';
+import { MeasuredValues, MeasuredValuesResponse, NumberArray } from '../model/chartviewer.model';
+
+let timeChannel = new MeasuredValues();
+timeChannel.name = 'time';
+timeChannel.unit = 's';
+timeChannel.length = 5;
+timeChannel.independent = true;
+timeChannel.scalarType = 'INTEGER';
+timeChannel.integerArray = new NumberArray();
+timeChannel.integerArray.values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
+timeChannel.flags = [true, true, true, true, true, true, true, true, true, true];
+
+let channel1 = new MeasuredValues();
+channel1.name = 'channel1';
+channel1.unit = 'm';
+channel1.length = 5;
+channel1.independent = true;
+channel1.scalarType = 'INTEGER';
+channel1.integerArray = new NumberArray();
+channel1.integerArray.values = [3, 5, 4, 3, 2, 5, 1, 1, 7, 2];
+channel1.flags = [true, true, true, true, true, true, true, true, true, true];
+
+let data = new MeasuredValuesResponse();
+data.values = [timeChannel, channel1];
+
+@Injectable({
+  providedIn: 'root'
+})
+export class DummyChartviewerService {
+
+  constructor() {
+  }
+
+  loadMeasuredValues(channelGroup: Node, channels: Node[], startIndex = 0, requestSize = 0) {
+    data.values[0].length = requestSize;
+    data.values[0].integerArray.values = Array.from(Array(requestSize).keys()).map((v, i) => startIndex + i);
+    data.values[0].flags = data.values[0].integerArray.values.map(v => true);
+
+    data.values[1].length = requestSize;
+    data.values[1].integerArray.values = data.values[0].integerArray.values.map(v => Math.random() * 10);
+    data.values[1].flags = data.values[1].integerArray.values.map(v => true);
+
+    return Observable.of(data.values);
+  }
+
+  readMeasuredValuesMetadata(channelGroup: Node, channels: Node[]) {
+    return Observable.of(data.values);
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/core/http-error-handler.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/core/http-error-handler.ts
new file mode 100644
index 0000000..b9639be
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/core/http-error-handler.ts
@@ -0,0 +1,44 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Injectable } from '@angular/core';
+import { Response } from '@angular/http';
+import { isDevMode } from '@angular/core';
+
+import {throwError as observableThrowError } from 'rxjs';
+
+@Injectable()
+export class HttpErrorHandler {
+
+  handleError(error: Response | any) {
+      let errMsg: string;
+      if (error instanceof Response) {
+        try {
+          const body = error.json() || '';
+          const err = body.error || JSON.stringify(body);
+          errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
+        } catch (e) {
+          if (isDevMode()) {
+            errMsg = `${error.status} - ${error.statusText || ''} ${error.text()}`;
+          } else {
+            errMsg = `Please contact the administrator. Status code: ${error.status} - ${error.statusText || ''}`;
+          }
+        }
+      } else {
+        errMsg = error.message ? error.message : error.toString();
+      }
+      return observableThrowError(errMsg);
+    }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/core/mdm-core.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/core/mdm-core.module.ts
new file mode 100644
index 0000000..bf5dbe5
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/core/mdm-core.module.ts
@@ -0,0 +1,119 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { HttpModule } from '@angular/http';
+import { HttpClientModule, HttpClient } from '@angular/common/http';
+import { FormsModule } from '@angular/forms';
+
+import { ModalModule } from 'ngx-bootstrap';
+import { TypeaheadModule } from 'ngx-bootstrap';
+import { DatepickerModule } from 'ngx-bootstrap';
+import { AccordionModule } from 'ngx-bootstrap';
+import { TabsModule } from 'ngx-bootstrap/tabs';
+import { PositioningService } from 'ngx-bootstrap/positioning';
+import { ComponentLoaderFactory } from 'ngx-bootstrap/component-loader';
+import { BsDropdownModule } from 'ngx-bootstrap';
+
+import { TreeModule, DataTableModule, SharedModule, ContextMenuModule } from 'primeng/primeng';
+import { GrowlModule, DropdownModule, MultiSelectModule, CalendarModule } from 'primeng/primeng';
+
+import { PropertyService } from './property.service';
+import { PreferenceService } from './preference.service';
+
+import { MDMNotificationComponent } from './mdm-notification.component';
+import { OverwriteDialogComponent } from './overwrite-dialog.component';
+
+import { AttributeValuePipe } from '../navigator/attribute-value.pipe';
+
+import { MDMDataSourceTranslationPipe } from '../localization/mdmdatasourcetranslation.pipe';
+
+import { TranslateModule, TranslateService } from '@ngx-translate/core';
+
+import { Observable } from 'rxjs/Observable';
+import { startWith, switchMap } from 'rxjs/operators';
+import { OnlyNumberDirective } from './only-number-directive';
+
+// Marker function for ngx-translate-extract:
+export function TRANSLATE(str: string) {
+  return str;
+}
+
+export function streamTranslate(translateService: TranslateService, keys: string | Array<string>, params?: any): Observable<any> {
+  return translateService.onLangChange.pipe( startWith({}),
+      switchMap(() => params ? translateService.get(keys, params) : translateService.get(keys)) );
+}
+
+@NgModule({
+  imports: [
+    HttpModule,
+    FormsModule,
+    CommonModule,
+    ModalModule,
+    TabsModule.forRoot(),
+    TypeaheadModule.forRoot(),
+    DatepickerModule.forRoot(),
+    TreeModule,
+    DataTableModule,
+    SharedModule,
+    ContextMenuModule,
+    DropdownModule,
+    MultiSelectModule,
+    GrowlModule,
+    AccordionModule.forRoot(),
+    BsDropdownModule.forRoot(),
+    HttpClientModule,
+    TranslateModule.forChild(),
+  ],
+  declarations: [
+    MDMNotificationComponent,
+    OverwriteDialogComponent,
+    MDMDataSourceTranslationPipe,
+    OnlyNumberDirective,
+    AttributeValuePipe
+  ],
+  exports: [
+    CommonModule,
+    FormsModule,
+    ModalModule,
+    DropdownModule,
+    MultiSelectModule,
+    CalendarModule,
+    TreeModule,
+    DataTableModule,
+    SharedModule,
+    ContextMenuModule,
+    GrowlModule,
+    AccordionModule,
+    BsDropdownModule,
+    TypeaheadModule,
+    DatepickerModule,
+    MDMNotificationComponent,
+    OverwriteDialogComponent,
+    TranslateModule,
+    MDMDataSourceTranslationPipe,
+    AttributeValuePipe,
+    OnlyNumberDirective,
+  ],
+  providers: [
+      PositioningService,
+      ComponentLoaderFactory,
+      PropertyService,
+      PreferenceService
+    ]
+})
+export class MDMCoreModule {
+
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/core/mdm-error-handler.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/core/mdm-error-handler.ts
new file mode 100644
index 0000000..ee85fd3
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/core/mdm-error-handler.ts
@@ -0,0 +1,44 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { ErrorHandler, Injectable, OnInit } from '@angular/core';
+import { MDMNotificationService } from './mdm-notification.service';
+
+import { TranslateService } from '@ngx-translate/core';
+import { streamTranslate, TRANSLATE } from '../core/mdm-core.module';
+
+@Injectable()
+export class MDMErrorHandler extends ErrorHandler implements OnInit {
+
+  msgsError: string = 'Application Error$An application error has occurred.'
+    + ' For a detailed error message please open your browser\'s developer console.';
+
+  constructor(private notificationService: MDMNotificationService,
+              private translateService: TranslateService) {
+    super();
+  }
+
+  ngOnInit() {
+    streamTranslate(this.translateService, TRANSLATE('core.mdm-error-handler.strings-error-message')).subscribe(
+            (msg: string) => this.msgsError = msg);
+  }
+
+  handleError(error) {
+    this.notificationService.notifyError(this.msgsError.split('$')[0],
+      this.msgsError.split('$')[1]);
+
+    super.handleError(error);
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/core/mdm-item.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/core/mdm-item.ts
new file mode 100644
index 0000000..30f0688
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/core/mdm-item.ts
@@ -0,0 +1,36 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Node} from '../navigator/node';
+
+export class MDMItem {
+  source: string;
+  type: string;
+  id: string;
+
+  constructor(source: string, type: string, id: string) {
+    this.source = source;
+    this.type = type;
+    this.id = id;
+  }
+
+  equalsNode(node: Node) {
+    return this.source === node.sourceName && this.type === node.type && this.id === node.id;
+  }
+
+  equals(item: MDMItem) {
+    return this.source === item.source && this.type === item.type && this.id === item.id;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/core/mdm-notification.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/core/mdm-notification.component.ts
new file mode 100644
index 0000000..2ee0f69
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/core/mdm-notification.component.ts
@@ -0,0 +1,43 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Component, OnInit, OnDestroy } from '@angular/core';
+import { Message } from 'primeng/primeng';
+import { MDMNotificationService } from './mdm-notification.service';
+import { Subscription } from 'rxjs';
+
+@Component({
+  selector: 'mdm-notifications',
+  template: '<p-growl [value]="msgs" sticky="true"></p-growl>'
+})
+export class MDMNotificationComponent implements OnInit, OnDestroy {
+  msgs: Message[] = [];
+  subscription: Subscription;
+
+  constructor(private notificationsService: MDMNotificationService) { }
+
+  ngOnInit() {
+    this.subscribeToNotifications();
+  }
+
+  subscribeToNotifications() {
+    this.subscription = this.notificationsService.notificationChange
+      .subscribe(notification => this.msgs.push(notification));
+  }
+
+  ngOnDestroy() {
+    this.subscription.unsubscribe();
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/core/mdm-notification.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/core/mdm-notification.service.ts
new file mode 100644
index 0000000..678d835
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/core/mdm-notification.service.ts
@@ -0,0 +1,44 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Injectable, EventEmitter } from '@angular/core';
+import { Message } from 'primeng/primeng';
+
+type Severities = 'success' | 'info' | 'warn' | 'error';
+
+@Injectable()
+export class MDMNotificationService {
+  notificationChange = new EventEmitter<Message>();
+
+  notify(severity: Severities, summary: string, detail: any) {
+    this.notificationChange.emit({ severity, summary, detail });
+  }
+
+  notifyError(summary: string, detail: any) {
+    this.notify('error', summary, detail);
+  }
+
+  notifyWarn(summary: string, detail: any) {
+    this.notify('warn', summary, detail );
+  }
+
+  notifyInfo(summary: string, detail: any) {
+    this.notify('info', summary, detail);
+  }
+
+  notifySuccess(summary: string, detail: any) {
+    this.notify('success', summary, detail);
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/core/only-number-directive.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/core/only-number-directive.ts
new file mode 100644
index 0000000..74872fe
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/core/only-number-directive.ts
@@ -0,0 +1,19 @@
+import { Directive, ElementRef, HostListener, Input } from '@angular/core';
+import { NgControl } from '@angular/forms';
+
+@Directive({
+  selector: '[numbersOnly]'
+})
+export class OnlyNumberDirective {
+
+  constructor(private _el: ElementRef) { }
+
+  @HostListener('input', ['$event']) onInputChange(event) {
+    const initalValue = this._el.nativeElement.value;
+
+    this._el.nativeElement.value = initalValue.replace(/[^0-9]*/g, '');
+    if ( initalValue !== this._el.nativeElement.value) {
+      event.stopPropagation();
+    }
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/core/overwrite-dialog.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/core/overwrite-dialog.component.html
new file mode 100644
index 0000000..64bea5d
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/core/overwrite-dialog.component.html
@@ -0,0 +1,35 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+<div bsModal #lgOverwriteModal="bs-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="SelectSearchComponents" aria-hidden="true">
+  <div class="modal-dialog modal-sm">
+    <div class="modal-content">
+      <div class="modal-header">
+        <h4 class="modal-title">{{ 'core.overwrite-dialog.label-with-this-name-already-exists' | translate:label }}</h4>
+      </div>
+      <div class="modal-body">
+        <div class="row">
+          <div class="col-md-12">
+            <button type="button" class="btn btn-default" (click)="overwrite(false)">
+            <span class="fa fa-times"></span> {{ 'core.overwrite-dialog.btn-cancel' | translate }}
+          </button>
+            <button type="button" class="btn btn-default pull-right" (click)="overwrite(true)">
+            <span class="fa fa-check"></span>  {{ 'core.overwrite-dialog.btn-overwrite' | translate }}
+          </button>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/core/overwrite-dialog.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/core/overwrite-dialog.component.ts
new file mode 100644
index 0000000..8ae8fb3
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/core/overwrite-dialog.component.ts
@@ -0,0 +1,43 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Component, ViewChild, EventEmitter} from '@angular/core';
+import { ModalDirective } from 'ngx-bootstrap';
+
+@Component({
+  selector: 'overwrite-dialog',
+  templateUrl: 'overwrite-dialog.component.html'
+})
+export class OverwriteDialogComponent {
+
+  label: Object;
+  overwriteEvent = new EventEmitter<boolean>();
+
+  @ViewChild('lgOverwriteModal')
+  childOverwriteModal: ModalDirective;
+
+  constructor () {}
+
+  showOverwriteModal(label: string) {
+    this.label = {'label': label};
+    this.childOverwriteModal.show();
+    return this.overwriteEvent;
+  }
+
+  overwrite(b: boolean) {
+    this.childOverwriteModal.hide();
+    this.overwriteEvent.emit(b);
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/core/preference.service.spec.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/core/preference.service.spec.ts
new file mode 100644
index 0000000..c1da2c2
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/core/preference.service.spec.ts
@@ -0,0 +1,103 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { async, TestBed, inject } from '@angular/core/testing';
+import { BaseRequestOptions, Http, HttpModule, Response, ResponseOptions, RequestMethod } from '@angular/http';
+import { MockBackend } from '@angular/http/testing';
+
+import { PreferenceService, Preference, Scope } from './preference.service';
+import { PropertyService } from './property.service';
+import { HttpErrorHandler } from '../core/http-error-handler';
+
+describe('PreferenceService', () => {
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      imports: [HttpModule],
+      providers: [
+        PropertyService,
+        PreferenceService,
+        MockBackend,
+        BaseRequestOptions,
+        HttpErrorHandler,
+        {
+          provide: Http,
+          useFactory: (mockBackend, options) => {
+            return new Http(mockBackend, options);
+          },
+          deps: [MockBackend, BaseRequestOptions]
+        }
+      ]
+    });
+  });
+
+
+  describe('getPreference()', () => {
+    it('should return preferences', async(inject([PreferenceService, MockBackend], (prefService, mockBackend) => {
+
+      mockBackend.connections.subscribe(conn => {
+
+        let mockResponse = {
+          preferences: [
+          {
+            id: 2,
+            key: 'preference.prefix.',
+            scope: Scope.SYSTEM,
+            source: null,
+            user: null,
+            value: 'Test'
+          }
+        ]};
+        conn.mockRespond(new Response(new ResponseOptions({ body: mockResponse })));
+      });
+
+      prefService.getPreference(Scope.SYSTEM, 'preference.prefix.').subscribe(prefs => {
+        expect(prefs.length).toBe(1);
+        expect(prefs[0].scope).toBe(Scope.SYSTEM);
+        expect(prefs[0].value).toBe('Test');
+      });
+    })));
+
+    it('should return empty array if no preferences were found',
+        async(inject([PreferenceService, MockBackend], (prefService, mockBackend) => {
+
+      mockBackend.connections.subscribe(conn => {
+        conn.mockRespond(new Response(new ResponseOptions({ body: { preferences: [] } })));
+      });
+
+      prefService.getPreference(Scope.SYSTEM, 'preference.prefix.').subscribe(prefs => {
+        expect(prefs.length).toBe(0);
+      });
+    })));
+  });
+
+  describe('savePreference()', () => {
+    it('should post preference', async(inject([PreferenceService, MockBackend], (prefService, mockBackend) => {
+
+      mockBackend.connections.subscribe(conn => {
+        if (conn.request.url.endsWith('/preference') && conn.request.method === RequestMethod.Put) {
+          conn.mockRespond(new Response(new ResponseOptions({ body: { preferences: [] } })));
+        }
+      });
+      let newPref = new Preference();
+      newPref.scope = Scope.SYSTEM;
+      newPref.key = 'prefix.';
+      newPref.value = 'testValue';
+
+      prefService.savePreference(newPref).subscribe(prefs => {
+        expect(prefs).toBeDefined();
+      });
+    })));
+  });
+});
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/core/preference.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/core/preference.service.ts
new file mode 100644
index 0000000..9610ac1
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/core/preference.service.ts
@@ -0,0 +1,118 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Injectable } from '@angular/core';
+import { Http, Response, Headers, RequestOptions } from '@angular/http';
+
+import { PropertyService } from './property.service';
+
+import { plainToClass } from 'class-transformer';
+import { HttpErrorHandler } from './http-error-handler';
+import { throwError as observableThrowError,  Observable } from 'rxjs';
+import { mergeMap, map, catchError } from 'rxjs/operators';
+
+export class Scope {
+   public static readonly SYSTEM = 'SYSTEM';
+   public static readonly SOURCE = 'SOURCE';
+   public static readonly USER = 'USER';
+
+   static toLabel(scope: string) {
+     return scope.charAt(0).toUpperCase() + scope.slice(1).toLowerCase();
+   }
+}
+
+export class Preference {
+  scope: string;
+  source?: string;
+  user?: string;
+  key: string;
+  value: string;
+  id: number;
+
+  static sortByScope(p1: Preference, p2: Preference) {
+    let getPriority = (scope: string) => {
+      switch (scope) {
+        case Scope.SYSTEM: return 1;
+        case Scope.SOURCE: return 2;
+        case Scope.USER: return 3;
+        default: return 4;
+      }
+    };
+    return getPriority(p1.scope) - getPriority(p2.scope);
+  }
+
+  constructor() {
+      this.key = '';
+  }
+}
+
+@Injectable()
+export class PreferenceService {
+
+  private prefEndpoint: string;
+
+  constructor(private http: Http,
+              private httpErrorHandler: HttpErrorHandler,
+              private _prop: PropertyService) {
+    this.prefEndpoint = _prop.getUrl('mdm/preferences');
+  }
+
+  getPreferenceForScope(scope: string, key?: string): Observable<Preference[]> {
+      if (key == null) {
+          key = '';
+      }
+
+      return this.http.get(this.prefEndpoint + '?scope=' + scope + '&key=' + key).pipe(
+          map(response => plainToClass(Preference, response.json().preferences)),
+          catchError(this.handleError));
+  }
+
+  getPreference(key?: string) {
+      if (key == null) {
+          key = '';
+      }
+      return this.http.get(this.prefEndpoint + '?key=' + key).pipe(
+          map(response => plainToClass(Preference, response.json().preferences)),
+          catchError(this.handleError));
+  }
+
+  savePreference(preference: Preference) {
+    let headers = new Headers({ 'Content-Type': 'application/json' });
+    let options = new RequestOptions({ headers: headers });
+
+    return this.http.put(this.prefEndpoint, JSON.stringify(preference), options).pipe(
+      catchError(this.handleError));
+  }
+
+  deletePreference(id: number) {
+    return this.http.delete(this.prefEndpoint + '/' + id).pipe(
+      catchError(this.handleError));
+  }
+
+  deletePreferenceByScopeAndKey(scope: string, key: string) {
+    return this.getPreferenceForScope(scope, key).pipe(mergeMap(p => this.deletePreference(p[0].id)));
+  }
+
+  private handleError(e: Error | any) {
+    if (e instanceof Response) {
+      let response = <Response> e;
+      if (response.status !== 200) {
+        return observableThrowError('Could not request preferences! '
+          + 'Please check if application server is running and preference database is configured correctly.');
+      }
+    }
+    return this.httpErrorHandler.handleError(e);
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/core/property.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/core/property.service.ts
new file mode 100644
index 0000000..4865f11
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/core/property.service.ts
@@ -0,0 +1,33 @@
+// ********************************************************************************
+// * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+// *
+// * See the NOTICE file(s) distributed with this work for additional
+// * information regarding copyright ownership.
+// *
+// * This program and the accompanying materials are made available under the
+// * terms of the Eclipse Public License v. 2.0 which is available at
+// * http://www.eclipse.org/legal/epl-2.0.
+// *
+// * SPDX-License-Identifier: EPL-2.0
+// *
+// ********************************************************************************
+
+import { Injectable } from '@angular/core';
+import { environment } from '../../environments/environment';
+
+@Injectable()
+export class PropertyService {
+  data_host = 'http://sa:sa@localhost:9090/';
+
+  getDataHost(): string {
+      return this.data_host;
+  }
+
+  getUrl(restUrl: string): string {
+    if (environment.apiUrl) {
+      return environment.apiUrl + restUrl;
+    } else {
+      return restUrl;
+    }
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/core/services/array-util.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/core/services/array-util.service.ts
new file mode 100644
index 0000000..d0b42b6
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/core/services/array-util.service.ts
@@ -0,0 +1,13 @@
+import { Injectable } from '@angular/core';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class ArrayUtilService {
+
+  constructor() { }
+
+  public isNotEmpty(array: any[]) {
+    return array != undefined && array.length > 0;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/attribute-editor/attribute-editor.component.css b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/attribute-editor/attribute-editor.component.css
new file mode 100644
index 0000000..03e0f0c
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/attribute-editor/attribute-editor.component.css
@@ -0,0 +1,15 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+.attreditor {width: 80%;}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/attribute-editor/attribute-editor.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/attribute-editor/attribute-editor.component.html
new file mode 100644
index 0000000..43121f7
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/attribute-editor/attribute-editor.component.html
@@ -0,0 +1,33 @@
+<!--******************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ *******************************************************************************-->
+
+ <div [ngSwitch]="attribute?.dataType">
+    <input *ngSwitchCase="'STRING'" pInputText type="text" [(ngModel)]="attribute.value[ident.contextGroup]" class="attreditor">
+    <input *ngSwitchCase="'FLOAT'" pInputText type="number" [(ngModel)]="attribute.value[ident.contextGroup]" class="attreditor">
+    <input *ngSwitchCase="'SHORT'" pInputText type="number" [(ngModel)]="attribute.value[ident.contextGroup]" class="attreditor">
+    <input *ngSwitchCase="'LONG'" pInputText type="number" [(ngModel)]="attribute.value[ident.contextGroup]" class="attreditor">
+    <input *ngSwitchCase="'LONGLONG'" pInputText type="number" [(ngModel)]="attribute.value[ident.contextGroup]" class="attreditor">
+    <input *ngSwitchCase="'DOUBLE'" pInputText type="number" [(ngModel)]="attribute.value[ident.contextGroup]" class="attreditor">
+    <p-calendar *ngSwitchCase="'DATE'" [locale]="locale" dataType="string" showTime="true" hourFormat="24" dateFormat="{{'details.mdm-detail-descriptive-data.input-dateformat' | translate}}" [(ngModel)]="attribute.value[ident.contextGroup]" class="attreditor" [style]="{'width':'80%'}" [inputStyle]="{'min-width':'0.2em','width':'80%'}"></p-calendar>
+    <input *ngSwitchCase="'BOOLEAN'" pInputText type="checkbox" [(ngModel)]="attribute.value[ident.contextGroup]" class="attreditorbool">
+    <mdm5-file-link-editor *ngSwitchCase="'FILE_LINK'"
+        class="attreditor"
+        [ident]="ident"></mdm5-file-link-editor>
+    <file-link-sequence-editor *ngSwitchCase="'FILE_LINK_SEQUENCE'"
+        class="attreditor"
+        [ident]="ident"
+        [attribute]="attribute" ></file-link-sequence-editor>
+    <div *ngSwitchDefault>{{attribute | attributeValue: ident.contextGroup | async}}</div>
+</div>
+<span *ngIf="attribute?.unit?.length > 0" class="inlinecontent">{{attribute.unit}}</span>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/attribute-editor/attribute-editor.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/attribute-editor/attribute-editor.component.ts
new file mode 100644
index 0000000..53cec5a
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/attribute-editor/attribute-editor.component.ts
@@ -0,0 +1,90 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Component, Input } from '@angular/core';
+import { TranslateService } from '@ngx-translate/core';
+
+import { Attribute } from '@navigator/node';
+import { ContextAttributeIdentifier } from '../../model/details.model';
+
+@Component({
+  selector: 'attribute-editor',
+  templateUrl: './attribute-editor.component.html',
+  styleUrls: ['./attribute-editor.component.css']
+})
+export class AttributeEditorComponent {
+
+  @Input() ident: ContextAttributeIdentifier;
+  @Input() attribute: Attribute;
+
+  locale: any;
+
+  constructor(private translateService: TranslateService) {
+    // calendar localization
+    this.locale = {
+        firstDayOfWeek: 1,
+        dayNames: [this.translateService.instant('details.attribute-editor.cal-sunday'),
+                       this.translateService.instant('details.attribute-editor.cal-monday'),
+                       this.translateService.instant('details.attribute-editor.cal-tuesday'),
+                       this.translateService.instant('details.attribute-editor.cal-wednesday'),
+                       this.translateService.instant('details.attribute-editor.cal-thursday'),
+                       this.translateService.instant('details.attribute-editor.cal-friday'),
+                       this.translateService.instant('details.attribute-editor.cal-saturday')],
+        dayNamesShort: [this.translateService.instant('details.attribute-editor.cal-sun'),
+                            this.translateService.instant('details.attribute-editor.cal-mon'),
+                            this.translateService.instant('details.attribute-editor.cal-tue'),
+                            this.translateService.instant('details.attribute-editor.cal-wed'),
+                            this.translateService.instant('details.attribute-editor.cal-thu'),
+                            this.translateService.instant('details.attribute-editor.cal-fri'),
+                            this.translateService.instant('details.attribute-editor.cal-sat')],
+        dayNamesMin: [this.translateService.instant('details.attribute-editor.cal-su'),
+                          this.translateService.instant('details.attribute-editor.cal-mo'),
+                          this.translateService.instant('details.attribute-editor.cal-tu'),
+                          this.translateService.instant('details.attribute-editor.cal-we'),
+                          this.translateService.instant('details.attribute-editor.cal-th'),
+                          this.translateService.instant('details.attribute-editor.cal-fr'),
+                          this.translateService.instant('details.attribute-editor.cal-sa')],
+        monthNames: [this.translateService.instant('details.attribute-editor.cal-january'),
+                         this.translateService.instant('details.attribute-editor.cal-february'),
+                         this.translateService.instant('details.attribute-editor.cal-march'),
+                         this.translateService.instant('details.attribute-editor.cal-april'),
+                         this.translateService.instant('details.attribute-editor.cal-may'),
+                         this.translateService.instant('details.attribute-editor.cal-june'),
+                         this.translateService.instant('details.attribute-editor.cal-july'),
+                         this.translateService.instant('details.attribute-editor.cal-august'),
+                         this.translateService.instant('details.attribute-editor.cal-september'),
+                         this.translateService.instant('details.attribute-editor.cal-october'),
+                         this.translateService.instant('details.attribute-editor.cal-november'),
+                         this.translateService.instant('details.attribute-editor.cal-december')],
+        monthNamesShort: [this.translateService.instant('details.attribute-editor.cal-jan'),
+                              this.translateService.instant('details.attribute-editor.cal-feb'),
+                              this.translateService.instant('details.attribute-editor.cal-mar'),
+                              this.translateService.instant('details.attribute-editor.cal-apr'),
+                              this.translateService.instant('details.attribute-editor.cal-may'),
+                              this.translateService.instant('details.attribute-editor.cal-jun'),
+                              this.translateService.instant('details.attribute-editor.cal-jul'),
+                              this.translateService.instant('details.attribute-editor.cal-aug'),
+                              this.translateService.instant('details.attribute-editor.cal-sep'),
+                              this.translateService.instant('details.attribute-editor.cal-oct'),
+                              this.translateService.instant('details.attribute-editor.cal-nov'),
+                              this.translateService.instant('details.attribute-editor.cal-dec')],
+        today: this.translateService.instant('details.attribute-editor.cal-today'),
+        clear: this.translateService.instant('details.attribute-editor.cal-clear'),
+        dateFormat: this.translateService.instant('details.attribute-editor.cal-format'),
+        weekHeader: this.translateService.instant('details.attribute-editor.cal-week')
+    };
+}
+
+}
+
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/attribute-viewer/attribute-viewer.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/attribute-viewer/attribute-viewer.component.html
new file mode 100644
index 0000000..05e62a9
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/attribute-viewer/attribute-viewer.component.html
@@ -0,0 +1,20 @@
+<!--******************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ *******************************************************************************-->
+
+<div [ngSwitch]="attribute?.dataType">
+    <file-attribute-viewer *ngSwitchCase="'FILE_LINK'" [ident]="ident" [attribute]="attribute"></file-attribute-viewer>
+    <file-attribute-viewer *ngSwitchCase="'FILE_LINK_SEQUENCE'" [ident]="ident" [attribute]="attribute"></file-attribute-viewer>
+    <div *ngSwitchDefault>{{attribute | attributeValue: ident.contextGroup | async}}</div>
+</div>
+<span *ngIf="attribute?.unit?.length > 0" class="inlinecontent">{{attribute.unit}}</span>
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/attribute-viewer/attribute-viewer.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/attribute-viewer/attribute-viewer.component.ts
new file mode 100644
index 0000000..6c79bd9
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/attribute-viewer/attribute-viewer.component.ts
@@ -0,0 +1,29 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Component, Input } from '@angular/core';
+
+import { Attribute } from '@navigator/node';
+import { ContextAttributeIdentifier } from '../../model/details.model';
+
+@Component({
+  selector: 'attribute-viewer',
+  templateUrl: './attribute-viewer.component.html'
+})
+export class AttributeViewerComponent {
+
+  @Input() ident: ContextAttributeIdentifier;
+  @Input() attribute: Attribute;
+}
+
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/detail-panel/detail-panel.component.css b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/detail-panel/detail-panel.component.css
new file mode 100644
index 0000000..ac8087b
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/detail-panel/detail-panel.component.css
@@ -0,0 +1,47 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+ /* defines icon and header style in panel */
+.pannel-icon-header {
+    background-repeat: no-repeat;
+    background-position: left center;
+    padding-left: 18px;
+    margin: 0;
+    float: left;
+    vertical-align: middle;
+    font-size: 16px;
+}
+
+/* defines container block for float button */
+.button-block {
+    width: 97%;
+    display: inline-block;
+    vertical-align: middle;
+}
+
+/* overwrite angular default style for thin padding in button header */
+.thin-titlebar >>> .ui-panel-titlebar {
+    padding-top: 0.3em!important;
+    padding-bottom: 0.3em!important;
+}
+
+/* overwrite angular default style for vertical align of toggle icon in button header*/
+.thin-titlebar >>> .ui-panel-titlebar-toggler {
+    margin-top: 0.3em!important;
+}
+
+/** vertical align of header and icon */
+.margin5 {
+    margin: 5px;
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/detail-panel/detail-panel.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/detail-panel/detail-panel.component.html
new file mode 100644
index 0000000..6d36aa5
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/detail-panel/detail-panel.component.html
@@ -0,0 +1,50 @@
+<!--******************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ *******************************************************************************-->
+
+<p-panel [toggleable]="true" [collapsed]="collapsed" [ngClass]="showButton ? 'thin-titlebar' : ''"
+         toggler="header" expandIcon="fa fa-chevron-right fa-lg" collapseIcon="fa fa-chevron-down fa-lg" >
+  <p-header >
+    <span [ngClass]="showButton ? 'button-block' : ''">
+      <span *ngIf="node" class="pannel-icon-header" [ngClass]="getClass()">
+        {{node.type | mdmdatasourcetranslate}}
+      </span>
+      <span class="btn-group" style="float: right;">
+        <button *ngIf="showButton"
+          type="button"
+          class="btn btn-mdm"
+          (click)="add2Basket()"
+          [disabled]="shoppable"
+          title="{{ 'details.mdm-detail-panel.btn-into-shopping-basket' | translate }}">
+          <span class="fa fa-shopping-cart"></span>
+        </button>
+      </span>
+    </span>
+  </p-header>
+  <table class="table table-hover" style="margin-bottom: 0;">
+    <thead>
+      <tr>
+        <th>{{ 'details.mdm-detail-panel.tblhdr-attribute' | translate }}</th>
+        <th>{{ 'details.mdm-detail-panel.tblhdr-value' | translate }}</th>
+        <th>{{ 'details.mdm-detail-panel.tblhdr-unit' | translate }}</th>
+      </tr>
+    </thead>
+    <tbody *ngIf="node">
+      <tr *ngFor="let attr of displayAttributes">
+        <td>{{attr.name}}</td>
+        <td>{{attr | attributeValue | async}}</td>
+        <td>{{attr.unit}}</td>
+      </tr>
+    </tbody>
+  </table>
+</p-panel>
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/detail-panel/detail-panel.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/detail-panel/detail-panel.component.ts
new file mode 100644
index 0000000..ed4e1c6
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/detail-panel/detail-panel.component.ts
@@ -0,0 +1,72 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';
+
+import { DetailViewService } from '../../services/detail-view.service';
+import { BasketService } from '@basket/basket.service';
+import { Node, Attribute} from '@navigator/node';
+import { MDMItem } from '@core/mdm-item';
+
+@Component({
+  selector: 'mdm-detail-panel',
+  templateUrl: './detail-panel.component.html',
+  styleUrls: ['./detail-panel.component.css']
+})
+export class DetailPanelComponent implements OnChanges {
+
+  // node to display
+  @Input() node: Node;
+  // handles pannel expansion state
+  @Input() collapsed: boolean;
+  // handles shopping button disabled state
+  @Input() shoppable = false;
+  // handles shopping button visible state
+  @Input() showButton = false;
+
+  // attributes of display node
+  displayAttributes: Attribute[];
+
+  constructor(
+    private detailViewService: DetailViewService,
+    private basketService: BasketService) { }
+
+  // change detection for display node
+  ngOnChanges(changes: SimpleChanges): void {
+    if (changes['node'] && this.node != undefined) {
+      this.refreshAttributes(this.node);
+    }
+  }
+
+  // refresh display attributes
+  private refreshAttributes(node: Node) {
+    if (node != undefined) {
+      this.displayAttributes = this.detailViewService.getAttributesToDisplay(this.node);
+    }
+  }
+
+  // button listener for shopping button
+  public add2Basket() {
+    if (this.node != undefined) {
+      this.basketService.add(new MDMItem(this.node.sourceName, this.node.type, this.node.id));
+    }
+  }
+
+  // provides style class for panel header (+ icon)
+  public getClass() {
+    let style = this.showButton ? 'margin5 ' : '';
+    return style + this.node.getClass();
+  }
+}
+
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail-descriptive-data/mdm-detail-descriptive-data.component.css b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail-descriptive-data/mdm-detail-descriptive-data.component.css
new file mode 100644
index 0000000..9b0c5b0
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail-descriptive-data/mdm-detail-descriptive-data.component.css
@@ -0,0 +1,37 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+.btn-col {
+    width: 50px;
+}
+
+p-treetable >>> .ui-treetable-caption {
+  padding: .25em .5em!important;
+  text-align: right!important;
+}
+
+.toggler {
+  width: 19px;
+  height: 19px;
+  color: #6c757d;
+  margin: 0 8px 0 8px;
+}
+
+.clickable {
+  cursor: pointer;
+}
+
+.mdm-attribute-row.clickable.readOnly {
+  background-color: rgba(211, 211, 211, 0.5);
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail-descriptive-data/mdm-detail-descriptive-data.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail-descriptive-data/mdm-detail-descriptive-data.component.html
new file mode 100644
index 0000000..8109cc7
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail-descriptive-data/mdm-detail-descriptive-data.component.html
@@ -0,0 +1,122 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+
+ <div *ngIf="!contextComponents">
+  <div class="alert alert-info" style="margin: 0;">
+    <strong>{{status | translate}}</strong>
+  </div>
+</div>
+
+<div *ngIf="contextComponents" class="mdm-details-attributes">
+
+  <!-- <button (click)="changeTreeEdit(true, false)" *ngIf="!editMode && canEdit" class="btn btn-mdm" style="margin-bottom: 5px;">
+    <span class="fa fa-pencil"></span>
+    {{ 'details.mdm-detail-descriptive-data.btn-edit' | translate }}
+  </button>
+  <button (click)="changeTreeEdit(false, false)" *ngIf="editMode" class="btn btn-mdm" style="margin-bottom: 5px;">
+    <span class="fa fa-ban"></span>
+    {{ 'details.mdm-detail-descriptive-data.btn-cancel' | translate }}
+  </button>
+  <button (click)="changeTreeEdit(false, true)" *ngIf="editMode" class="btn btn-mdm" style="margin-bottom: 5px;">
+    <span class="fa fa-check"></span>
+    {{ 'details.mdm-detail-descriptive-data.btn-save' | translate }}
+  </button> -->
+
+  <p-treeTable #ttref [value]="treeNodes[contextType]" styleClass="table-hover">
+
+    <ng-template pTemplate="caption">
+      <div (click)="toggleTreeNodeState(ttref)" class="clickable">
+        <button (click)="onEdit($event)"
+          *ngIf="!editMode && canEdit"
+          class="btn btn-mdm"
+          title="{{ 'details.mdm-detail-descriptive-data.btn-edit' | translate }}">
+          <span class="fa fa-pencil"></span>
+        </button>
+        <button (click)="onCancelEdit($event)"
+          *ngIf="editMode"
+          class="btn btn-mdm"
+          title="{{ 'details.mdm-detail-descriptive-data.btn-cancel' | translate }}">
+          <span class="fa fa-ban"></span>
+        </button>
+        <button (click)="onSaveChanges($event)"
+          *ngIf="editMode"
+          class="btn btn-mdm"
+          title="{{ 'details.mdm-detail-descriptive-data.btn-save' | translate }}">
+          <span class="fa fa-check"></span>
+        </button>
+        <span class="fa fa-lg toggler" [ngClass]="isTreeTableExpanded ? 'fa-chevron-down': 'fa-chevron-right'"></span>
+      </div>
+    </ng-template>
+
+    <ng-template pTemplate="header">
+      <tr>
+        <th>{{ 'details.mdm-detail-descriptive-data.tblhdr-name' | translate }}</th>
+        <th>{{ 'details.mdm-detail-descriptive-data.tblhdr-ordered' | translate }}</th>
+        <th>{{ 'details.mdm-detail-descriptive-data.tblhdr-measured' | translate }}</th>
+      </tr>
+    </ng-template>
+
+    <ng-template pTemplate="body" let-rowNode let-rowData="rowData">
+      <tr>
+        <!-- name -->
+        <td class="{{rowData.header ? 'mdm-component-row' : 'mdm-attribute-row'}}">
+          <p-treeTableToggler [rowNode]="rowNode"></p-treeTableToggler>
+          <span pTooltip="{{rowData.attribute != null ? rowData.attribute.description : ''}}" tooltipPosition="bottom">{{rowData.name}}</span>
+        </td>
+
+        <!-- ordered -->
+        <td ttEditableColumn [ttEditableColumnDisabled]="!editMode || rowData?.attribute?.readOnly" class="{{rowData.header ? 'mdm-component-row' : 'mdm-attribute-row'}}"
+        [ngClass]="{'clickable': canEdit && editMode, 'readOnly': rowData?.attribute?.readOnly}">
+          <p-treeTableCellEditor>
+            <ng-template pTemplate="input">
+              <attribute-editor
+                [ident]="getIdentifier(selectedNode, rowNode?.parent?.data?.attribute, rowData?.attribute, contextGroupEnum.ORDERED, contextType)"
+                [attribute]="rowData?.attribute" >
+              </attribute-editor>
+            </ng-template>
+
+            <ng-template pTemplate="output">
+              <attribute-viewer
+                [ident]="getIdentifier(selectedNode, rowNode?.parent?.data?.attribute, rowData?.attribute, contextGroupEnum.ORDERED, contextType)"
+                [attribute]="rowData?.attribute" >
+              </attribute-viewer>
+            </ng-template>
+          </p-treeTableCellEditor>
+        </td>
+
+        <!-- measured -->
+        <td ttEditableColumn [ttEditableColumnDisabled]="!editMode || rowData?.attribute?.readOnly" class="{{rowData.header ? 'mdm-component-row' : 'mdm-attribute-row'}}"
+        [ngClass]="{'clickable': canEdit && editMode, 'readOnly': rowData?.attribute?.readOnly}">
+          <p-treeTableCellEditor>
+            <ng-template pTemplate="input">
+              <span *ngIf="rowData?.attribute?.value?.length == 2">
+                <attribute-editor
+                  [ident]="getIdentifier(selectedNode, rowNode?.parent?.data?.attribute, rowData?.attribute, contextGroupEnum.MEASURED, contextType)"
+                  [attribute]="rowData?.attribute">
+                </attribute-editor>
+              </span>
+            </ng-template>
+            <ng-template pTemplate="output">
+                <attribute-viewer *ngIf="rowData?.attribute?.value?.length == 2"
+                  [ident]="getIdentifier(selectedNode, rowNode?.parent?.data?.attribute, rowData?.attribute, contextGroupEnum.MEASURED, contextType)"
+                  [attribute]="rowData?.attribute">
+                </attribute-viewer>
+            </ng-template>
+          </p-treeTableCellEditor>
+        </td>
+      </tr>
+    </ng-template>
+  </p-treeTable>
+</div>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail-descriptive-data/mdm-detail-descriptive-data.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail-descriptive-data/mdm-detail-descriptive-data.component.ts
new file mode 100644
index 0000000..d64ca38
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail-descriptive-data/mdm-detail-descriptive-data.component.ts
@@ -0,0 +1,563 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Component, OnInit, ChangeDetectorRef } from '@angular/core';
+import { ActivatedRoute } from '@angular/router';
+import { DatePipe } from '@angular/common';
+
+import { TreeNode } from 'primeng/api';
+import { TreeTable } from 'primeng/primeng';
+import { Observable } from 'rxjs';
+import { TranslateService } from '@ngx-translate/core';
+
+import { Node, Attribute, ContextGroup } from '@navigator/node';
+import { NavigatorService } from '@navigator/navigator.service';
+import { MDMNotificationService } from '@core/mdm-notification.service';
+import { TRANSLATE } from '@core/mdm-core.module';
+import { FileService } from '@file-explorer/services/file.service';
+import { FileLinkContextWrapper } from '@file-explorer/model/file-explorer.model';
+import { AuthenticationService } from '../../../authentication/authentication.service';
+
+import { Sensor, Components, Context, ContextAttributeIdentifier} from '../../model/details.model';
+import { ContextService } from '../../services/context.service';
+import { Role } from 'src/app/authentication/authentication.service';
+
+@Component({
+  selector: 'mdm-detail-context',
+  templateUrl: 'mdm-detail-descriptive-data.component.html',
+  styleUrls: ['mdm-detail-descriptive-data.component.css'],
+})
+
+export class MDMDescriptiveDataComponent implements OnInit {
+
+  private readonly StatusLoading = TRANSLATE('details.mdm-detail-descriptive-data.status-loading');
+  private readonly StatusSaving = TRANSLATE('details.mdm-detail-descriptive-data.status-saving');
+  private readonly StatusNoNodes = TRANSLATE('details.mdm-detail-descriptive-data.status-no-nodes-available');
+  private readonly StatusNoDescriptiveData = TRANSLATE('details.mdm-detail-descriptive-data.status-no-descriptive-data-available');
+
+  public treeNodes: {[key: string]: TreeNode[]};
+
+  // this holds the type dependant original context data in case of cancelling the edit mode
+  private tmpTreeNodes: Node[];
+
+  public selectedNode: Node;
+  public contextType: string;
+
+  public contextComponents: Components;
+  public sensors: Sensor[];
+  public status: string;
+
+  // reference to be able to use enum in html template
+  public contextGroupEnum = ContextGroup;
+
+  public editMode: boolean;
+
+  public isTreeTableExpanded = true;
+
+  constructor(private route: ActivatedRoute,
+              private _contextService: ContextService,
+              private navigatorService: NavigatorService,
+              private notificationService: MDMNotificationService,
+              private translateService: TranslateService,
+              private datePipe: DatePipe,
+              private authenticationService: AuthenticationService,
+              private fileService: FileService) {
+  }
+
+  public canEdit: boolean;
+
+  ngOnInit() {
+    this.authenticationService.isUserInRole([Role.Admin.toString(), Role.User.toString()]).subscribe(b => this.canEdit = b);
+    this.status = this.StatusLoading;
+    this.editMode = false;
+
+    this.refreshDetailData(this.navigatorService.getSelectedNode());
+    this.route.params
+      .subscribe(
+        params => this.refreshContextData(params['context']),
+          error => this.notificationService.notifyError(
+            this.translateService.instant('details.mdm-detail-descriptive-data.err-cannot-load-scope'), error));
+
+    // node changed from the navigation tree
+    this.navigatorService.selectedNodeChanged
+        .subscribe(
+          node => this.refreshDetailData(node),
+          error => this.notificationService.notifyError(
+            this.translateService.instant('details.mdm-detail-descriptive-data.err-cannot-load-data'), error));
+
+    // file changed
+    this.fileService.onFileChanged().subscribe(link => this.handleFileChanged(link));
+  }
+
+  handleFileChanged(fileLinkContextWrapper: FileLinkContextWrapper) {
+    if (this.treeNodes != undefined) {
+      this.treeNodes[fileLinkContextWrapper.contextType]
+          .filter(tnode => tnode.label === fileLinkContextWrapper.contextComponent.name)
+          .map(tnode => tnode.children)
+          .reduce((a, b) => a.concat(b), [])
+          .filter(tnode => tnode.data.attribute.name === fileLinkContextWrapper.attribute.name)
+          .forEach(tnode => tnode.data.attribute = fileLinkContextWrapper.attribute);
+      // spread is necessary for treeTable changeDetection
+      this.treeNodes[fileLinkContextWrapper.contextType] = [...
+        this.treeNodes[fileLinkContextWrapper.contextType]];
+    }
+  }
+
+  setContext(context: string) {
+    let contextType: string;
+
+    switch (context) {
+      case 'uut':
+        contextType = 'UNITUNDERTEST';
+        break;
+      case 'te':
+        contextType = 'TESTEQUIPMENT';
+        break;
+      case 'ts':
+        contextType = 'TESTSEQUENCE';
+        break;
+    }
+    this.contextType = contextType;
+  }
+
+  /**
+   * Listener method to change the context tab
+   *
+   * @param contextType
+   */
+  refreshContextData(contextType: string) {
+    // revert before changing the context
+    this.undoEditChanges(undefined, this.editMode);
+    this.setContext(contextType);
+    this.editMode = false;
+  }
+
+  /**
+   * Listener method to change the node
+   *
+   * @param node
+   */
+  refreshDetailData(node: Node) {
+    if (node != undefined) {
+      this.selectedNode = node;
+      this.status = this.StatusLoading;
+      this.editMode = false;
+      this.contextComponents = undefined;
+      this.treeNodes = undefined;
+      if (node.type.toLowerCase() === 'measurement' || node.type.toLowerCase() === 'teststep' || node.type.toLowerCase() === 'test') {
+        this.loadContext(node);
+      } else {
+        this.status = this.StatusNoDescriptiveData;
+      }
+    } else {
+      this.status = this.StatusNoNodes;
+    }
+  }
+
+  /**
+   * Load the context data for the provided node
+   *
+   * @param node
+   */
+  private loadContext(node: Node) {
+    this._contextService.getContext(node).subscribe(
+      components => {
+          if (components['UNITUNDERTEST'] != undefined
+              || components['TESTEQUIPMENT'] != undefined
+              || components['TESTSEQUENCE'] != undefined) {
+                this.contextComponents = components;
+                this.treeNodes = this.mapComponents(components);
+              } else {
+                this.status = this.StatusNoDescriptiveData;
+              }
+        },
+        error => this.notificationService.notifyError(
+          this.translateService.instant('details.mdm-detail-descriptive-data.err-cannot-load-context'), error)
+      );
+  }
+
+  getIdentifier(contextDescribable: Node, contextComponent: Node, attribute: Attribute, contextGroup?: ContextGroup, contextType?: string) {
+    return new ContextAttributeIdentifier(contextDescribable, contextComponent, attribute, contextGroup, contextType);
+  }
+
+  getNodeClass(item: Node) {
+    return 'icon ' + item.type.toLowerCase();
+  }
+
+  /**
+   * Change the tree state to expanded or collapsed
+   *
+   * @param type
+   * @param expand
+   */
+  toggleTreeNodeState(tt: TreeTable) {
+    this.isTreeTableExpanded = !this.isTreeTableExpanded;
+    const nodeArray = this.treeNodes[this.contextType];
+    if (nodeArray != undefined) {
+      for (let node of nodeArray) {
+        this.recursiveChangeNodes(node, this.isTreeTableExpanded);
+      }
+    }
+
+    // invoke table update when pressing the plus or minus buttons from the table header
+    tt.updateSerializedValue();
+    tt.tableService.onUIUpdate(tt.value);
+  }
+
+  /**
+   * Change the tree node state recursively
+   *
+   * @param node
+   * @param expand
+   */
+  recursiveChangeNodes(node: TreeNode, expand: boolean) {
+    node.expanded = expand;
+    if (node.children != undefined && node.children.length > 0) {
+      for (let child of node.children) {
+        this.recursiveChangeNodes(child, expand);
+      }
+    }
+  }
+
+  /**
+   * Get the nodes from the current context
+   *
+   * @param nodes
+   * @param parentId optional parent id which will get the child nodes
+   */
+  getNodes(nodes: Node[], parentId: string) {
+    return nodes.filter(n => this.nodeIsInCurrentContext(n, parentId));
+  }
+
+  nodeIsInCurrentContext(node: Node, parentId: string) {
+    let parentNodeId = node.relations != null && node.relations.length > 0 ? node.relations[0].parentId : null;
+    return parentId == null && parentNodeId == null
+          || parentId != null && parentNodeId != null && parentId === parentNodeId;
+  }
+
+  /**
+   * Create a tree node based on the mdm entity
+   *
+   * @param node
+   * @param context
+   */
+  createTreeNode(node: Node, children: Node[]) {
+    return <TreeNode>{
+      label: node.name,
+      data: {
+        'name': node.name,
+        'attribute': node,
+        'header': true
+      },
+      children: this.createTreeChildren(node, children),
+      icon: this.getNodeClass(node),
+      expanded: true
+    };
+  }
+
+  /**
+   * Create the tree children nodes recursive based on the mdm attributes and subsequent mdm entities
+   *
+   * @param node the current node
+   * @param contexts the complete contexts
+   */
+  createTreeChildren(node: Node, children: Node[]) {
+    let list = [];
+
+    for (let attribute of node.attributes) {
+      let tmp = <TreeNode>{
+        data: {
+          'name': attribute.name,
+          'attribute': this.patchAttributeForDate(attribute),
+          'header': false
+        },
+        expanded: true
+      };
+      list.push(tmp);
+    }
+
+    if (node.relations != null && node.relations.length > 0) {
+      for (let relation of node.relations) {
+        if (relation.ids != null && relation.ids.length > 0) {
+          for (let id of relation.ids) {
+            let nodes = this.getNodes(children, id);
+            for (let n of nodes) {
+              list.push(this.createTreeNode(n, children));
+            }
+          }
+        }
+      }
+    }
+    return list;
+  }
+
+  /**
+   * Method to create a tree structure from the flat context entity and attribute map
+   *
+   * @param components
+   */
+  mapComponents(components: Components) {
+    const list: {[key: string]: TreeNode[]} = {};
+    if (components != undefined ) {
+      for (let key of Object.keys(components)) {
+        const nodes: Node[] = this.getNodes(components[key], null);
+        if (nodes != undefined) {
+          list[key] = nodes.map(node => this.createTreeNode(node, components[key]));
+        }
+      }
+    }
+    return list;
+  }
+
+  /**
+   * Convert the date for UI or backend
+   *
+   * @param attribute
+   */
+  patchAttributeForDate(attribute: Attribute) {
+    if (attribute.dataType != null && attribute.dataType.length > 0 && 'DATE' === attribute.dataType) {
+      const val = attribute.value as any[];
+      if (val != null && val.length > 0) {
+        if (val[0] != null && val[0].length > 0) {
+          val[0] = this.convertFixedDateStr(val[0], true);
+        }
+        if (val.length > 1 && val[1] != null && val[1].length > 0) {
+          val[1] = this.convertFixedDateStr(val[1], true);
+        }
+      }
+    }
+    return attribute;
+  }
+
+  /** *********************
+   * Edit functions start
+   ********************** */
+
+  convertFixedDateStr(dt: string, convertForUI: boolean) {
+    let newDt = dt;
+    let sourceFormat = '';
+
+    /**
+     * Get the translation immediately
+     */
+    sourceFormat = this.translateService.instant('details.mdm-detail-descriptive-data.transform-dateformat');
+
+    if (dt != null && dt.length > 0 && convertForUI && dt.indexOf('T') > -1) {
+      // for display purpose
+      let tmpDt = this.parseISOString(dt);
+      newDt = this.datePipe.transform(tmpDt, sourceFormat, '+0000');
+    } else if (dt != null && dt.length > 0 && !convertForUI && dt.indexOf('T') === -1) {
+      // re-convert UI date to server date for persistence
+      if (newDt.indexOf('-') === -1) {
+        // find the date patterns dd, MM and yyyy and grab the according index positions
+        let startDay = sourceFormat.indexOf('d');
+        let endDay = sourceFormat.lastIndexOf('d');
+        let startMonth = sourceFormat.indexOf('M');
+        let endMonth = sourceFormat.lastIndexOf('M');
+        let startYear = sourceFormat.indexOf('y');
+        let endYear = sourceFormat.lastIndexOf('y');
+        // manually attach the time as toISOString() will not properly transform the winter/summer time
+        newDt = dt.substring(startYear, endYear + 1) + '-' + dt.substring(startMonth, endMonth + 1)
+                  + '-' + dt.substring(startDay, endDay + 1);
+        if (dt.indexOf(' ') > -1) {
+          // use the provided timestamp
+          newDt = newDt + 'T' + dt.substring(dt.indexOf(' ') + 1) + ':00Z';
+        } else {
+          newDt = newDt + 'T00:00:00Z';
+        }
+        if (newDt.length !== 20) {
+          newDt = '';
+        }
+      }
+    }
+    return newDt;
+  }
+
+  /**
+   * Fixed parsing for ISO date string
+   *
+   * @param s
+   */
+  parseISOString(s: string) {
+    let b: any[] = s.split(/\D+/);
+    return new Date(Date.UTC(b[0], --b[1], b[2], b[3], b[4], b[5], b[6]));
+  }
+
+  /**
+   * Send the changed data to the backend
+   *
+   * @param node
+   * @param type
+   */
+  private putContext(node: Node, type: string) {
+    if (type == null) {
+      return;
+    }
+    this.status = this.StatusSaving;
+    this.treeNodes = undefined;
+
+    const data = new Context();
+    data.ordered = new Components();
+    data.ordered[type] = this.getNodesWithUpdatedContent(this.contextComponents[type] as Node[], true);
+
+    data.measured = new Components();
+    data.measured[type] = this.getNodesWithUpdatedContent(this.contextComponents[type] as Node[], false);
+
+    // clear for status display
+    this.contextComponents = undefined;
+
+    this._contextService.putContext(node, data).subscribe(
+      components => {
+        if (components.hasOwnProperty('UNITUNDERTEST')
+          || components.hasOwnProperty('TESTEQUIPMENT')
+          || components.hasOwnProperty('TESTSEQUENCE')) {
+          this.contextComponents = components;
+          this.treeNodes = this.mapComponents(this.contextComponents);
+        } else {
+          this.status = this.StatusNoDescriptiveData;
+        }
+      },
+      error => this.notificationService.notifyError(
+        this.translateService.instant('details.mdm-detail-descriptive-data.err-cannot-load-context'), error)
+    );
+  }
+
+  onEdit(event: Event) {
+    event.stopPropagation();
+    this.editMode = true;
+    this.tmpTreeNodes = JSON.parse(JSON.stringify(this.contextComponents[this.contextType]));
+  }
+
+  onCancelEdit(event: Event) {
+    event.stopPropagation();
+    this.editMode = false;
+    this.isTreeTableExpanded = true;
+    this.undoEditChanges(this.contextType, true);
+  }
+
+  onSaveChanges(event: Event) {
+    event.stopPropagation();
+    this.editMode = false;
+    this.isTreeTableExpanded = true;
+    this.putContext(this.selectedNode, this.contextType);
+    this.tmpTreeNodes = undefined;
+  }
+
+  /**
+   * Method to revert table changes back to the original state
+   *
+   * @param type
+   */
+  undoEditChanges(type: string, editMode: boolean) {
+    this.refreshDetailData(this.navigatorService.getSelectedNode());
+    // if (this.contextComponents != undefined && editMode && this.tmpTreeNodes != undefined) {
+    //   if (type == undefined) {
+    //       type = this.contextType;
+    //   }
+    //   // contexts is the origin, so we revert this back as the tree attributes are just references
+    //   this.contextComponents[type] = this.tmpTreeNodes;
+    //   // revert back
+    //   this.treeNodes = this.mapComponents(this.contextComponents);
+    //   this.tmpTreeNodes = null;
+    // }
+  }
+
+  /**
+   * Get the updated nodes from the current context
+   *
+   * @param contextComponents
+   * @param type the context type
+   * @param ordered true if ordered data, false if measured data
+   */
+  getNodesWithUpdatedContent(contextComponents: Node[], ordered: boolean) {
+    let list = [];
+    for (let component of contextComponents) {
+      let parentNodeId = component.relations != null && component.relations.length > 0 ? component.relations[0].parentId : null;
+      if (parentNodeId == null) {
+        let attrs = [];
+        for (let cAttribute of component.attributes) {
+          let attr = new Attribute();
+          let addAttr = true;
+          attr.dataType = cAttribute.dataType;
+          attr.name = cAttribute.name;
+          attr.unit = cAttribute.unit;
+          attr.value = '';
+
+          if (ordered && cAttribute.value instanceof Array && cAttribute.value.length > 0) {
+            attr.value = cAttribute.value[0];
+          } else if (!ordered && cAttribute.value instanceof Array && cAttribute.value.length > 1) {
+            attr.value = cAttribute.value[1];
+          }
+          // lookup new value from treenodes
+          if (attr.dataType === 'BOOLEAN' && attr.value != null && attr.value.toString().length > 0) {
+            attr.value = attr.value.toString() === 'true' ? '1' : '0';
+          }
+
+          // BUG: don't add if non-string as this throws an parsing error in the middleware
+          if (attr.dataType !== 'STRING' && (attr.value == null || attr.value.toString().length === 0)) {
+            addAttr = false;
+          }
+
+          if (addAttr && attr.dataType === 'DATE') {
+            attr.value = this.convertFixedDateStr(attr.value as string, false);
+          }
+
+          if (addAttr) {
+            if (this.isAttributeValueModified(attr, component, ordered)) {
+              attrs.push(attr);
+            }
+          }
+        }
+        // un-merged list
+        if (attrs.length > 0) {
+          let c = JSON.parse(JSON.stringify(component));
+          c.attributes = attrs;
+          list.push(c);
+        }
+      }
+    }
+    return list;
+  }
+
+  private isAttributeValueModified(attr: Attribute, component: Node, ordered: boolean) {
+    for (let tmpNode of this.tmpTreeNodes) {
+      if (tmpNode.name === component.name) {
+        for (let attribute of tmpNode.attributes) {
+          if (attribute.name === attr.name && attribute.value instanceof Array) {
+            let orgValue = ordered ? attribute.value[0] :
+            attribute.value.length > 1 ? attribute.value[1] : undefined;
+            if (orgValue != undefined) {
+              if (attr.dataType === 'BOOLEAN') {
+                // server value = true or false, UI value = 1 or 0
+                return attr.value === '0' && orgValue === 'true'
+                  || attr.value === '1' && orgValue === 'false'
+                  || attr.value !== '' && orgValue === '';
+              } else {
+                // plain comparison
+                return attr.value !== orgValue;
+              }
+            }
+            return false;
+          }
+        }
+      }
+    }
+  }
+
+  /** *********************
+   * Edit functions end
+   ********************** */
+
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail-view/mdm-detail-view.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail-view/mdm-detail-view.component.html
new file mode 100644
index 0000000..ed12eeb
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail-view/mdm-detail-view.component.html
@@ -0,0 +1,28 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+ <div *ngIf="!selectedNode && !quantity && !unit">
+  <div class="alert alert-info" style="margin: 0;">
+    <strong>{{status | translate}}</strong>
+  </div>
+</div>
+<div *ngIf="selectedNode">
+  <mdm-detail-panel [node]="selectedNode" [shoppable]="shoppable" [showButton]=true></mdm-detail-panel>
+</div>
+<div *ngIf="quantity">
+  <mdm-detail-panel [node]="quantity" [collapsed]=true></mdm-detail-panel>
+</div>
+<div *ngIf="unit">
+  <mdm-detail-panel [node]="unit" [collapsed]=true></mdm-detail-panel>
+</div>
+
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail-view/mdm-detail-view.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail-view/mdm-detail-view.component.ts
new file mode 100644
index 0000000..f8a9f04
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail-view/mdm-detail-view.component.ts
@@ -0,0 +1,107 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+import { Component, OnInit, OnDestroy } from '@angular/core';
+
+import { TranslateService } from '@ngx-translate/core';
+
+import { Node } from '@navigator/node';
+import { NodeService } from '@navigator/node.service';
+import { BasketService } from '@basket/basket.service';
+import { NavigatorService } from '@navigator/navigator.service';
+import { MDMNotificationService } from '@core/mdm-notification.service';
+
+@Component({
+  selector: 'mdm-detail-view',
+  templateUrl: 'mdm-detail-view.component.html'
+})
+export class MDMDetailViewComponent implements OnInit, OnDestroy {
+
+  selectedNode: Node;
+  unit: Node;
+  quantity: Node;
+  subscription: any;
+  shoppable = false;
+
+  public status = 'file-explorer.file-explorer-nav-card.status-no-node-selected';
+
+  constructor(private basketService: BasketService,
+              private navigatorService: NavigatorService,
+              private notificationService: MDMNotificationService,
+              private translateService: TranslateService,
+              private nodeService: NodeService) {}
+
+  ngOnInit() {
+    this.onSelectedNodeChange(this.navigatorService.getSelectedNode());
+    this.subscription = this.navigatorService.selectedNodeChanged.subscribe(
+          node => this.onSelectedNodeChange(node),
+          error => this.notificationService.notifyError(this.translateService.instant('details.mdm-detail-view.cannot-update-node'), error)
+        );
+  }
+
+  ngOnDestroy() {
+    this.subscription.unsubscribe();
+  }
+
+  onSelectedNodeChange(node: Node) {
+    if (node != undefined) {
+      this.selectedNode = node;
+      if (node.type.toLowerCase() === 'channel') {
+        this.loadQuantity(node);
+        this.loadUnit(node);
+      } else {
+        this.quantity = undefined;
+        this.unit = undefined;
+      }
+      this.shoppable = this.isShoppable();
+    }
+  }
+
+  private loadUnit(node: Node) {
+    if (node.relations != undefined) {
+      node.relations
+          .filter(rel => rel.entityType.toLowerCase() === 'unit')
+          .filter(rel => rel.ids.length > 0)
+          .forEach(rel => this.nodeService.getNodeByRelation(node.sourceName, rel.entityType, rel.ids[0])
+                                          .subscribe(res => this.unit = res[0])
+      );
+    }
+  }
+
+  private loadQuantity(node: Node) {
+    if (node.relations != undefined) {
+      node.relations
+          .filter(rel => rel.entityType.toLowerCase() === 'quantity')
+          .filter(rel => rel.ids.length > 0)
+          .forEach(rel => this.nodeService.getNodeByRelation(node.sourceName, rel.entityType, rel.ids[0])
+                                          .subscribe(res => this.quantity = res[0])
+      );
+    }
+  }
+
+  isShoppable() {
+    if (this.selectedNode
+      && this.selectedNode.name != undefined
+      && this.selectedNode.type !== 'Environment'
+      && this.selectedNode.type !== 'Unit'
+      && this.selectedNode.type !== 'Channel') {
+      return false;
+    }
+    return true;
+  }
+
+  isReleasable() {
+    if (this.selectedNode && this.selectedNode.sourceType === 'TestStep') { return false; }
+    return true;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail/mdm-detail.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail/mdm-detail.component.html
new file mode 100644
index 0000000..51c70c9
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail/mdm-detail.component.html
@@ -0,0 +1,36 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+ 
+<style>
+  .detail-nav {
+    color: #e7e7e7;
+    border: 1px solid #c8c8c8;
+  }
+</style>
+
+<nav class="navbar navbar-expand bg-light detail-nav ui-corner-all" *ngIf="isVisible()">
+  <div class="container-fluid">
+    <div class="collapse navbar-collapse" id="bs-mdm-detail-navbar">
+      <ul class="nav navbar-nav mdm-link-list">
+        <li class="nav-item" [routerLinkActive]="['active']"><a class="nav-link" routerLink="general"> {{'details.mdm-detail.general' | translate}}</a></li>
+        <li class="nav-item" [routerLinkActive]="['active']"><a class="nav-link" routerLink="uut"> {{ 'details.mdm-detail.unit-under-test' | translate }}</a></li>
+        <li class="nav-item" [routerLinkActive]="['active']"><a class="nav-link" routerLink="ts"> {{ 'details.mdm-detail.test-sequence' | translate }}</a></li>
+        <li class="nav-item" [routerLinkActive]="['active']"><a class="nav-link" routerLink="te"> {{ 'details.mdm-detail.test-equipment' | translate }}</a></li>
+        <li class="nav-item" [routerLinkActive]="['active']"><a class="nav-link" routerLink="sensors"> {{ 'details.mdm-detail.sensors' | translate }} </a></li>
+      </ul>
+    </div>
+  </div>
+</nav>
+
+<router-outlet></router-outlet>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail/mdm-detail.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail/mdm-detail.component.ts
new file mode 100644
index 0000000..f5cbbb3
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/mdm-detail/mdm-detail.component.ts
@@ -0,0 +1,59 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Component } from '@angular/core';
+import { Router, ActivatedRoute } from '@angular/router';
+
+import { Node } from '@navigator/node';
+import { NavigatorService } from '@navigator/navigator.service';
+
+@Component({
+  selector: 'mdm-detail',
+  templateUrl: 'mdm-detail.component.html',
+  providers: []
+})
+export class MDMDetailComponent {
+
+  visible = false;
+
+  constructor(private route: ActivatedRoute,
+    private router: Router,
+    private navigatorService: NavigatorService) {
+
+    this.refreshVisibility(this.navigatorService.getSelectedNode());
+
+    this.navigatorService.selectedNodeChanged
+      .subscribe(node => this.refreshVisibility(node));
+  }
+
+  refreshVisibility(node: Node) {
+    this.visible = false;
+    if (node != undefined && node.type != undefined && (node.type.toLowerCase() === 'measurement'
+          || node.type.toLowerCase() === 'teststep' || node.type.toLowerCase() === 'test')) {
+       this.visible = true;
+    }
+
+    // check if we are in the general node and if the context tabs are visible
+    if (!this.visible && this.router.url !== '/navigator/details/general') {
+      // redirect to correct router path
+      this.router.navigate(['/navigator/details/general']);
+    }
+  }
+
+  isVisible() {
+    return this.visible;
+  }
+
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/sensor/sensor.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/sensor/sensor.component.html
new file mode 100644
index 0000000..8d1e294
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/sensor/sensor.component.html
@@ -0,0 +1,42 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+<div *ngIf="!sensors">
+  <div class="alert alert-info" style="margin: 0;">
+    <strong>{{ status | translate}}</strong>
+  </div>
+</div>
+<accordion *ngIf="sensors">
+  <accordion-group *ngFor="let node of sensors" #s>
+    <div accordion-heading class="thinheader">{{node.name}}
+      <span class="pull-right fa" [ngClass]="{'fa-chevron-down': s?.isOpen, 'fa-chevron-right': !s?.isOpen}"></span>
+    </div>
+    <table class="table table-hover">
+      <thead>
+        <tr>
+          <th>{{ 'details.sensor.tblhdr-name' | translate }}</th>
+          <th>{{ 'details.sensor.tblhdr-measured' | translate }}</th>
+          <th>{{ 'details.sensor.tblhdr-ordered' | translate }}</th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr *ngFor="let attr of node.attributes" [ngClass]="diff(attr.value[0], attr.value[1])">
+          <td>{{attr.name[0]}}</td>
+          <td>{{attr.value[0]}}</td>
+          <td>{{attr.value[1]}}</td>
+        </tr>
+      </tbody>
+    </table>
+  </accordion-group>
+</accordion>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/sensor/sensor.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/sensor/sensor.component.ts
new file mode 100644
index 0000000..0ce9774
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/components/sensor/sensor.component.ts
@@ -0,0 +1,106 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+import { Component, OnInit } from '@angular/core';
+import { ActivatedRoute } from '@angular/router';
+
+import { TranslateService } from '@ngx-translate/core';
+
+import { Node} from '@navigator/node';
+import { NavigatorService } from '@navigator/navigator.service';
+import { LocalizationService } from '@localization/localization.service';
+import { MDMNotificationService } from '@core/mdm-notification.service';
+import { TRANSLATE } from '@core/mdm-core.module';
+
+import { ContextService } from '../../services/context.service';
+import { Sensor, Context } from '../../model/details.model';
+
+@Component({
+  selector: 'sensors',
+  templateUrl: 'sensor.component.html',
+})
+export class SensorComponent implements OnInit {
+
+  readonly StatusLoading = TRANSLATE('details.sensor.status-loading');
+  readonly StatusNoNodes = TRANSLATE('details.sensor.status-no-nodes-available');
+  readonly StatusNoDescriptiveData = TRANSLATE('details.sensor.status-no-descriptive-data-available');
+
+  selectedNode: Node;
+  context: String;
+
+  _diff = false;
+  contexts: Context[];
+  sensors: Sensor[];
+  errorMessage: string;
+  status: string;
+
+  uut = 'Prüfling';
+  ts = 'Testablauf';
+  te = 'Messgerät';
+  s = 'Sensoren';
+
+  constructor(private route: ActivatedRoute,
+    private localService: LocalizationService,
+              private _contextService: ContextService,
+              private navigatorService: NavigatorService,
+              private notificationService: MDMNotificationService,
+              private translateService: TranslateService) {}
+
+  ngOnInit() {
+    this.status = this.StatusLoading;
+    this.route.params
+        .subscribe(
+          params => this.setContext(params['context']),
+          error => this.notificationService.notifyError(this.translateService.instant('details.sensor.err-cannot-load-scope'), error)
+    );
+
+    this.navigatorService.selectedNodeChanged
+        .subscribe(node => this.loadContext(node),
+        error => this.notificationService.notifyError(this.translateService.instant('details.sensor.err-cannot-load-data'), error)
+    );
+  }
+
+  setContext(context: string) {
+    this.context = context;
+    this.loadContext(this.navigatorService.getSelectedNode());
+  }
+
+  loadContext(node: Node) {
+    if (node != undefined) {
+      this.selectedNode = node;
+      this.contexts = undefined;
+      if (node.name != undefined && (node.type.toLowerCase() === 'measurement' || node.type.toLowerCase() === 'teststep')) {
+        this.status = this.StatusLoading;
+        this._contextService.getSensors(node).subscribe(
+            sensors => this.sensors = <Sensor[]> sensors,
+            error => this.notificationService.notifyError(
+              this.translateService.instant('details.sensor.err-cannot-load-descriptive-data'), error)
+          );
+      } else {
+        this.status = this.StatusNoDescriptiveData;
+      }
+    } else {
+      this.status = this.StatusNoNodes;
+    }
+  }
+
+  diffToggle() {
+    this._diff = !this._diff;
+  }
+
+  diff(attr1: string, attr2: string) {
+    if (attr1 !== attr2 && this._diff) {
+      return 'danger';
+    }
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/context.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/details/context.ts
new file mode 100644
index 0000000..eec0b08
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/context.ts
@@ -0,0 +1,32 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Node} from '../navigator/node';
+
+export class Context {
+  measured: Components;
+  ordered: Components;
+}
+
+export class Components {
+  UNITUNDERTEST: Node[];
+  TESTSEQUENCE: Node[];
+  TESTEQUIPMENT: Node[];
+}
+
+export class Sensor {
+  sensor_measured: Node[];
+  sensor_ordered: Node[];
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/mdm-detail-routing.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/details/mdm-detail-routing.module.ts
new file mode 100644
index 0000000..5bd4405
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/mdm-detail-routing.module.ts
@@ -0,0 +1,41 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+
+import { MDMDetailComponent } from './components/mdm-detail/mdm-detail.component';
+import { MDMDetailViewComponent } from './components/mdm-detail-view/mdm-detail-view.component';
+import { MDMDescriptiveDataComponent } from './components/mdm-detail-descriptive-data/mdm-detail-descriptive-data.component';
+import { SensorComponent } from './components/sensor/sensor.component';
+
+const detailRoutes: Routes = [
+  { path: '',  component: MDMDetailComponent, children: [
+    { path: 'general',  component: MDMDetailViewComponent },
+    { path: 'sensors',  component: SensorComponent },
+    { path: ':context', component: MDMDescriptiveDataComponent },
+    { path: '', redirectTo: 'general', pathMatch: 'full' },
+  ]}
+];
+
+@NgModule({
+  imports: [
+    RouterModule.forChild(detailRoutes)
+  ],
+  exports: [
+    RouterModule
+  ]
+})
+export class MDMDetailRoutingModule {}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/mdm-detail.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/details/mdm-detail.module.ts
new file mode 100644
index 0000000..1a71acc
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/mdm-detail.module.ts
@@ -0,0 +1,73 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+import { NgModule } from '@angular/core';
+import { DatePipe } from '@angular/common';
+
+import { PanelModule } from 'primeng/panel';
+import { TreeTableModule } from 'primeng/treetable';
+import { InputTextModule } from 'primeng/inputtext';
+import { TooltipModule } from 'primeng/tooltip';
+import { OverlayPanelModule } from 'primeng/overlaypanel';
+import { TableModule } from 'primeng/table';
+
+import { MDMDetailComponent } from './components/mdm-detail/mdm-detail.component';
+import { MDMDetailViewComponent } from './components/mdm-detail-view/mdm-detail-view.component';
+import { MDMDescriptiveDataComponent } from './components/mdm-detail-descriptive-data/mdm-detail-descriptive-data.component';
+import { DetailViewService } from './services/detail-view.service';
+import { SensorComponent } from './components/sensor/sensor.component';
+import { ContextService } from './services/context.service';
+import { DetailPanelComponent } from './components/detail-panel/detail-panel.component';
+import { AttributeEditorComponent } from './components/attribute-editor/attribute-editor.component';
+import { AttributeViewerComponent } from './components/attribute-viewer/attribute-viewer.component';
+import { MDMDetailRoutingModule } from './mdm-detail-routing.module';
+
+import { MDMCoreModule } from '../core/mdm-core.module';
+import { FileExplorerModule } from '../file-explorer/file-explorer.module';
+import { AuthenticationModule } from '../authentication/authentication.module';
+
+
+
+@NgModule({
+  imports: [
+    MDMDetailRoutingModule,
+    MDMCoreModule,
+    PanelModule,
+    TreeTableModule,
+    TooltipModule,
+    AuthenticationModule,
+    FileExplorerModule,
+    OverlayPanelModule,
+    TableModule,
+    InputTextModule
+  ],
+  declarations: [
+    MDMDetailComponent,
+    MDMDetailViewComponent,
+    MDMDescriptiveDataComponent,
+    SensorComponent,
+    DetailPanelComponent,
+    AttributeEditorComponent,
+    AttributeViewerComponent,
+  ],
+  exports: [
+    MDMDetailComponent
+  ],
+  providers: [
+    DetailViewService,
+    ContextService,
+    DatePipe
+  ]
+})
+export class MDMDetailModule {
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/model/details.model.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/details/model/details.model.ts
new file mode 100644
index 0000000..c9f0a93
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/model/details.model.ts
@@ -0,0 +1,20 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+// Grouping file to enable import from central point.
+export { Components } from './types/components';
+export { Sensor } from './types/sensor';
+export { Context } from './types/context';
+export { ContextResponse } from './types/context-response';
+export { ContextAttributeIdentifier }  from './types/context-attribute-identifier';
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/model/types/components.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/details/model/types/components.ts
new file mode 100644
index 0000000..c1df941
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/model/types/components.ts
@@ -0,0 +1,20 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Node } from '../../../navigator/node';
+export class Components {
+  UNITUNDERTEST: Node[];
+  TESTSEQUENCE: Node[];
+  TESTEQUIPMENT: Node[];
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/model/types/context-attribute-identifier.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/details/model/types/context-attribute-identifier.ts
new file mode 100644
index 0000000..2395c3b
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/model/types/context-attribute-identifier.ts
@@ -0,0 +1,30 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Node, Attribute, ContextGroup } from '@navigator/node';
+
+export class ContextAttributeIdentifier {
+  contextDescribable: Node;
+  contextComponent: Node;
+  attribute: Attribute;
+  contextGroup?: ContextGroup;
+  contextType?: string;
+  constructor(contextDescribable: Node, contextComponent: Node, attribute: Attribute, contextGroup?: ContextGroup, contextType?: string) {
+    this.contextDescribable = contextDescribable;
+    this.contextComponent = contextComponent;
+    this.attribute = attribute;
+    this.contextGroup = contextGroup;
+    this.contextType = contextType;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/model/types/context-response.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/details/model/types/context-response.ts
new file mode 100644
index 0000000..7633d74
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/model/types/context-response.ts
@@ -0,0 +1,21 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+import { Context } from './context';
+
+export class ContextResponse {
+  data: Context[];
+  constructor(data: Context[]) {
+    this.data = data;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/model/types/context.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/details/model/types/context.ts
new file mode 100644
index 0000000..c016ff1
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/model/types/context.ts
@@ -0,0 +1,20 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Components } from './components';
+export class Context {
+  measured: Components;
+  ordered: Components;
+}
+
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/model/types/sensor.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/details/model/types/sensor.ts
new file mode 100644
index 0000000..8d21d90
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/model/types/sensor.ts
@@ -0,0 +1,20 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Node } from '../../../navigator/node';
+
+export class Sensor {
+  sensor_measured: Node[];
+  sensor_ordered: Node[];
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/services/context.service.spec.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/details/services/context.service.spec.ts
new file mode 100644
index 0000000..07e2518
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/services/context.service.spec.ts
@@ -0,0 +1,186 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { async, TestBed, inject } from '@angular/core/testing';
+import { BaseRequestOptions, Http, HttpModule } from '@angular/http';
+import { MockBackend } from '@angular/http/testing';
+
+import { ContextService } from './context.service';
+import { PropertyService } from '../../core/property.service';
+import { HttpErrorHandler } from '../../core/http-error-handler';
+import { Attribute } from '../../navigator/node';
+
+describe('ContextService', () => {
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      imports: [HttpModule],
+      providers: [
+        MockBackend,
+        BaseRequestOptions,
+        HttpErrorHandler,
+        {
+          provide: Http,
+          useFactory: (mockBackend, options) => {
+            return new Http(mockBackend, options);
+          },
+          deps: [MockBackend, BaseRequestOptions]
+        },
+        PropertyService,
+        ContextService
+      ]
+    });
+  });
+
+  describe('mergeAttributes()', () => {
+    it('should merge value of one attribute', async(inject([ContextService], (contextService) => {
+      let attribute1: Attribute = {
+        'name' : 'size',
+        'value' : '95R16',
+        'unit' : '',
+        'dataType' : 'STRING'
+      };
+      let attributes = [ attribute1 ];
+      let contextIndex = 2;
+      let resultAttributes: Attribute[] = [];
+
+      expect(contextService.mergeAttributes(attributes, contextIndex, resultAttributes)).toEqual(
+        [{
+          'name' : 'size',
+          'value' : [undefined, undefined, '95R16'],
+          'unit' : '',
+          'dataType' : 'STRING'
+        }]
+      );
+    })));
+
+    it('should merge values of multiple attributes', async(inject([ContextService], (contextService) => {
+      let attribute1: Attribute = {
+        'name' : 'size',
+        'value' : '95R16',
+        'unit' : '',
+        'dataType' : 'STRING'
+      };
+      let attribute2: Attribute = {
+        'name' : 'side',
+        'value' : 'Left',
+        'unit' : '',
+        'dataType' : 'STRING'
+      };
+
+      let attributes = [ attribute1, attribute2 ];
+      let contextIndex = 0;
+      let resultAttributes: Attribute[] = [];
+
+      expect(contextService.mergeAttributes(attributes, contextIndex, resultAttributes)).toEqual(
+        [{
+          'name' : 'size',
+          'value' : ['95R16'],
+          'unit' : '',
+          'dataType' : 'STRING'
+        }, {
+          'name' : 'side',
+          'value' : ['Left'],
+          'unit' : '',
+          'dataType' : 'STRING'
+        }]
+      );
+    })));
+  });
+
+  describe('mergeContextRoots()', () => {
+    it('should merge attributes values of all context components', async(inject([ContextService], (contextService) => {
+      let data = {
+        'ordered' : {
+          'UNITUNDERTEST' : [{
+              'name' : 'FL_tyre',
+              'id' : '38',
+              'type' : 'ContextComponent',
+              'sourceType' : 'tyre',
+              'sourceName' : 'MDM',
+              'attributes' : [{
+                  'name' : 'size',
+                  'value' : '95R16',
+                  'unit' : '',
+                  'dataType' : 'STRING'
+                }
+              ]
+            }
+          ]
+        },
+        'measured' : {
+          'UNITUNDERTEST' : [{
+              'name' : 'FL_tyre',
+              'id' : '39',
+              'type' : 'ContextComponent',
+              'sourceType' : 'tyre',
+              'sourceName' : 'MDM',
+              'attributes' : [{
+                  'name' : 'size',
+                  'value' : '95R17',
+                  'unit' : '',
+                  'dataType' : 'STRING'
+                }
+              ]
+            }, {
+              'name' : 'engine',
+              'id' : '12',
+              'type' : 'ContextComponent',
+              'sourceType' : 'engine',
+              'sourceName' : 'MDM',
+              'attributes' : [{
+                  'name' : 'cylinders',
+                  'value' : '2',
+                  'unit' : '',
+                  'dataType' : 'STRING'
+                }
+              ]
+            }
+          ]
+        }
+      };
+
+      let mergedData = contextService.mergeContextRoots([data.ordered, data.measured]);
+
+      // Workarround since jasmine check for type. Service returns Components, mocked object is of type Obejct.
+      expect(jasmine.objectContaining(Object.assign({}, mergedData))).toEqual({
+        'UNITUNDERTEST': [{
+          'name' : 'FL_tyre',
+          'id' : '38',
+          'type' : 'ContextComponent',
+          'sourceType' : 'tyre',
+          'sourceName' : 'MDM',
+          'attributes' : [{
+            'name' : 'size',
+            'value' : ['95R16', '95R17'],
+            'unit' : '',
+            'dataType' : 'STRING'
+          }]
+        }, {
+          'name' : 'engine',
+          'id' : '12',
+          'type' : 'ContextComponent',
+          'sourceType' : 'engine',
+          'sourceName' : 'MDM',
+          'attributes' : [{
+            'name' : 'cylinders',
+            'value' : [undefined, '2'],
+            'unit' : '',
+            'dataType' : 'STRING'
+          }]
+        }]
+      });
+    })));
+  });
+});
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/services/context.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/details/services/context.service.ts
new file mode 100644
index 0000000..6460127
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/services/context.service.ts
@@ -0,0 +1,215 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Injectable} from '@angular/core';
+import {Http} from '@angular/http';
+
+import {catchError, map} from 'rxjs/operators';
+
+import { Sensor } from '../model/types/sensor';
+import { Components } from '../model/types/components';
+import {PropertyService} from '@core/property.service';
+import {HttpErrorHandler} from '@core/http-error-handler';
+import {Node, Attribute} from '@navigator/node';
+
+@Injectable()
+export class ContextService {
+
+  private _contextUrl: string;
+
+  private test: {};
+  private errorMessage: string;
+
+  constructor(private http: Http,
+              private httpErrorHandler: HttpErrorHandler,
+              private _prop: PropertyService) {
+    this._contextUrl = _prop.getUrl('mdm/environments');
+  }
+
+  putContext(node: Node, context: any) {
+    let url = this._contextUrl + '/' + node.sourceName;
+    url = url + '/' + node.type.toLowerCase() + 's/' + node.id + '/contexts';
+    let body = {
+      'data': [ context ]
+    };
+    return this.http.put(url, body).pipe(
+      map((res) => {
+        let data = res.json().data;
+        return this.mergeContextRoots([data[0].ordered, data[0].measured]);
+      }),
+      catchError(this.httpErrorHandler.handleError));
+  }
+
+  getContext(node: Node) {
+    let url = this._contextUrl + '/' + node.sourceName;
+    url = url + '/' + node.type.toLowerCase() + 's/' + node.id + '/contexts';
+    return this.http.get(url).pipe(
+      map((res) => {
+        let data = res.json().data;
+        let context = this.mergeContextRoots([data[0].ordered, data[0].measured]);
+        return context;
+      }),
+      catchError(this.httpErrorHandler.handleError));
+  }
+
+  getSensors(node: Node) {
+    let url = this._contextUrl + '/' + node.sourceName + '/' + node.type.toLowerCase() + 's/' + node.id + '/contexts/testequipment/sensors';
+    return this.http.get(url).pipe(
+        map((res) => { return <{}> this.merge(res.json().data); }),
+        catchError(this.httpErrorHandler.handleError));
+  }
+
+  private merge(sensor: Sensor) {
+    let sensorm = sensor[0].sensor_measured;
+    let sensoro = sensor[0].sensor_ordered;
+    let merge = [];
+    sensoro.forEach((node) => {
+      let pos = sensorm.map(function(e) { return e.name; }).indexOf(node.name);
+      if (pos === -1) {
+        merge.push(this.empty_m(node));
+      } else {
+        merge.push(this.mergeNode(node, sensorm[pos]));
+        sensorm.splice(pos, 1);
+      }
+    });
+    sensorm.forEach((node) => {
+      merge.push(this.empty_o(node));
+    });
+    return merge;
+  }
+
+  private mergeNode(oNode, mNode) {
+    oNode.attributes.forEach((attr, i) => {
+      attr.dataType = [attr.dataType, mNode.attributes[i].dataType];
+      attr.name = [attr.name, mNode.attributes[i].name];
+      attr.unit = [attr.unit, mNode.attributes[i].unit];
+      attr.value = [attr.value, mNode.attributes[i].value];
+    });
+    return oNode;
+  }
+
+  private empty_o(node) {
+    node.attributes.forEach((attr) => {
+      attr.dataType = ['', attr.dataType];
+      attr.name = ['', attr.name];
+      attr.unit = ['', attr.unit];
+      attr.value = ['', attr.value];
+    });
+    return node;
+  }
+
+  private empty_m(node) {
+    node.attributes.forEach((attr) => {
+      attr.dataType = [attr.dataType, ''];
+      attr.name = [attr.name, ''];
+      attr.unit = [attr.unit, ''];
+      attr.value = [attr.value, ''];
+    });
+    return node;
+  }
+
+  /** Merges several ContextRoots by merging their ContextComponents */
+  private mergeContextRoots(contexts) {
+    let result: Components = new Components();
+
+    for (let i = 0; i < contexts.length; ++i) {
+      for (let contextType in contexts[i]) {
+        if (contexts[i].hasOwnProperty(contextType)) {
+          result[contextType] = this.mergeComponents(contexts[i][contextType], i, result[contextType]);
+        }
+      }
+    }
+    return result;
+  }
+
+  /** Merges several ContextComponents by merging their ContextAttributes */
+  private mergeComponents(contextComponents: any, contextIndex: number, resultComponents: Node[]) {
+    if (!Array.isArray(contextComponents)) {
+      return resultComponents;
+    }
+
+    let result = resultComponents || [];
+
+    for (let contextComponent of contextComponents) {
+      if (!(contextComponent instanceof Object)) { continue; }
+
+      let resultComponent = result.find(cc => cc.name === contextComponent['name']);
+
+      if (!resultComponent) {
+        resultComponent = JSON.parse(JSON.stringify(contextComponent));
+        resultComponent['attributes'] = [];
+        result.push(resultComponent);
+      }
+
+      resultComponent['attributes'] = this.mergeAttributes(contextComponent['attributes'], contextIndex, resultComponent['attributes']);
+    }
+    return result;
+  }
+
+  /** Merges a array of ContextAttributes to a MergedContextAttribute
+   * and adds it to the given resultAttributes array. Merging the ContextAttributes
+   * copies the values of all properties (which should be identical), except the
+   * value property. The value property in MergedContextAttribute is an array
+   * with all values of the value property from all ContextAttributes.
+   */
+  private mergeAttributes(attributes: Attribute[], contextIndex: number, resultAttributes: Attribute[]) {
+    if (!Array.isArray(attributes)) {
+      return resultAttributes;
+    }
+
+    let result = resultAttributes || [];
+
+    for (let attribute of attributes) {
+      if (!(attribute instanceof Object)) { continue; }
+
+      let resultAttribute = result.find(a => a.name === attribute['name']);
+
+      if (!resultAttribute) {
+        resultAttribute = JSON.parse(JSON.stringify(attribute));
+        resultAttribute['value'] = [];
+        result.push(resultAttribute);
+      }
+      resultAttribute['value'][contextIndex] = attribute['value'];
+    }
+
+    return resultAttributes;
+  }
+}
+
+// /** Represents a ContextAttribute */
+// export class ContextAttribute {
+//   name: string;
+//   value: string;
+//   unit: string;
+//   dataType: string;
+// }
+
+// /** Represents multiple ContextAttributes with their value properties merged to an array */
+// export class MergedContextAttribute {
+//   name: string;
+//   value: string[];
+//   unit: string;
+//   dataType: string;
+// }
+
+// /** Represents merged ContextComponents */
+// export class MergedContextComponent {
+//   name: string;
+//   id: string;
+//   type: string;
+//   sourcType: string;
+//   sourceName: string;
+//   attributes: MergedContextAttribute[];
+// }
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/services/detail-view.service.spec.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/details/services/detail-view.service.spec.ts
new file mode 100644
index 0000000..1f734e7
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/services/detail-view.service.spec.ts
@@ -0,0 +1,88 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { async, TestBed, inject } from '@angular/core/testing';
+import { HttpModule } from '@angular/http';
+
+import { TranslateModule } from '@ngx-translate/core';
+import {of as observableOf,  Observable } from 'rxjs';
+
+import {PreferenceService, Preference, Scope} from '../../core/preference.service';
+import {DetailViewService} from './detail-view.service';
+import {MDMNotificationService} from '../../core/mdm-notification.service';
+
+class TestPreferenceService {
+  getPreference(key?: string): Observable<Preference[]> {
+    return observableOf([
+    {
+      id: 1,
+      key: 'ignoredAttributes',
+      scope: Scope.USER,
+      source: null,
+      user: 'testUser',
+      value: '[\"*.MimeType\", \"TestStep.Sortindex\"]'
+    }, {
+      id: 2,
+      key: 'ignoredAttributes',
+      scope: Scope.SYSTEM,
+      source: null,
+      user: null,
+      value: '[\"Project.*\"]'
+    }, {
+      id: 3,
+      key: 'ignoredAttributes',
+      scope: Scope.SOURCE,
+      source: 'MDMTEST',
+      user: null,
+      value: '[\"*.Id\"]'
+    }, {
+      id: 4,
+      key: 'ignoredAttributes',
+      scope: Scope.SOURCE,
+      source: 'MDM_OTHER',
+      user: null,
+      value: '[\"Pool.*\"]'
+    }
+  ]);
+  }
+}
+
+describe('DetailViewService', () => {
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      imports: [
+        HttpModule,
+        TranslateModule.forRoot(),
+      ],
+      providers: [
+        {
+          provide: PreferenceService,
+          useClass: TestPreferenceService
+        },
+        DetailViewService,
+        MDMNotificationService,
+      ]
+    });
+  });
+
+
+  describe('getFilters()', () => {
+    it('should return filtered attributes', async(inject([DetailViewService], (detailViewService) => {
+
+      expect(detailViewService.getFilters('MDMTEST')).toEqual(['Project.*', '*.Id', '*.MimeType', 'TestStep.Sortindex']);
+
+    })));
+  });
+});
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/details/services/detail-view.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/details/services/detail-view.service.ts
new file mode 100644
index 0000000..f20a265
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/details/services/detail-view.service.ts
@@ -0,0 +1,86 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Injectable} from '@angular/core';
+
+import { TranslateService } from '@ngx-translate/core';
+
+import { Preference, PreferenceService, Scope } from '@core/preference.service';
+import { MDMNotificationService } from '@core/mdm-notification.service';
+import { streamTranslate, TRANSLATE } from '@core/mdm-core.module';
+import { Node, Attribute } from '@navigator/node';
+
+@Injectable()
+export class DetailViewService {
+
+    ignoreAttributesPrefs: Preference[] = [];
+
+    msgFaultyPreferenceForAttributesToIgnore: string;
+
+    constructor (private preferenceService: PreferenceService,
+                 private notificationService: MDMNotificationService,
+                 private translateService: TranslateService) {
+      this.preferenceService.getPreference('ignoredAttributes')
+          .subscribe(
+            prefs => this.ignoreAttributesPrefs = this.ignoreAttributesPrefs.concat(prefs),
+            error => this.notificationService.notifyWarn(
+              this.translateService.instant('details.detail-view.err-cannot-load-preference-for-attributes-to-ignore'), error));
+
+      streamTranslate(this.translateService, TRANSLATE('details.detail-view.err-faulty-preference-for-attributes-to-ignore')).subscribe(
+            (msg: string) => this.msgFaultyPreferenceForAttributesToIgnore = msg);
+    }
+
+    getAttributesToDisplay(node: Node) {
+        let filterList = this.getFilters(node.sourceName)
+          .map(p => { let splitted = p.split('.'); return { type: splitted[0], attribute: splitted[1]}; })
+          .filter(p => p.type === node.type || p.type === '*')
+          .map(p => p.attribute);
+
+        return this.getFilteredAttributes(node.attributes, filterList);
+    }
+
+    getFilters(source: string): string[] {
+      if (this.ignoreAttributesPrefs.length > 0) {
+      return this.ignoreAttributesPrefs
+        .filter(p => p.scope !== Scope.SOURCE || p.source === source)
+        .sort(Preference.sortByScope)
+        .map(p => this.parsePreference(p))
+        .reduce((acc, value) => acc.concat(value), []);
+      } else {
+        return [];
+      }
+    }
+
+    private parsePreference(pref: Preference) {
+      try {
+          return <string[]> JSON.parse(pref.value);
+      } catch (e) {
+          this.notificationService.notifyError(this.msgFaultyPreferenceForAttributesToIgnore, e);
+          return [];
+      }
+    }
+
+    private processFilter(prefList: string[], type: string) {
+      return prefList.filter(p => p.split('.')[0] === type || p.split('.')[0] === '*')
+        .map(p => p.split('.')[1]);
+    }
+
+    private getFilteredAttributes(attributes: Attribute[], filter: string[]) {
+        if (filter.indexOf('*') !== -1) {
+            return [];
+        } else {
+            return attributes.filter(attr => filter.indexOf(attr.name ) === -1);
+        }
+    }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/example-module/mdm-example-routing.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/example-module/mdm-example-routing.module.ts
new file mode 100644
index 0000000..6e663c7
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/example-module/mdm-example-routing.module.ts
@@ -0,0 +1,32 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+
+import { MDMExampleComponent } from './mdm-example.component';
+
+const moduleRoutes: Routes = [
+  { path: '', component: MDMExampleComponent }
+];
+
+@NgModule({
+  imports: [
+    RouterModule.forChild(moduleRoutes)
+  ],
+  exports: [
+    RouterModule
+  ]
+})
+export class MDMExampleRoutingModule {}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/example-module/mdm-example.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/example-module/mdm-example.component.ts
new file mode 100644
index 0000000..552aa90
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/example-module/mdm-example.component.ts
@@ -0,0 +1,23 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import {Component} from '@angular/core';
+
+@Component({
+  selector: 'mdm-example',
+  template: '<h1>Example Module</h1>'
+})
+export class MDMExampleComponent {
+
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/example-module/mdm-example.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/example-module/mdm-example.module.ts
new file mode 100644
index 0000000..6d9239a
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/example-module/mdm-example.module.ts
@@ -0,0 +1,31 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { NgModule } from '@angular/core';
+
+import { MDMCoreModule } from '../core/mdm-core.module';
+import { MDMExampleComponent } from './mdm-example.component';
+import { MDMExampleRoutingModule } from './mdm-example-routing.module';
+
+@NgModule({
+  imports: [
+    MDMCoreModule,
+    MDMExampleRoutingModule
+  ],
+  declarations: [
+    MDMExampleComponent
+  ]
+})
+export class MDMExampleModule {}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/example-module/readme.md b/org.eclipse.mdm.application/src/main/webapp/src/app/example-module/readme.md
new file mode 100644
index 0000000..ea26f1b
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/example-module/readme.md
@@ -0,0 +1,27 @@
+To embed this example module in MDM you have to register this module in the MDMModules Module.
+
+This is done by registering a child route to **moduleRoutes** in **modules-routing.module.ts**:
+***
+ { path: 'example', loadChildren: '../example-module/mdm-example.module#MDMExampleModule'},
+***
+
+Furthermore you have to define a display name for the registered route in the array returned by **getLinks** in  **modules.component.ts**:
+***
+{ path: 'example', name: 'Example Module' }
+***
+
+For further information refer to the Angular 2 documentation for modules & router:
+* https://angular.io/docs/ts/latest/guide/ngmodule.html
+* https://angular.io/docs/ts/latest/guide/router.html
+
+## Copyright and License ##
+Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+
+ See the NOTICE file(s) distributed with this work for additional
+ information regarding copyright ownership.
+
+ This program and the accompanying materials are made available under the
+ terms of the Eclipse Public License v. 2.0 which is available at
+ http://www.eclipse.org/legal/epl-2.0.
+
+ SPDX-License-Identifier: EPL-2.0
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-attribute-display/file-attribute-display.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-attribute-display/file-attribute-display.component.html
new file mode 100644
index 0000000..77f5e4a
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-attribute-display/file-attribute-display.component.html
@@ -0,0 +1,30 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+<div>
+  <!-- <mdm5-file-pop-up-menu *ngIf="attribute?.dataType == 'FILE_LINK'"
+      [attribute]="attribute"
+      [contextComponent]="contextComponent"
+      [contextDescribable]="contextDescribable"
+      [contextGroup]="contextGroup"
+      [contextType]="contextType"
+      [readOnly]="readOnly">
+  </mdm5-file-pop-up-menu> -->
+  <button *ngIf="attribute?.dataType == 'FILE_LINK_SEQUENCE'"
+    type="button"
+    class="btn btn-mdm"
+    label="Show"
+    (click)="onShowFileExplorerDialog($event)">
+    <span class="fa fa-folder-open"></span>
+  </button>
+</div>
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-attribute-display/file-attribute-display.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-attribute-display/file-attribute-display.component.ts
new file mode 100644
index 0000000..4ee50b3
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-attribute-display/file-attribute-display.component.ts
@@ -0,0 +1,87 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Component, OnInit, Input } from '@angular/core';
+import { MenuItem, DialogService} from 'primeng/api';
+
+import { Attribute, Node, ContextGroup } from '@navigator/node';
+import { FileExplorerDialogComponent } from 'src/app/file-explorer/components/file-explorer-dialog/file-explorer-dialog.component';
+
+@Component({
+  selector: 'mdm5-file-attribute-display',
+  templateUrl: './file-attribute-display.component.html'
+})
+export class FileAttributeDisplayComponent implements OnInit {
+
+  @Input() attribute: Attribute;
+  @Input() contextDescribable: Node;
+  @Input() contextComponent: Node;
+  @Input() contextGroup?: ContextGroup;
+  @Input() contextType?: string;
+  @Input() readOnly: boolean;
+
+  // public link: MDMLink;
+  // public links: MDMLink[];
+
+  public menuItems: MenuItem[];
+
+  constructor(private dialogService: DialogService) { }
+
+  ngOnInit() {
+    // if (this.attribute != undefined && this.attribute.value != undefined) {
+    //   if (this.attribute.dataType === 'FILE_LINK') {
+    //     this.link = Object.assign(new MDMLink(), this.getValue<MDMLink>());
+    //   }
+    //   if (this.attribute.dataType === 'FILE_LINK_SEQUENCE' && this.getValues() != undefined) {
+    //     this.links = (this.getValues<MDMLink[]>()).map(l => Object.assign(new MDMLink(), l));
+    //   }
+    // }
+  }
+
+  // private getValue<T>() {
+  //   if (this.attribute != undefined && this.attribute.value != undefined) {
+  //     return <T> (this.contextGroup != undefined ? this.attribute.value[this.contextGroup] : this.attribute.value);
+  //   }
+  // }
+
+  // private getValues<T>() {
+  //   if (this.attribute != undefined && this.attribute.value != undefined) {
+  //     const tmp = this.contextGroup != undefined ? this.attribute.value[this.contextGroup] : this.attribute.value;
+  //     return tmp !== '' ? tmp : undefined;
+  //   }
+  // }
+
+  public onShowFileExplorerDialog() {
+    const ref = this.dialogService.open(FileExplorerDialogComponent, {
+        data: {
+          contextDescribable: this.contextDescribable,
+          contextComponent: this.contextComponent,
+          attribute: this.attribute,
+          contextGroup: this.contextGroup,
+          contextType: this.contextType,
+          readOnly: this.readOnly
+        },
+        header: 'File upload wizard for ' + this.contextComponent.name,
+        width: '70%'
+    });
+
+    // ref.onClose.subscribe(linkObs => this.handleUploadDialogResponse(linkObs));
+  }
+
+  // private handleUploadDialogResponse(linkObs: Observable<MDMLink>) {
+  //   if (linkObs != undefined) {
+  //     linkObs.subscribe(link => console.log(link));
+  //   }
+  // }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-attribute-viewer/file-attribute-viewer.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-attribute-viewer/file-attribute-viewer.component.html
new file mode 100644
index 0000000..b3437a4
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-attribute-viewer/file-attribute-viewer.component.html
@@ -0,0 +1,25 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+<div [ngSwitch]="attribute?.dataType">
+    <a *ngSwitchCase="'FILE_LINK'" title="{{attribute?.value[ident.contextGroup]?.description}}" target="_blank" [href]="getUrl(attribute?.value[ident.contextGroup]?.remotePath)">
+        {{attribute?.value[ident.contextGroup] | fileName}}
+    </a>
+    <div *ngSwitchCase="'FILE_LINK_SEQUENCE'" >
+        <div *ngFor="let link of attribute.value[ident.contextGroup]; index as i">
+            <a title="{{attribute?.value[ident.contextGroup][i]?.description}}" target="_blank" [href]="getUrl(attribute?.value[ident.contextGroup][i]?.remotePath)">
+                {{attribute?.value[ident.contextGroup][i] | fileName}}
+            </a>
+        </div>
+    </div>
+</div>
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-attribute-viewer/file-attribute-viewer.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-attribute-viewer/file-attribute-viewer.component.ts
new file mode 100644
index 0000000..56dec78
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-attribute-viewer/file-attribute-viewer.component.ts
@@ -0,0 +1,40 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Component, Input } from '@angular/core';
+
+import { Attribute } from '@navigator/node';
+import { ContextAttributeIdentifier } from '@details/model/details.model';
+
+import { ContextFilesService } from '../../services/context-files.service';
+
+@Component({
+  selector: 'file-attribute-viewer',
+  templateUrl: './file-attribute-viewer.component.html'
+})
+export class FileAttributeViewerComponent {
+
+  @Input() ident: ContextAttributeIdentifier;
+  @Input() attribute: Attribute;
+
+  constructor(private contextFilesService: ContextFilesService) {
+
+  }
+
+  getUrl(remotePath: string) {
+    if (remotePath != undefined) {
+      return this.contextFilesService.getUrl(this.ident, remotePath);
+    }
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer-dialog/file-explorer-dialog.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer-dialog/file-explorer-dialog.component.html
new file mode 100644
index 0000000..5a4c276
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer-dialog/file-explorer-dialog.component.html
@@ -0,0 +1,21 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+<mdm5-file-explorer
+    [contextDescribable]="contextDescribable"
+    [node]="contextComponent"
+    [contextType]="contextType"
+    [contextGroup]="contextGroup"
+    [attribute]="attribute"
+    [readOnly]="readOnly">
+</mdm5-file-explorer>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer-dialog/file-explorer-dialog.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer-dialog/file-explorer-dialog.component.ts
new file mode 100644
index 0000000..93679ed
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer-dialog/file-explorer-dialog.component.ts
@@ -0,0 +1,47 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Component, OnInit } from '@angular/core';
+import { DynamicDialogRef, DynamicDialogConfig } from 'primeng/api';
+import { Node, Attribute, ContextGroup } from '@navigator/node';
+
+@Component({
+  selector: 'mdm5-file-explorer-dialog',
+  templateUrl: './file-explorer-dialog.component.html'
+})
+export class FileExplorerDialogComponent implements OnInit {
+
+  public contextComponent: Node;
+  public contextDescribable: Node;
+  public attribute: Attribute;
+  public contextGroup: ContextGroup;
+  public contextType: string;
+  public readOnly: boolean;
+
+  public constructor(
+    public ref: DynamicDialogRef,
+    public config: DynamicDialogConfig) {}
+
+  ngOnInit() {
+    if (this.config != undefined) {
+      this.contextComponent = this.config.data.contextComponent as Node;
+      this.contextDescribable = this.config.data.contextDescribable as Node;
+      this.attribute = this.config.data.attribute as Attribute;
+      this.contextGroup = this.config.data.contextGroup as ContextGroup;
+      this.contextType = this.config.data.contextType as string;
+      this.readOnly = this.config.data.readOnly as boolean;
+    }
+  }
+
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer-nav-card/file-explorer-nav-card.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer-nav-card/file-explorer-nav-card.component.html
new file mode 100644
index 0000000..bb683be
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer-nav-card/file-explorer-nav-card.component.html
@@ -0,0 +1,21 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+<div *ngIf="!filesAttachable">
+  <div class="alert alert-info" style="margin: 0;">
+      <strong>{{status | translate: {type: selectedNode?.type} }}</strong>
+  </div>
+</div>
+<div *ngIf="filesAttachable">
+  <mdm5-file-explorer [node]="selectedNode" [attribute]="linkAttr" [readOnly]="false"></mdm5-file-explorer>
+</div>
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer-nav-card/file-explorer-nav-card.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer-nav-card/file-explorer-nav-card.component.ts
new file mode 100644
index 0000000..f5838ed
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer-nav-card/file-explorer-nav-card.component.ts
@@ -0,0 +1,101 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Component, OnInit } from '@angular/core';
+import { ActivatedRoute } from '@angular/router';
+
+import { MDMNotificationService } from '@core/mdm-notification.service';
+import { MDMItem } from '@core/mdm-item';
+import { NavigatorService } from '@navigator/navigator.service';
+import { Node, Attribute } from '@navigator/node';
+import { NodeService } from '@navigator/node.service';
+
+import { FilesAttachableService } from '../../services/files-attachable.service';
+
+@Component({
+  selector: 'mdm5-file-explorer-nav-card',
+  templateUrl: './file-explorer-nav-card.component.html'
+})
+export class FileExplorerNavCardComponent implements OnInit {
+
+  private static readonly FILE_ATTACHABLE_TYPES = ['Test', 'TestStep', 'Measurement'];
+
+  // holding node selected in navigator
+  public selectedNode: Node;
+  // holding node selected in navigator
+  public filesAttachable = false;
+
+  public linkAttr: Attribute;
+
+  public status = 'file-explorer.file-explorer-nav-card.status-no-node-selected';
+
+  public constructor(
+              private route: ActivatedRoute,
+              private navigatorService: NavigatorService,
+              private nodeService: NodeService,
+              private notificationService: MDMNotificationService) {}
+
+  public ngOnInit() {
+    // init data on navigation via modules
+    this.route.url.subscribe(() => {
+      this.selectedNode = this.navigatorService.getSelectedNode();
+      // reload selected node to reflect fileLink changes from delete and create
+      this.reloadSelectedNode();
+    });
+    // init data on selected node change via navigator
+    this.navigatorService.selectedNodeChanged
+        .subscribe(
+          node => this.init(node),
+          error => this.notificationService.notifyError('Daten können nicht geladen werden.', error));
+  }
+
+  // initialize component data
+  private init(node: Node) {
+    if (node != undefined) {
+      this.selectedNode = node;
+      this.status = 'file-explorer.file-explorer-nav-card.status-node-is-no-files-attachable';
+      this.filesAttachable = this.isFileAttachable(this.selectedNode);
+      this.linkAttr = this.findLinkAttribute();
+      // if (linkAttr != undefined && linkAttr.value != undefined) {
+      //   this.links = linkAttr.value as MDMLink[];
+      // }
+    }
+  }
+
+  // reloads the selected node (and consequently all file data)
+  private reloadSelectedNode() {
+    if (this.selectedNode != undefined) {
+      this.nodeService.getNodeFromItem(new MDMItem(this.selectedNode.sourceName, this.selectedNode.type, this.selectedNode.id))
+        .subscribe(node => this.init(node));
+    }
+  }
+
+  // extract MDMLink attribute from node
+  private findLinkAttribute() {
+    let linkAttr: Attribute;
+    if (this.selectedNode != undefined && this.selectedNode.attributes != undefined && this.selectedNode.attributes.length > 0) {
+      linkAttr = this.selectedNode.attributes.find(attr => attr.name === FilesAttachableService.MDM_LINKS);
+    }
+    return linkAttr;
+  }
+
+  // returns true, if node.type is configured as file-attachable.
+  private isFileAttachable(node: Node) {
+    let isAttachable = false;
+    if (node != undefined) {
+      isAttachable = FileExplorerNavCardComponent.FILE_ATTACHABLE_TYPES.find(t => t === node.type) != undefined;
+    }
+    return isAttachable;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer.css b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer.css
new file mode 100644
index 0000000..147908c
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer.css
@@ -0,0 +1,61 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+.fileupload {
+overflow: hidden;
+position: relative;
+}
+  
+.fileupload input.upload {
+    float: right;
+    position: absolute;
+}
+
+input[type='file']{
+    opacity: 0;
+    cursor: pointer;
+    width: 37px;
+    height: 37.66px;
+    font-size: 0;
+    top: 0;
+    left: 0;
+}
+
+a.disabled {
+    pointer-events: none;
+    cursor: not-allowed;
+}
+
+p-table >>> .ui-table-caption {
+    padding: .25em .5em!important;
+    text-align: right!important;
+}
+  
+td {
+white-space: nowrap;
+overflow: hidden;
+text-overflow: ellipsis;
+max-width: 150px;
+}
+
+.mdmContextMenu > a:hover {
+text-decoration: none!important;
+}
+
+.btn:focus {
+box-shadow: none;
+}
+
+.no-margin-bot {
+    margin-bottom: 0;
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer/file-explorer.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer/file-explorer.component.html
new file mode 100644
index 0000000..e3a9233
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer/file-explorer.component.html
@@ -0,0 +1,129 @@
+<!-- ********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ******************************************************************************** -->
+<!-- main explorer table -->
+<p-table [value]="fileMetas"
+         [columns]="columnConfigs"
+
+         selectionMode="single"
+         [(selection)]="selectedFileMeta"
+         [metaKeySelection]="true"
+
+         [contextMenu]="cm"
+         contextMenuSelectionMode="joint"
+
+         [resizableColumns]="true">
+
+    <!-- caption -->
+    <ng-template pTemplate="caption">
+      <!-- selected node -->
+      <span *ngIf="node" style="float: left; margin-top: 7px;">
+        {{'file-explorer.file-explorer.ttl-attached-to' | translate }}
+        {{node?.name}}
+      </span>
+      <!-- download -->
+      <button type="button"
+              class="btn btn-mdm"
+              (click)="onDownloadFile($event)"
+              title="{{'file-explorer.file-explorer.btn-download-file' | translate }}"
+              [disabled]="!selectedFileMeta">
+        <span class="fa fa-arrow-circle-o-down"></span>
+      </button>
+      <!-- upload -->
+      <button type="button"
+              class="btn btn-mdm"
+              (click)="onShowUploadDialog($event)"
+              title="{{'file-explorer.file-explorer.btn-upload-files' | translate }}"
+              [disabled]="readOnly">
+        <span class="fa fa-arrow-circle-o-up"></span>
+      </button>      
+      <!-- preview -->
+      <button type="button"
+               class="btn btn-mdm"
+               (click)="onPreviewFile($event)"
+               title="{{'file-explorer.file-explorer.btn-preview-file' | translate }}"
+               [disabled]="!selectedFileMeta">
+        <span class="fa fa-search"></span>
+      </button>
+      <!-- refresh -->
+      <button type="button"
+              class="btn btn-mdm"
+              (click)="onRefresh($event)"
+              title="{{'file-explorer.file-explorer.btn-refresh' | translate }}">
+        <span class="fa fa-refresh"></span>
+      </button>
+      <!-- delete -->
+      <button type="button"
+               class="btn btn-mdm"
+               (click)="onDeleteFile($event)"
+               title="{{'file-explorer.file-explorer.btn-delete-file' | translate }}"
+               [disabled]="!selectedFileMeta || readOnly">
+        <span class="fa fa-times"></span>
+      </button>
+    </ng-template>
+
+    <!-- header -->
+    <ng-template pTemplate="header" let-columns>
+        <tr>
+            <th *ngFor="let col of columns" [pSortableColumn]="col.field" pResizableColumn>
+                {{col.header | translate}}
+                <p-sortIcon [field]="col.field"
+                             ariaLabel="Activate to sort"
+                             ariaLabelDesc="Activate to sort in descending order"
+                             ariaLabelAsc="Activate to sort in ascending order">
+                </p-sortIcon>
+            </th>
+        </tr>
+    </ng-template>
+
+    <!-- body -->
+    <ng-template pTemplate="body" let-rowData let-columns="columns" let-rowIndex="rowIndex">
+        <tr [pSelectableRow]="rowData" [pSelectableRowIndex]="rowIndex" [pContextMenuRow]="rowData">
+            <td *ngFor="let col of columns">
+                {{rowData[col.field]}}
+            </td>
+        </tr>
+    </ng-template>
+
+    <!-- empty message -->
+    <ng-template pTemplate="emptymessage" let-columns>
+        <tr>
+            <td [attr.colspan]="columns?.length">
+                {{'file-explorer.file-explorer.msg-no-files-attached' | translate }}
+            </td>
+        </tr>
+    </ng-template>
+</p-table>
+
+<!-- context menu for explorer table -->
+<p-contextMenu #cm [model]="ctxMenuItems" class="mdmContextMenu"></p-contextMenu>
+
+<!-- confirm dialog for delete file from data base -->
+<p-confirmDialog #cd key="fileExplorerConfirmation"
+    header="{{'file-explorer.file-explorer.ttl-confirmation' | translate }}"
+    icon="fa fa-exclamation-triangle"
+    appendTo="body">
+    <p-footer>
+        <button type="button"
+            (click)="cd.accept()"
+            class="btn btn-mdm">
+            <span class="fa fa-check"></span>
+        </button>
+        <button type="button"
+                (click)="cd.reject()"
+                class="btn btn-mdm">
+                <span class="fa fa-times"></span>
+        </button>
+    </p-footer>
+</p-confirmDialog>
+  
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer/file-explorer.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer/file-explorer.component.ts
new file mode 100644
index 0000000..d372911
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-explorer/file-explorer.component.ts
@@ -0,0 +1,363 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+import { Component, OnInit, Input, OnChanges, SimpleChanges } from '@angular/core';
+
+import { MenuItem, ConfirmationService, DialogService, DynamicDialogRef } from 'primeng/api';
+import { TranslateService} from '@ngx-translate/core';
+import { Observable } from 'rxjs';
+import * as FileSaver from 'file-saver';
+
+import { TRANSLATE } from '@core/mdm-core.module';
+import { Node, FileSize, Attribute, MDMLink, ContextGroup } from '@navigator/node';
+
+import { FilesAttachableService } from '../../services/files-attachable.service';
+import { ContextFilesService } from '../../services/context-files.service';
+import { FileService } from '../../services/file.service';
+import { FileExplorerColumn, FileExplorerRow, FileLinkContextWrapper } from '../../model/file-explorer.model';
+import { FileUploadDialogComponent } from '../file-upload-dialog/file-upload-dialog.component';
+import { ContextAttributeIdentifier } from '@details/model/details.model';
+
+@Component({
+  selector: 'mdm5-file-explorer',
+  templateUrl: './file-explorer.component.html',
+  styleUrls: ['../file-explorer.css'],
+  providers: [ConfirmationService]
+})
+export class FileExplorerComponent implements OnInit, OnChanges {
+
+  private readonly CONTEXT_COMPONENT = 'ContextComponent';
+
+  // holding column configuration for table
+  public columnConfigs: FileExplorerColumn[] = [];
+  // holding file metadata for table
+  public fileMetas: FileExplorerRow[] = [];
+  // holding table selection
+  public selectedFileMeta: FileExplorerRow;
+  // holding node selected in navigator
+  @Input() public node: Node;
+  @Input() public contextDescribable?: Node;
+  @Input() public attribute: Attribute;
+  @Input() public contextGroup?: ContextGroup;
+  @Input() public contextType?: string;
+  @Input() public readOnly: boolean;
+
+  public links: MDMLink[];
+
+  // items for context menu
+  public ctxMenuItems: MenuItem[];
+
+
+  public constructor(
+              private filesAttachableService: FilesAttachableService,
+              private contextFilesService: ContextFilesService,
+              private translateService: TranslateService,
+              private confirmationService: ConfirmationService,
+              private dialogService: DialogService,
+              private fileService: FileService) {}
+
+  public ngOnInit() {
+    this.initColumns();
+    // workaround for ctx menu translation, since pipe cannot be passed into primeng contextmenu.
+    this.initCtxMenu();
+    this.translateService.onLangChange.subscribe(() => this.initCtxMenu());
+    this.init();
+  }
+
+  ngOnChanges(changes: SimpleChanges) {
+    if (changes['node']) {
+      this.init();
+    }
+  }
+
+  // initialize component data
+  private init() {
+
+    if (this.node != undefined) {
+      this.fileMetas = [];
+      this.selectedFileMeta = undefined;
+      if (this.attribute != undefined) {
+        this.links = this.getValues<MDMLink[]>();
+        if (this.links != undefined && this.links.length > 0) {
+            this.loadFileSizes();
+            this.fileMetas = this.links.map(mdmLink => this.link2Row(mdmLink));
+        }
+      }
+    }
+  }
+
+  // defines column configuration.
+  private initColumns() {
+    this.columnConfigs = [];
+    this.columnConfigs.push(new FileExplorerColumn('filename', TRANSLATE('file-explorer.file-explorer.hdr-filename')));
+    this.columnConfigs.push(new FileExplorerColumn('description', TRANSLATE('file-explorer.file-explorer.hdr-description')));
+    this.columnConfigs.push(new FileExplorerColumn('type', TRANSLATE('file-explorer.file-explorer.hdr-type')));
+    this.columnConfigs.push(new FileExplorerColumn('size', TRANSLATE('file-explorer.file-explorer.hdr-size')));
+  }
+
+  // defines context menu configuration.
+  private initCtxMenu() {
+    this.ctxMenuItems = [];
+    this.translateService.get('file-explorer.file-explorer.btn-preview-file')
+                          .subscribe(t => this.ctxMenuItems.push(
+                            { label: t,
+                              icon: 'fa fa-search',
+                              command: (event) => this.onPreviewFile(event)
+                            })
+                          );
+    this.translateService.get('file-explorer.file-explorer.btn-download-file')
+                        .subscribe(t => this.ctxMenuItems.push(
+                          { label: t,
+                            icon: 'fa fa-arrow-circle-o-down',
+                            command: (event) => this.onDownloadFile(event)
+                          })
+                        );
+    this.translateService.get('file-explorer.file-explorer.btn-delete-file')
+                          .subscribe(t => this.ctxMenuItems.push(
+                            { label: t,
+                            icon: 'fa fa-times',
+                            command: (event) => this.onDeleteFile(event)
+                            })
+                          );
+  }
+
+  // listener to refresh selected node
+  public onRefresh() {
+    this.reloadSelectedNode();
+  }
+
+  // reloads the selected node (and consequently all file data)
+  private reloadSelectedNode() {
+    this.init();
+  }
+
+  // mapping function to create row data object from MDMLink array entry
+  private link2Row(mdmLink: MDMLink) {
+    if (mdmLink == undefined) {
+      return new FileExplorerRow(undefined, undefined, undefined, undefined, '-');
+    }
+    let nameIndex = mdmLink.remotePath.lastIndexOf('/');
+    let name = mdmLink.remotePath.substring(nameIndex + 1);
+
+    return new FileExplorerRow(mdmLink.remotePath, name, mdmLink.description, mdmLink.mimeType, mdmLink.size);
+  }
+
+  // loads file sizes
+  private loadFileSizes() {
+    // case for files attached to context attributes
+    if (this.node.type === this.CONTEXT_COMPONENT) {
+      // NOT PROPERLY IMPLEMENTED YET. Remove line below and add proper loading mechanism for all sizes at once
+      this.links.forEach(l => this.loadSizeLazy(l.remotePath));
+    } else { // case for files attached to filesAttachables
+      this.filesAttachableService.loadFileSizes(this.node).subscribe(fileSizes => this.updateFileSizes(fileSizes));
+    }
+  }
+
+  // load size information from server for single file
+  private loadSizeLazy(remotePath: string) {
+    // case for files attached to context attributes
+    if (this.contextDescribable != undefined) {
+      // NOT PROPERLY IMPLEMENTED YET. Remove lines below and add proper loading mechanism for all sizes at once
+      if (this.contextGroup != undefined) {
+        const link = this.links.find(l => l.remotePath === remotePath);
+        if (link != undefined) {
+          this.contextFilesService.loadFileSize(link, this.getIdent())
+            .subscribe(fileSize => this.updateFileSize(fileSize));
+        }
+      }
+    } else { // case for files attached to filesAttachables
+      this.filesAttachableService.loadFileSize(remotePath, this.node)
+        .subscribe(fileSize => this.updateFileSize(fileSize));
+    }
+  }
+
+  // update size in row data for table
+  private updateFileSizes(fileSizes: FileSize[]) {
+    if (this.fileMetas != undefined && fileSizes != undefined && fileSizes.length > 0) {
+      fileSizes.forEach(fileSize => this.updateFileSize(fileSize));
+    }
+  }
+
+  // update size in row data for table for single file
+  private updateFileSize(fileSize: FileSize) {
+    this.fileMetas.find(fm => fm.remotePath === fileSize.remotePath).size = fileSize.size;
+  }
+
+  public onShowUploadDialog() {
+    let ref: DynamicDialogRef;
+    // case for files attached to context attributes
+    if (this.contextDescribable != undefined) {
+      ref = this.dialogService.open(FileUploadDialogComponent, {
+        data: { contextDescribable: this.contextDescribable,
+                node: this.node,
+                contextType: this.contextType,
+                contextGroup: this.contextGroup,
+                attribute: this.attribute
+              },
+        header: 'File upload wizard for ' + this.node.name,
+        width: '70%'
+      });
+    // case for files attached to filesAttachables
+    } else {
+      ref = this.dialogService.open(FileUploadDialogComponent, {
+        data: { node: this.node,
+                attribute: this.attribute
+              },
+        header: 'File upload wizard for ' + this.node.name,
+        width: '70%'
+      });
+    }
+
+    ref.onClose.subscribe(linkObs => this.handleUploadDialogResponse(linkObs));
+  }
+
+  // reflects file upload in client side state
+  private handleUploadDialogResponse(linkObs: Observable<MDMLink>) {
+    if (linkObs != undefined) {
+      linkObs.subscribe(link => this.handleUpload(link));
+    }
+  }
+
+  // listener to load blob from db and initialize download dialog for saving file to local filesystem.
+  public onDownloadFile(event: MouseEvent) {
+    if (this.selectedFileMeta != undefined) {
+      this.loadFile().subscribe(blob => FileSaver.saveAs(blob, this.selectedFileMeta.filename));
+    }
+  }
+
+  private loadFile() {
+    if (this.contextDescribable != undefined) {
+      // case for files attached to context attributes
+      if (this.contextGroup != undefined) {
+        const link = this.findLink(this.selectedFileMeta);
+        if (link != undefined) {
+          return this.contextFilesService.loadFile(link, this.getIdent());
+        }
+        return Observable.throwError('Cannot find link!');
+      }
+      return Observable.throwError('ContextGroup is undefined!');
+    } else {
+      // case for files attached to filesAttachables
+      return this.filesAttachableService.loadFile(this.selectedFileMeta.remotePath, this.node);
+    }
+  }
+
+  // listener for file preview
+  public onPreviewFile(event: MouseEvent) {
+    if (this.selectedFileMeta != undefined) {
+      this.loadFile().subscribe(blob => this.handlePreview(blob));
+    }
+  }
+
+  // handle preview for different browsers. Opens download dialog if preview not possible.
+  private handlePreview(blob: Blob) {
+    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+       window.navigator.msSaveOrOpenBlob(blob, this.selectedFileMeta.filename);
+    } else {
+       window.open(URL.createObjectURL(blob));
+    }
+  }
+
+  // listener for delete file button. Opens confirm dialog.
+  public onDeleteFile(event: MouseEvent) {
+    this.translateService.get('file-explorer.file-explorer.msg-confirm-delete-file-from-db')
+                         .subscribe(msg =>
+        this.confirmationService.confirm({
+          message: msg,
+          key: 'fileExplorerConfirmation',
+          accept: () => this.deleteFileConfirmed()
+        })
+    );
+  }
+
+  // Actually triggers file delete from db, when confirmed in delete dialog
+  public deleteFileConfirmed() {
+    if (this.contextDescribable != undefined) {
+      const fileLink = this.findLink(this.selectedFileMeta);
+      if (fileLink != undefined) {
+        this.contextFilesService.deleteFile(fileLink, this.getIdent()).subscribe(link => this.handleDelete(link));
+      }
+    } else { // case for files attached to filesAttachables
+      this.filesAttachableService.deleteFile(this.selectedFileMeta.remotePath, this.node)
+        .subscribe(link => this.handleDelete(link));
+    }
+    this.selectedFileMeta = undefined;
+  }
+
+
+  // removes row to fileMetas to reflect server side file delete in client state.
+  private removeRow(link: MDMLink) {
+    if (link != undefined) {
+      const i = this.fileMetas.findIndex(row => link.remotePath === row.remotePath);
+      if (i >= 0) {
+        this.fileMetas.splice(i, 1);
+      }
+    }
+  }
+
+  // adds row to fileMetas to reflect file upload in client state. Lazy loads filesize.
+  private addRow(link: MDMLink) {
+    if (link != undefined) {
+      this.fileMetas.push(this.link2Row(link));
+      if (link.size == undefined) {
+        this.loadSizeLazy(link.remotePath);
+      }
+    }
+  }
+
+  private findLink(fileMeta: FileExplorerRow) {
+    if (fileMeta != undefined) {
+      return this.links.find(l => l.remotePath === fileMeta.remotePath);
+    }
+  }
+
+  private getValues<T>() {
+    if (this.attribute != undefined && this.attribute.value != undefined) {
+      const tmp = this.contextGroup != undefined ? this.attribute.value[this.contextGroup] : this.attribute.value;
+      return tmp !== '' ? tmp : [];
+    }
+  }
+
+  private handleUpload(link: MDMLink) {
+    this.addRow(link);
+    if (this.contextGroup != undefined) {
+      let value = this.attribute.value[this.contextGroup];
+      if (value == undefined || value === '') {
+        value = [];
+      }
+      value.push(link);
+      this.fireOnChange();
+    }
+  }
+
+  private handleDelete(link: MDMLink) {
+    this.removeRow(link);
+    let index = this.attribute.value[this.contextGroup].findIndex( p => p.remotePath === link.remotePath);
+    if (this.contextGroup != undefined) {
+      this.attribute.value[this.contextGroup].splice(index, 1 );
+      this.fireOnChange();
+    }
+  }
+
+  private fireOnChange() {
+    const fileLinkContextWrapper = new FileLinkContextWrapper();
+    fileLinkContextWrapper.attribute = this.attribute;
+    fileLinkContextWrapper.contextComponent = this.node;
+    fileLinkContextWrapper.contextType = this.contextType;
+    this.fileService.fireOnFileChanged(fileLinkContextWrapper);
+  }
+
+  private getIdent() {
+    return new ContextAttributeIdentifier(this.contextDescribable, this.node, this.attribute, this.contextGroup, this.contextType);
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-link-editor-dialog/file-link-editor-dialog.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-link-editor-dialog/file-link-editor-dialog.component.html
new file mode 100644
index 0000000..2253833
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-link-editor-dialog/file-link-editor-dialog.component.html
@@ -0,0 +1,137 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+<div class="p-grid p-align-center">
+  <div class="p-col-2">
+    <label for="name" class="no-margin-bot">{{'file-explorer.file-explorer.hdr-filename' | translate}}</label>
+  </div>
+  <div class="p-col-8">
+    <div *ngIf="file != undefined" id="name">
+      {{file.name}}
+    </div>
+    <div *ngIf="file == undefined">
+      {{link | fileName}}
+    </div>
+  </div>
+  <div class="p-col-2" style="text-align: right;">
+    <!-- upload -->
+    <div class="fileupload btn btn-mdm"
+      title="{{'file-explorer.file-link-editor-dialog.btn-change-file' | translate }}">
+      <input #fileinput
+          id="fileUploadInput"
+          title="{{'file-explorer.file-link-editor-dialog.btn-change-file' | translate }}"
+          class="upload"
+          name="datei"
+          type="file"
+          (change)=onSelectFileForUpload($event)>
+        <span class="fa fa-pencil"></span>
+    </div>
+    <!-- delete -->
+    <button type="button"
+      class="btn btn-mdm"
+      (click)="onDeleteFile($event)"
+      title="{{'file-explorer.file-explorer.btn-delete-file' | translate }}">
+      <span class="fa fa-times"></span>
+    </button>
+    <!-- download -->
+    <!-- <button type="button"
+      class="btn btn-mdm"
+      (click)="onDownloadFile($event)"
+      title="{{'file-explorer.file-explorer.btn-download-file' | translate }}">
+      <span class="fa fa-arrow-circle-o-down"></span>
+    </button> -->
+    <!-- preview -->
+    <!-- <button type="button"
+      class="btn btn-mdm"
+      (click)="onPreviewFile($event)"
+      title="{{'file-explorer.file-explorer.btn-preview-file' | translate }}">
+    <span class="fa fa-search"></span>
+    </button> -->
+
+  </div>
+</div>
+
+<div class="p-grid p-align-center">
+  <div class="p-col-2">
+    <label for="description" class="no-margin-bot">{{'file-explorer.file-explorer.hdr-description' | translate}}</label>
+  </div>
+  <div class="p-col">
+    <input pInputText
+      id="description"
+      [(ngModel)]="link.description"
+      style ="width: 100%">
+  </div>
+</div>
+
+<div class="p-grid p-align-center" >
+  <div class="p-col-2">
+    <label for="type" class="no-margin-bot">{{'file-explorer.file-explorer.hdr-type' | translate}}</label>
+  </div>
+  <div class="p-col">
+    <input pInputText
+      id="type"
+      type="text"
+      [(ngModel)]="link.mimeType"
+      style ="width: 100%">
+  </div>
+</div>
+
+<div class="p-grid p-align-center">
+  <div class="p-col-2">
+      <label for="size" class="no-margin-bot">{{'file-explorer.file-explorer.hdr-size' | translate}}</label>
+  </div>
+  <div class="p-col" id="size">
+    {{link.size}}
+  </div>
+</div>
+
+
+<div class="p-grid p-align-center">
+  <div class="p-col-3 p-offset-6" style="text-align: right;">
+    <button type="button"
+      class="btn btn-mdm"
+      (click)="onSave($event)"
+      title="{{'file-explorer.file-link-editor-dialog.btn-save-changes' | translate }}">
+      <span class="fa fa-check"></span>
+      {{'file-explorer.file-link-editor-dialog.btn-save-changes' | translate }}
+    </button>
+  </div>
+  <div class="p-col-3">
+    <button type="button"
+      class="btn btn-mdm"
+      (click)="onCancel($event)"
+      title="{{'file-explorer.file-link-editor-dialog.btn-cancel' | translate }}">
+      <span class="fa fa-ban"></span>
+      {{'file-explorer.file-link-editor-dialog.btn-cancel' | translate }}
+    </button>
+  </div>
+</div>
+
+<!-- confirm dialog for delete file from data base -->
+<p-confirmDialog #cd key="filePopUpConfirmation"
+    header="{{'file-explorer.file-explorer.ttl-confirmation' | translate }}"
+    icon="fa fa-exclamation-triangle"
+    appendTo="body">
+    <p-footer>
+        <button type="button"
+            (click)="cd.accept()"
+            class="btn btn-mdm">
+            <span class="fa fa-check"></span>
+        </button>
+        <button type="button"
+                (click)="cd.reject()"
+                class="btn btn-mdm">
+                <span class="fa fa-times"></span>
+        </button>
+    </p-footer>
+</p-confirmDialog>
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-link-editor-dialog/file-link-editor-dialog.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-link-editor-dialog/file-link-editor-dialog.component.ts
new file mode 100644
index 0000000..63c586c
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-link-editor-dialog/file-link-editor-dialog.component.ts
@@ -0,0 +1,171 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Component, OnInit, ViewChild, ElementRef} from '@angular/core';
+import { ConfirmationService, DynamicDialogRef, DynamicDialogConfig } from 'primeng/api';
+import { TranslateService } from '@ngx-translate/core';
+
+import { MDMLink } from '@navigator/node';
+
+import { FileUploadRow } from '../../model/file-explorer.model';
+import { FileReaderService } from '../../services/file-reader.service';
+import { ContextFilesService } from '../../services/context-files.service';
+import { FileService } from '../../services/file.service';
+import { ContextAttributeIdentifier } from '@details/model/details.model';
+import { FileSizePipe } from '@file-explorer/pipes/file-size.pipe';
+
+@Component({
+  selector: 'mdm5-file-link-editor-dialog',
+  templateUrl: './file-link-editor-dialog.component.html',
+  styleUrls: ['../file-explorer.css'],
+  providers: [ConfirmationService]
+})
+export class FileLinkEditorDialogComponent implements OnInit {
+
+  @ViewChild('fileinput') input: ElementRef;
+
+  public ident: ContextAttributeIdentifier;
+  public link: MDMLink;
+  public file: File;
+
+  // private translationSub: Subscription;
+
+  constructor(private translateService: TranslateService,
+              private contextFilesService: ContextFilesService,
+              private confirmationService: ConfirmationService,
+              private fileReaderService: FileReaderService,
+              private fileService: FileService,
+              public ref: DynamicDialogRef,
+              public config: DynamicDialogConfig,
+              private fileSizePipe: FileSizePipe) {}
+
+  ngOnInit() {
+    if (this.config != undefined) {
+      this.ident = this.config.data.ident as ContextAttributeIdentifier;
+    }
+    this.link = this.getLink();
+    this.loadSizeLazy();
+  }
+
+  public onUpload(event: Event) {
+    this.input.nativeElement.click();
+  }
+
+  private loadSizeLazy() {
+    if (this.link != undefined && Object.keys(this.link).length !== 0) {
+      this.contextFilesService.loadFileSize(this.link, this.ident)
+        .subscribe(fileSize => this.link.size = fileSize.size);
+    }
+  }
+
+  // listener to add files to upload selection
+  public onSelectFileForUpload(event: Event) {
+    const target = event.target as HTMLInputElement;
+    const files: FileList =  target.files;
+    for (let i = 0; i < files.length; i++) {
+      this.file = files[i];
+      const l = new MDMLink();
+      l.description = this.file.name;
+      l.mimeType = this.file.type || 'application/octet-stream';
+      l.size = this.fileSizePipe.transform(this.file.size);
+      this.link = l;
+    }
+  }
+
+  private getLink() {
+    if (this.ident != undefined && this.ident.attribute != undefined) {
+      const value = this.ident.attribute.value[this.ident.contextGroup];
+      // if (value != undefined && value !== '') {
+        return Object.assign(new MDMLink(), value as MDMLink);
+      // }
+    }
+  }
+
+  // // listener to load blob from db and initialize download dialog for saving file to local filesystem.
+  // public onDownloadFile(event: Event) {
+  //   // const link = this.getLink();
+  //   if (this.link != undefined && this.ident.contextComponent != undefined && this.ident.contextGroup != undefined) {
+  //     this.contextFilesService.loadFile(this.link, this.ident).subscribe(blob => FileSaver.saveAs(blob, this.link.getFileName()));
+  //   }
+  // }
+
+  // // listener for file preview
+  // public onPreviewFile(event: Event) {
+  //   // const link = this.getLink();
+  //   if (this.link != undefined && this.ident.contextComponent != undefined && this.ident.contextGroup != undefined) {
+  //     this.contextFilesService.loadFile(this.link, this.ident)
+  //                             .subscribe(blob => this.preview(blob));
+  //   }
+  // }
+
+  // // handle preview for different browsers. Opens download dialog if preview not possible.
+  // private preview(blob: Blob) {
+  //   // const link = this.getLink();
+  //   if (this.link != undefined) {
+  //     if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+  //         window.navigator.msSaveOrOpenBlob(blob, this.link.getFileName());
+  //     } else {
+  //         window.open(URL.createObjectURL(blob), this.link.getFileName());
+  //     }
+  //   }
+  // }
+
+  // listener for delete file button. Opens confirm dialog.
+  public onDeleteFile(event: Event) {
+    this.translateService.get('file-explorer.file-explorer.msg-confirm-delete-file-from-db')
+      .subscribe(msg =>
+        this.confirmationService.confirm({
+          message: msg,
+          key: 'filePopUpConfirmation',
+          accept: () => this.deleteFileConfirmed()
+        })
+      );
+  }
+
+  // Actually triggers file delete from db, when confirmed in delete dialog
+  private deleteFileConfirmed() {
+    const link = this.getLink();
+    if (link != undefined) {
+      this.contextFilesService.deleteFile(link, this.ident).subscribe(l => this.handleDelete(l));
+    }
+    this.ref.close();
+  }
+
+  /**
+   * Handles delete.
+   * @param link the deleted link
+   */
+  private handleDelete(link: MDMLink) {
+    this.ident.attribute.value[this.ident.contextGroup] = undefined;
+  }
+
+  private handleUplaod(link: MDMLink) {
+    this.ident.attribute.value[this.ident.contextGroup] = link;
+  }
+
+  public async onSave(event: Event) {
+    if (this.file != undefined && this.link.remotePath == undefined) {
+      const dataUrl = await this.fileReaderService.readFile(this.file);
+      const row = new FileUploadRow(this.file, this.link.description, dataUrl);
+      this.contextFilesService.uploadFile(row, this.ident).subscribe(link => this.handleUplaod(link));
+    } else {
+      this.ident.attribute.value[this.ident.contextGroup] = this.link;
+    }
+    this.ref.close();
+  }
+
+  public onCancel(event: Event) {
+    this.ref.close();
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-link-editor/file-link-editor.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-link-editor/file-link-editor.component.html
new file mode 100644
index 0000000..af308b3
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-link-editor/file-link-editor.component.html
@@ -0,0 +1,17 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+<a title="{{ident?.attribute?.value[ident?.contextGroup]?.description}}" href="{{ident?.attribute?.value[ident?.contextGroup]?.remotePath}}">
+    {{ident?.attribute?.value[ident?.contextGroup] | fileName}}
+</a>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-link-editor/file-link-editor.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-link-editor/file-link-editor.component.ts
new file mode 100644
index 0000000..cbad4a3
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-link-editor/file-link-editor.component.ts
@@ -0,0 +1,64 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Component, OnInit, Input } from '@angular/core';
+
+import { DialogService } from 'primeng/api';
+
+import { ContextAttributeIdentifier } from '@details/model/details.model';
+import { MDMLink } from '@navigator/node';
+import { FileLinkEditorDialogComponent } from '../file-link-editor-dialog/file-link-editor-dialog.component';
+import { FileService } from '@file-explorer/services/file.service';
+
+@Component({
+  selector: 'mdm5-file-link-editor',
+  templateUrl: './file-link-editor.component.html'
+})
+export class FileLinkEditorComponent implements OnInit {
+
+  @Input() ident: ContextAttributeIdentifier;
+
+  public link: MDMLink;
+  constructor(private dialogService: DialogService) { }
+
+  ngOnInit() {
+    if (this.ident.attribute != undefined && this.ident.attribute.value != undefined) {
+      this.link = Object.assign(new MDMLink(), this.getValue<MDMLink>());
+    }
+    setTimeout(() => {
+      this.showFileExplorerDialog();
+    });
+  }
+
+  private getValue<T>() {
+    if (this.ident.attribute != undefined && this.ident.attribute.value != undefined) {
+      return <T> (this.ident.contextGroup != undefined ? this.ident.attribute.value[this.ident.contextGroup] : this.ident.attribute.value);
+    }
+  }
+
+  public showFileExplorerDialog() {
+    let title = 'File upload wizard for ' + this.ident.contextComponent.name;
+    if (this.ident.attribute != undefined) {
+      title += '.' + this.ident.attribute.name;
+    }
+
+    const ref = this.dialogService.open(FileLinkEditorDialogComponent, {
+      data: {
+        ident: this.ident
+      },
+      header: title,
+      width: '650px'
+    });
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-link-sequence-editor/file-link-sequence-editor.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-link-sequence-editor/file-link-sequence-editor.component.html
new file mode 100644
index 0000000..58e5f07
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-link-sequence-editor/file-link-sequence-editor.component.html
@@ -0,0 +1,19 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+<div *ngFor="let link of attribute.value[ident.contextGroup]; index as i">
+    <a title="{{attribute.value[ident.contextGroup][i].description}}" href="{{attribute.value[ident.contextGroup][i].remotePath}}">
+        {{attribute.value[ident.contextGroup][i] | fileName}}
+    </a>
+</div>
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-link-sequence-editor/file-link-sequence-editor.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-link-sequence-editor/file-link-sequence-editor.component.ts
new file mode 100644
index 0000000..9fad876
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-link-sequence-editor/file-link-sequence-editor.component.ts
@@ -0,0 +1,77 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Component, Input, OnInit } from '@angular/core';
+
+import { DialogService } from 'primeng/api';
+import { Observable } from 'rxjs';
+
+import { Attribute, MDMLink } from '@navigator/node';
+import { ContextAttributeIdentifier } from '@details/model/details.model';
+
+import { FileExplorerDialogComponent } from '../file-explorer-dialog/file-explorer-dialog.component';
+
+@Component({
+  selector: 'file-link-sequence-editor',
+  templateUrl: './file-link-sequence-editor.component.html'
+})
+export class FileLinkSequenceEditorComponent implements OnInit {
+
+  @Input() ident: ContextAttributeIdentifier;
+  @Input() attribute: Attribute;
+
+  public link: MDMLink;
+  public links: MDMLink[];
+
+  constructor(private dialogService: DialogService) { }
+
+  ngOnInit() {
+    if (this.attribute != undefined && this.attribute.value != undefined) {
+      if (this.getValues() != undefined) {
+        this.links = (this.getValues<MDMLink[]>()).map(l => Object.assign(new MDMLink(), l));
+      }
+    }
+
+    setTimeout(() => {
+      this.onShowFileExplorerDialog();
+    });
+  }
+
+  private getValues<T>() {
+    if (this.attribute != undefined && this.attribute.value != undefined) {
+      const tmp = this.ident.contextGroup != undefined ? this.attribute.value[this.ident.contextGroup] : this.attribute.value;
+      return tmp !== '' ? tmp : undefined;
+    }
+  }
+
+  public onShowFileExplorerDialog() {
+    let title = 'File upload wizard for ' + this.ident.contextComponent.name;
+    if (this.attribute != undefined) {
+      title += '.' + this.attribute.name;
+    }
+
+    const ref = this.dialogService.open(FileExplorerDialogComponent, {
+      data: {
+        contextDescribable: this.ident.contextDescribable,
+        contextComponent: this.ident.contextComponent,
+        attribute: this.attribute,
+        contextGroup: this.ident.contextGroup,
+        contextType: this.ident.contextType,
+        readOnly: false
+      },
+      header: title,
+      width: '70%'
+    });
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-upload-dialog/file-upload-dialog.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-upload-dialog/file-upload-dialog.component.html
new file mode 100644
index 0000000..4a5d6ef
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-upload-dialog/file-upload-dialog.component.html
@@ -0,0 +1,98 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+<p-table [value]="selectedFileMetasUpload">
+    <!-- caption -->
+    <ng-template pTemplate="caption">
+        <!-- add -->
+        <div class="fileupload btn btn-mdm"
+            title="{{'file-explorer.file-explorer.btn-add-files' | translate }}">
+            <span class="fa fa-plus"></span>
+            <input #fileinput
+                id="fileUploadInput"
+                title="{{'file-explorer.file-explorer.btn-add-files' | translate }}"
+                class="upload"
+                name="datei"
+                type="file"
+                (change)=onSelectFileForUpload($event)
+                multiple>
+        </div>
+        <!-- upload -->
+        <button type="button"
+                class="btn btn-mdm"
+                (click)="onUploadSelectedFiles($event)"
+                title="{{'file-explorer.file-explorer.btn-upload-file-selection' | translate }}"
+                [disabled]="selectedFileMetasUpload?.length == 0">
+            <span class="fa fa-check"></span>
+        </button>
+        <!-- remove all -->
+        <button type="button"
+                class="btn btn-mdm"
+                (click)="onClearSelectedFileMetasUpload($event)"
+                title="{{'file-explorer.file-explorer.btn-remove-all-files-from-selection' | translate }}"
+                [disabled]="selectedFileMetasUpload?.length == 0">
+            <span class="fa fa-eraser"></span>
+        </button>
+    </ng-template>
+
+    <!-- header -->
+    <ng-template pTemplate="header">
+        <tr>
+            <th style="width: 50px;"></th>
+            <th>{{'file-explorer.file-explorer.hdr-filename' | translate}}</th>
+            <th>{{'file-explorer.file-explorer.hdr-description' | translate}}</th>
+            <!-- <th>{{'file-explorer.file-explorer.hdr-type' | translate}}</th> -->
+            <th>{{'file-explorer.file-explorer.hdr-size' | translate}}</th>
+            <th style="width: 68px;"></th>
+        </tr>
+    </ng-template>
+
+    <!-- body -->
+    <ng-template pTemplate="body" let-filedata>
+        <tr>
+            <td>
+                <thumbnail [imgUrl]="filedata.dataUrl" [type]="filedata.file.type"></thumbnail>
+            </td>
+            <td>{{filedata.file.name}}</td>
+            <td pEditableColumn>
+              <p-cellEditor>
+                <ng-template pTemplate="input">
+                    <input pInputText type="text" [(ngModel)]="filedata.description">
+                </ng-template>
+                <ng-template pTemplate="output">
+                    {{filedata.description}}
+                </ng-template>
+              </p-cellEditor>
+            </td>
+            <!-- <td pEditableColumn>
+                <p-cellEditor>
+                  <ng-template pTemplate="input">
+                      <input pInputText type="text" [(ngModel)]="filedata.file.type">
+                  </ng-template>
+                  <ng-template pTemplate="output">
+                      {{filedata.file.type}}
+                  </ng-template>
+                </p-cellEditor>
+            </td> -->
+            <td>{{filedata.file.size | fileSize: formatSize.BINARY}}</td>
+            <td>
+                <button type="button"
+                    class="btn btn-mdm"
+                    (click)="onRemoveFile($event, filedata)"
+                    title="{{'file-explorer.file-explorer.btn-remove-file-from-selection' | translate }}">
+                    <span class="fa fa-times"></span>
+                </button>
+            </td>
+        </tr>
+    </ng-template>
+</p-table>
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-upload-dialog/file-upload-dialog.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-upload-dialog/file-upload-dialog.component.ts
new file mode 100644
index 0000000..c491cfe
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/file-upload-dialog/file-upload-dialog.component.ts
@@ -0,0 +1,125 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Component, OnInit, ViewChild, ElementRef, AfterViewInit } from '@angular/core';
+
+import { DynamicDialogRef, DynamicDialogConfig } from 'primeng/primeng';
+
+import { Node, Attribute, ContextGroup } from '@navigator/node';
+import { MDMNotificationService } from '@core/mdm-notification.service';
+
+import { FileUploadRow, FormatSize } from '../../model/file-explorer.model';
+import { FilesAttachableService } from '../../services/files-attachable.service';
+import { ContextFilesService } from './../../services/context-files.service';
+import { FileReaderService } from '../../services/file-reader.service';
+import { ContextAttributeIdentifier } from '@details/model/details.model';
+
+@Component({
+  selector: 'mdm5-file-upload-dialog',
+  templateUrl: './file-upload-dialog.component.html',
+  styleUrls: ['../file-explorer.css']
+})
+export class FileUploadDialogComponent implements OnInit, AfterViewInit {
+
+  @ViewChild('fileinput') input: ElementRef;
+
+  // make enum accessible from html template
+  public formatSize = FormatSize;
+
+  // holding table selection for context menu
+  public selectedFileMetasUpload: FileUploadRow[] = [];
+  // holding selected node and context info incase files is uploaded to context attribute
+  public node: Node;
+  public contextDescribable?: Node;
+  public attribute: Attribute;
+  public contextGroup?: ContextGroup;
+  public contextType?: string;
+
+  constructor(public ref: DynamicDialogRef,
+              public config: DynamicDialogConfig,
+              private filesAttachableService: FilesAttachableService,
+              private contextFilesService: ContextFilesService,
+              private fileReaderService: FileReaderService,
+              private notificationService: MDMNotificationService) { }
+
+  ngOnInit() {
+    this.node = this.config.data.node;
+    this.contextDescribable = this.config.data.contextDescribable;
+    this.attribute = this.config.data.attribute;
+    this.contextGroup = this.config.data.contextGroup;
+    this.contextType = this.config.data.contextType;
+  }
+
+  // opens file select menu for upload on initialization
+  ngAfterViewInit(): void {
+    if ( this.input != undefined) {
+      setTimeout(() => this.input.nativeElement.click());
+    }
+  }
+
+  // helping function to clear file selection for upload overlay panel
+  private resetFileUploadSelection() {
+    this.selectedFileMetasUpload = [];
+  }
+
+  // listener to removeFiles from selection for upload
+  public onRemoveFile(event: MouseEvent, row: FileUploadRow) {
+    let index = this.selectedFileMetasUpload.findIndex(fm => fm === row);
+    if (index > -1) {
+      this.selectedFileMetasUpload.splice(index, 1);
+    }
+  }
+
+  // listener to clear file selection for upload
+  public onClearSelectedFileMetasUpload(event: MouseEvent) {
+    this.resetFileUploadSelection();
+  }
+
+  // listener to add files to upload selection
+  public async onSelectFileForUpload(event: MouseEvent) {
+    const target = event.target as HTMLInputElement;
+    const files: FileList =  target.files;
+    for (let i = 0; i < files.length; i++) {
+        const dataUrl = await this.fileReaderService.readFile(files[i]);
+        if (this.selectedFileMetasUpload.findIndex(fm => fm.file.name === files[i].name) === -1) {
+          this.selectedFileMetasUpload.push(new FileUploadRow(files[i], '', dataUrl));
+        } else {
+          this.notificationService.notifyWarn('File could not be added.',
+            'The selection already contains a file with the name \'' + files[i].name + '\'.');
+        }
+    }
+  }
+
+  // listener to upload selected files
+  // uploads selected files, closes dialog, and returns Observable for server response
+  public onUploadSelectedFiles(event: MouseEvent) {
+    this.ref.close(this.uploadFiles(this.selectedFileMetasUpload));
+  }
+
+  // upload selected files
+  public uploadFiles(fileUploadRows: FileUploadRow[]) {
+    if (fileUploadRows != undefined && this.node != undefined) {
+      if (this.contextDescribable != undefined && this.contextType != undefined && this.contextGroup != undefined
+            && this.attribute != undefined) {
+        return this.contextFilesService.uploadFiles(fileUploadRows, this.getIdent());
+      } else {
+        return this.filesAttachableService.uploadFiles(this.node, fileUploadRows);
+      }
+    }
+  }
+
+  private getIdent() {
+    return new ContextAttributeIdentifier(this.contextDescribable, this.node, this.attribute, this.contextGroup, this.contextType);
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/thumbnail/thumbnail.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/thumbnail/thumbnail.component.html
new file mode 100644
index 0000000..b743089
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/thumbnail/thumbnail.component.html
@@ -0,0 +1,61 @@
+<!-- ********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ******************************************************************************** -->
+<div [ngSwitch]="superType">
+    <!-- audio -->
+    <div *ngSwitchCase="'audio'">
+        <div [ngSwitch]="subType">
+            <span *ngSwitchDefault [ngClass]="'fa fa-file-audio-o fa-' + size + 'x'"></span>
+        </div>
+    </div>
+    <!-- application -->
+    <div *ngSwitchCase="'application'">
+        <div [ngSwitch]="subType">
+            <span *ngSwitchCase="'vnd.openxmlformats-officedocument.wordprocessingml.document'" [ngClass]="'fa fa-file-word-o fa-' + size + 'x'"></span>
+            <span *ngSwitchCase="'vnd.openxmlformats-officedocument.presentationml.presentation'" [ngClass]="'fa fa-file-powerpoint-o fa-' + size + 'x'"></span>
+            <span *ngSwitchCase="'vnd.openxmlformats-officedocument.spreadsheetml.sheet'" [ngClass]="'fa fa-file-excel-o fa-' + size + 'x'"></span>
+            <span *ngSwitchCase="'pdf'" [ngClass]="'fa fa-file-pdf-o fa-' + size + 'x'"></span>
+            <span *ngSwitchCase="'x-zip-compressed'" [ngClass]="'fa fa-file-archive-o fa-' + size + 'x'"></span>
+            <span *ngSwitchDefault [ngClass]="'fa fa-file-o fa-' + size + 'x'"></span>
+        </div>
+    </div>
+    <!-- image -->
+    <div *ngSwitchCase="'image'">
+        <div *ngIf="!imgUrl">
+            <span *ngSwitchDefault [ngClass]="'fa fa-file-image-o fa-' + size + 'x'"></span>
+        </div>
+        <div *ngIf="imgUrl" [ngSwitch]="subType">
+            <img *ngSwitchCase="'png'" [src]="imgUrl" style="max-height: 28px; max-width: 24px;">
+            <img *ngSwitchCase="'jpg'" [src]="imgUrl" style="max-height: 28px; max-width: 24px;">
+            <img *ngSwitchCase="'jpeg'" [src]="imgUrl" style="max-height: 28px; max-width: 24px;">
+            <img *ngSwitchCase="'bmp'" [src]="imgUrl" style="max-height: 28px; max-width: 24px;">
+            <span *ngSwitchDefault [ngClass]="'fa fa-file-image-o fa-' + size + 'x'"></span>
+        </div>
+    </div>
+    <!-- text -->
+    <div *ngSwitchCase="'text'">
+        <div [ngSwitch]="subType">
+            <span *ngSwitchDefault [ngClass]="'fa fa-file-text-o fa-' + size + 'x'"></span>
+        </div>
+    </div>
+    <!-- video -->
+    <div *ngSwitchCase="'video'">
+        <div [ngSwitch]="subType">
+            <span *ngSwitchDefault [ngClass]="'fa fa-file-video-o fa-' + size + 'x'"></span>
+        </div>
+    </div>
+    <!-- default -->
+    <div *ngSwitchDefault>
+        <span [ngClass]="'fa fa-file-o fa-' + size + 'x'"></span>
+    </div>
+</div>
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/thumbnail/thumbnail.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/thumbnail/thumbnail.component.ts
new file mode 100644
index 0000000..2a99815
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/components/thumbnail/thumbnail.component.ts
@@ -0,0 +1,38 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+import { Component, OnInit, Input } from '@angular/core';
+
+@Component({
+    selector: 'thumbnail',
+    templateUrl: 'thumbnail.component.html'
+})
+export class ThumbnailComponent implements OnInit {
+
+    @Input() imgUrl?: any;
+    @Input() type: string;
+    @Input() size = '2';
+
+    public superType: string;
+    public subType: string;
+
+    public ngOnInit() {
+        if (this.type != undefined) {
+            let parts = this.type.split('/');
+            this.superType = parts[0];
+            this.subType = parts[1];
+        }
+    }
+
+    // TODO: support more documents type. render thumbnail for movie files. render thumbnail for more image files.
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/file-explorer.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/file-explorer.module.ts
new file mode 100644
index 0000000..70911dc
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/file-explorer.module.ts
@@ -0,0 +1,94 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+ // Angular Imports
+import { NgModule } from '@angular/core';
+
+// 3rd party modules
+import { TableModule } from 'primeng/table';
+import { FileUploadModule } from 'primeng/fileupload';
+import { ConfirmDialogModule } from 'primeng/confirmdialog';
+import { ConfirmationService, DialogService } from 'primeng/api';
+import { InputTextModule } from 'primeng/inputtext';
+import { DynamicDialogModule } from 'primeng/dynamicdialog';
+import { MenuModule } from 'primeng/menu';
+import { ContextMenuModule } from 'primeng/contextmenu';
+import {SplitButtonModule} from 'primeng/splitbutton';
+
+// MDM modules
+import { MDMCoreModule } from '../core/mdm-core.module';
+
+// This Module's Components
+import { FileSizePipe } from './pipes/file-size.pipe';
+import { ThumbnailComponent } from './components/thumbnail/thumbnail.component';
+import { FileUploadDialogComponent } from './components/file-upload-dialog/file-upload-dialog.component';
+import { FileLinkEditorDialogComponent } from './components/file-link-editor-dialog/file-link-editor-dialog.component';
+import { FileNamePipe } from './pipes/file-name.pipe';
+import { FileExplorerComponent } from './components/file-explorer/file-explorer.component';
+import { FileExplorerDialogComponent } from './components/file-explorer-dialog/file-explorer-dialog.component';
+import { FileAttributeDisplayComponent } from './components/file-attribute-display/file-attribute-display.component';
+import { FileExplorerNavCardComponent } from './components/file-explorer-nav-card/file-explorer-nav-card.component';
+import { FileAttributeViewerComponent } from './components/file-attribute-viewer/file-attribute-viewer.component';
+import { FileLinkSequenceEditorComponent } from './components/file-link-sequence-editor/file-link-sequence-editor.component';
+import { FileLinkEditorComponent } from './components/file-link-editor/file-link-editor.component';
+
+
+@NgModule({
+    imports: [
+        MDMCoreModule,
+        TableModule,
+        DynamicDialogModule,
+        FileUploadModule,
+        ConfirmDialogModule,
+        ContextMenuModule,
+        InputTextModule,
+        MenuModule,
+        SplitButtonModule
+    ],
+    declarations: [
+        ThumbnailComponent,
+        FileSizePipe,
+        FileUploadDialogComponent,
+        FileLinkEditorDialogComponent,
+        FileNamePipe,
+        FileExplorerComponent,
+        FileExplorerDialogComponent,
+        FileAttributeDisplayComponent,
+        FileAttributeViewerComponent,
+        FileLinkSequenceEditorComponent,
+        FileExplorerNavCardComponent,
+        FileLinkEditorComponent
+    ],
+    exports: [
+        FileExplorerDialogComponent,
+        FileExplorerNavCardComponent,
+        FileAttributeViewerComponent,
+        FileLinkSequenceEditorComponent,
+        FileLinkEditorComponent,
+        FileAttributeDisplayComponent,
+        FileLinkEditorDialogComponent
+    ],
+    providers: [
+        FileNamePipe,
+        FileSizePipe,
+        DialogService
+    ],
+    entryComponents: [
+        FileUploadDialogComponent,
+        FileExplorerDialogComponent,
+        FileLinkEditorDialogComponent
+    ]
+})
+export class FileExplorerModule {
+
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/file-explorer.model.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/file-explorer.model.ts
new file mode 100644
index 0000000..3da9bdf
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/file-explorer.model.ts
@@ -0,0 +1,21 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+// Grouping file to enable import from central point.
+export { FileExplorerColumn } from './types/file-explorer-column.model';
+export { FileExplorerRow } from './types/file-explorer-row.model';
+export { FileUploadRow } from './types/file-upload-row.model';
+export { FormatSize } from './types/format-size.model';
+export { MDMBlob } from './types/mdm-blob.model';
+export { FileLinkContextWrapper } from './types/filelink-context-wrapper.model';
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/types/file-explorer-column.model.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/types/file-explorer-column.model.ts
new file mode 100644
index 0000000..fa18213
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/types/file-explorer-column.model.ts
@@ -0,0 +1,23 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+export class FileExplorerColumn {
+  field: string;
+  header: string;
+
+  constructor (field: string, header: string) {
+    this.field = field;
+    this.header = header;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/types/file-explorer-row.model.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/types/file-explorer-row.model.ts
new file mode 100644
index 0000000..e31def7
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/types/file-explorer-row.model.ts
@@ -0,0 +1,31 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+export class FileExplorerRow {
+    filename: string;
+    description: string;
+    type: string;
+    size: string;
+    // remotePath is unique for one file-attachable MDM object
+    // and is used as identifier: fileExplorerRow <-> MDMLink
+    remotePath: string;
+
+    constructor (remotePath: string, filename: string, description: string, type: string, size: string) {
+        this.remotePath = remotePath;
+        this.filename = filename;
+        this.description = description;
+        this.type = type;
+        this.size = size;
+    }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/types/file-upload-row.model.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/types/file-upload-row.model.ts
new file mode 100644
index 0000000..be7afec
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/types/file-upload-row.model.ts
@@ -0,0 +1,25 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+export class FileUploadRow {
+    file: File;
+    description: string;
+    dataUrl: any;
+
+    constructor (file: File, description: string, dataUrl: any) {
+        this.file = file;
+        this.description = description;
+        this.dataUrl = dataUrl;
+    }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/types/filelink-context-wrapper.model.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/types/filelink-context-wrapper.model.ts
new file mode 100644
index 0000000..82dd640
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/types/filelink-context-wrapper.model.ts
@@ -0,0 +1,22 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { MDMLink, Attribute, Node } from 'src/app/navigator/node';
+
+export class FileLinkContextWrapper {
+    fileLink: MDMLink;
+    contextType: string;
+    contextComponent: Node;
+    attribute: Attribute;
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/types/format-size.model.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/types/format-size.model.ts
new file mode 100644
index 0000000..b4df183
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/types/format-size.model.ts
@@ -0,0 +1,18 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+export enum FormatSize {
+    DECIMAL = 1000,
+    BINARY = 1024
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/types/mdm-blob.model.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/types/mdm-blob.model.ts
new file mode 100644
index 0000000..da6b8b7
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/model/types/mdm-blob.model.ts
@@ -0,0 +1,17 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+export class MDMBlob {
+    mimeType: string;
+    blob: Blob;
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/pipes/file-name.pipe.spec.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/pipes/file-name.pipe.spec.ts
new file mode 100644
index 0000000..c40680e
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/pipes/file-name.pipe.spec.ts
@@ -0,0 +1,22 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { FileNamePipe } from './file-name.pipe';
+
+describe('FileNamePipe', () => {
+  it('create an instance', () => {
+    const pipe = new FileNamePipe();
+    expect(pipe).toBeTruthy();
+  });
+});
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/pipes/file-name.pipe.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/pipes/file-name.pipe.ts
new file mode 100644
index 0000000..cbec201
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/pipes/file-name.pipe.ts
@@ -0,0 +1,27 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Pipe, PipeTransform } from '@angular/core';
+import { MDMLink } from '@navigator/node';
+
+@Pipe({
+  name: 'fileName'
+})
+export class FileNamePipe implements PipeTransform {
+
+  transform(link: MDMLink): any {
+    return link != undefined ? Object.assign(new MDMLink(), link).getFileName() : '';
+  }
+
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/pipes/file-size.pipe.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/pipes/file-size.pipe.ts
new file mode 100644
index 0000000..263d0f8
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/pipes/file-size.pipe.ts
@@ -0,0 +1,55 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Pipe, PipeTransform } from '@angular/core';
+// this projects imports
+import { FormatSize } from '../model/file-explorer.model';
+
+@Pipe({name: 'fileSize'})
+export class FileSizePipe implements PipeTransform {
+
+    constructor() {}
+
+    public transform(bytes: number | string, format?: FormatSize) {
+      let result = '-';
+      if (typeof(bytes) === 'string') {
+        result = bytes;
+      } else {
+        if (bytes == undefined) {
+          result = '-';
+        }
+        if (format == undefined) {
+            format = FormatSize.BINARY;
+        }
+        if (Math.abs(bytes) < format) {
+          result =  bytes + ' B';
+        }
+        let units: string[];
+        switch (format) {
+            case FormatSize.DECIMAL:
+            units = ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
+            break;
+            case FormatSize.BINARY:
+            units = ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];
+        }
+        let u = -1;
+        do {
+            bytes /= format;
+            ++u;
+        } while (Math.abs(bytes) >= format && u < units.length - 1);
+        result = bytes.toFixed(1) + ' ' + units[u];
+      }
+      return result;
+    }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/services/context-files.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/services/context-files.service.ts
new file mode 100644
index 0000000..9ab6c93
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/services/context-files.service.ts
@@ -0,0 +1,147 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Injectable } from '@angular/core';
+import { Http, Headers, RequestMethod, ResponseContentType } from '@angular/http';
+
+import { map, tap, concatMap } from 'rxjs/operators';
+import { from } from 'rxjs';
+import { plainToClass } from 'class-transformer';
+
+import { HttpErrorHandler } from '@core/http-error-handler';
+import { MDMNotificationService } from '@core/mdm-notification.service';
+import { PropertyService } from '@core/property.service';
+import { MDMLink, FileSize, Node, Attribute, ContextGroup } from '@navigator/node';
+import { FileUploadRow } from '../model/file-explorer.model';
+import { ContextAttributeIdentifier } from '@details/model/details.model';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class ContextFilesService {
+
+  private contextUrl: string;
+
+  constructor (private http: Http,
+               private httpErrorHandler: HttpErrorHandler,
+               private notificationService: MDMNotificationService,
+               private _prop: PropertyService) {
+    this.contextUrl = _prop.getUrl('mdm/environments');
+  }
+
+  public getUrl(ident: ContextAttributeIdentifier, remotePath: string) {
+      return this.getFileEndpoint(ident) + '/' + this.escapeUrlCharacters(remotePath);
+  }
+
+  private getFileEndpoint(ident: ContextAttributeIdentifier) {
+    return this.contextUrl
+    + '/' + ident.contextComponent.sourceName
+    + '/' + this.contextGroupToUrl(ident.contextGroup)
+    + '/' + ident.contextDescribable.id
+    + '/contexts'
+    + '/' + ident.contextType
+    + '/' + this.escapeUrlCharacters(ident.contextComponent.name)
+    + '/' + this.escapeUrlCharacters(ident.attribute.name)
+    + '/files';
+  }
+
+  // loads file size from server for file with given remote path
+  public loadFileSize(link: MDMLink, ident: ContextAttributeIdentifier) {
+
+    const endpoint = this.getFileEndpoint(ident)
+          + '/size/' + this.escapeUrlCharacters(link.remotePath);
+
+    return this.http.get(endpoint)
+                    .pipe(
+                      map(res => plainToClass(FileSize, res.json() as FileSize))
+                    )
+                    .catch(this.httpErrorHandler.handleError);
+  }
+
+  // loads file in context from server, returns file as blob.
+  public loadFile(link: MDMLink, ident: ContextAttributeIdentifier) {
+
+    const headers = new Headers({});
+    const endpoint = this.getFileEndpoint(ident)
+                      + '/' + this.escapeUrlCharacters(link.remotePath);
+
+    return this.http.get(endpoint, { method: RequestMethod.Get,
+                                      responseType: ResponseContentType.Blob,
+                                      headers: headers })
+                    .pipe(
+                      map(res => res.blob())
+                    )
+                    .catch(this.httpErrorHandler.handleError);
+  }
+
+  // Uploads multiple files. Http requests are chained to avoid concurrency in server side update process.
+  public uploadFiles(files: FileUploadRow[], ident: ContextAttributeIdentifier) {
+    return from(files).pipe(
+              concatMap(file => this.uploadFile(file, ident))
+            );
+  }
+
+  // upload file
+  public uploadFile(fileData: FileUploadRow, ident: ContextAttributeIdentifier) {
+
+    const fd = new FormData();
+    fd.append('file', fileData.file, fileData.file.name);
+    fd.append('mimeType', fileData.file.type);
+    fd.append('description', fileData.description);
+
+    const endpoint = this.getFileEndpoint(ident);
+
+    return this.http.post(endpoint , fd)
+            .pipe(
+              map(res => plainToClass(MDMLink, res.json() as MDMLink)),
+              tap(link => this.notificationService.notifySuccess(
+                          'File created.',
+                          'The file ' + link.remotePath.substring(link.remotePath.lastIndexOf('/') + 1)
+                          + ' has been successfully created.'
+                          ))
+            )
+            .catch(this.httpErrorHandler.handleError);
+  }
+
+  // delete file from server
+  public deleteFile(link: MDMLink, ident: ContextAttributeIdentifier) {
+    const endpoint = this.getFileEndpoint(ident)
+                    + '/' + this.escapeUrlCharacters(link.remotePath);
+
+    return this.http.delete(endpoint)
+            .pipe(
+              map(res => plainToClass(MDMLink, res.json() as MDMLink)),
+              tap(flink => this.notificationService.notifySuccess(
+                          'File deleted.',
+                          'The file ' + flink.remotePath.substring(flink.remotePath.lastIndexOf('/') + 1)
+                          + ' has been successfully deleted from file system.'
+                          ))
+            )
+            .catch(this.httpErrorHandler.handleError);
+  }
+
+  private contextGroupToUrl(type: number) {
+    switch (type) {
+      case 0:
+        return 'teststeps';
+      case 1:
+        return 'measurements';
+    }
+  }
+
+  // replaces / by %2F to not break url
+  private escapeUrlCharacters(urlString: string) {
+    return urlString.replace(/\//g, '%2F').replace(/\./g, '%2E').replace(/ /g, '%20');
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/services/file-reader.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/services/file-reader.service.ts
new file mode 100644
index 0000000..d04b08d
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/services/file-reader.service.ts
@@ -0,0 +1,35 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+import { Injectable } from '@angular/core';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class FileReaderService {
+
+  constructor() { }
+
+  // reads file from filesystem.
+  public readFile(inputFile: File) {
+    const reader = new FileReader();
+    return new Promise((resolve, reject) => {
+      reader.onerror = () => {
+        reader.abort();
+        reject(new DOMException('Problem parsing input file.'));
+      };
+      reader.onloadend = () => resolve(reader.result);
+      reader.readAsDataURL(inputFile);
+    });
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/services/file.service.spec.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/services/file.service.spec.ts
new file mode 100644
index 0000000..84fcefc
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/services/file.service.spec.ts
@@ -0,0 +1,12 @@
+import { TestBed } from '@angular/core/testing';
+
+import { FileService } from './file.service';
+
+describe('FileService', () => {
+  beforeEach(() => TestBed.configureTestingModule({}));
+
+  it('should be created', () => {
+    const service: FileService = TestBed.get(FileService);
+    expect(service).toBeTruthy();
+  });
+});
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/services/file.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/services/file.service.ts
new file mode 100644
index 0000000..95b983e
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/services/file.service.ts
@@ -0,0 +1,37 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Injectable } from '@angular/core';
+import { Subject } from 'rxjs';
+import { FileLinkContextWrapper } from '../model/file-explorer.model';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class FileService {
+
+  private fileChangedSubject = new Subject<FileLinkContextWrapper>();
+
+  constructor() { }
+
+  // Emitter for attributes to save for default saving mechanism
+  public fireOnFileChanged(fileLinkContextWrapper: FileLinkContextWrapper) {
+    this.fileChangedSubject.next(fileLinkContextWrapper);
+  }
+
+  // Returns Observable for listners to subscribe to attributes to save for default saving mechanism
+  public onFileChanged() {
+    return this.fileChangedSubject.asObservable();
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/services/files-attachable.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/services/files-attachable.service.ts
new file mode 100644
index 0000000..2559380
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/file-explorer/services/files-attachable.service.ts
@@ -0,0 +1,150 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Injectable} from '@angular/core';
+import { Http, Headers, RequestMethod, ResponseContentType} from '@angular/http';
+
+import { plainToClass } from 'class-transformer';
+import { map, tap, concatMap } from 'rxjs/operators';
+import { from } from 'rxjs';
+
+import { MDMNotificationService } from '@core/mdm-notification.service';
+import { HttpErrorHandler } from '@core/http-error-handler';
+import { PropertyService } from '@core/property.service';
+import { Node, MDMLink, FileSize } from '@navigator/node';
+
+import { FileUploadRow } from '../model/file-explorer.model';
+
+@Injectable()
+export class FilesAttachableService {
+
+  public static readonly MDM_LINKS = 'MDMLinks';
+
+  private contextUrl: string;
+
+  constructor (private http: Http,
+               private httpErrorHandler: HttpErrorHandler,
+               private notificationService: MDMNotificationService,
+               private _prop: PropertyService) {
+    this.contextUrl = _prop.getUrl('mdm/environments');
+  }
+
+  public getFilesEndpoint(node: Node) {
+    const urlType = this.typeToUrl(node.sourceType);
+
+    return this.contextUrl
+      + '/' + node.sourceName
+      + '/' + urlType
+      + '/' + node.id
+      + '/files';
+  }
+
+  // loads file for fileatachable from server, returns file as blob.
+  public loadFile(remotePath: string, node: Node) {
+    const headers = new Headers({});
+
+    const endpoint = this.getFilesEndpoint(node) + '/' + this.escapeUrlCharacters(remotePath);
+
+    return this.http.get(endpoint, { method: RequestMethod.Get,
+                                     responseType: ResponseContentType.Blob,
+                                     headers: headers })
+                    .pipe(
+                      map(res => res.blob())
+                    )
+                    .catch(this.httpErrorHandler.handleError);
+  }
+
+  // loads file size from server for file with given remote path
+  public loadFileSize(remotePath: string, node: Node) {
+    const endpoint = this.getFilesEndpoint(node) + '/size/' + this.escapeUrlCharacters(remotePath);
+
+    return this.http.get(endpoint)
+                    .pipe(
+                      map(res => plainToClass(FileSize, res.json() as FileSize))
+                    )
+                    .catch(this.httpErrorHandler.handleError);
+  }
+
+  // loads file sizes from server for all files attached to given entity
+  public loadFileSizes(node: Node) {
+    const endpoint = this.getFilesEndpoint(node) + '/sizes';
+
+    return this.http.get(endpoint)
+                    .pipe(
+                      map(res => plainToClass(FileSize, res.json() as FileSize[]))
+                    )
+                    .catch(this.httpErrorHandler.handleError);
+  }
+
+  // Uploads multiple files. Http requests are chained to avoid concurrency in server side update process.
+  public uploadFiles(node: Node, files: FileUploadRow[]) {
+    return from(files).pipe(
+              concatMap(file => this.uploadFile(node, file))
+            );
+  }
+
+  // upload file
+  public uploadFile(node: Node, fileData: FileUploadRow) {
+    const fd = new FormData();
+    fd.append('file', fileData.file, fileData.file.name);
+    // fd.append('size', fileData.file.size.toString());
+    fd.append('mimeType', fileData.file.type);
+    fd.append('description', fileData.description);
+
+    const endpoint = this.getFilesEndpoint(node);
+    return this.http.post(endpoint , fd)
+            .pipe(
+              map(res => plainToClass(MDMLink, res.json() as MDMLink)),
+              tap(link => this.notificationService.notifySuccess(
+                          'File created.',
+                          'The file ' + link.remotePath.substring(link.remotePath.lastIndexOf('/') + 1)
+                          + ' has been successfully created.'
+                          ))
+            )
+            .catch(this.httpErrorHandler.handleError);
+  }
+
+  // delete file from server
+  public deleteFile(remotePath: string, node: Node) {
+    const endpoint = this.getFilesEndpoint(node) + '/' + this.escapeUrlCharacters(remotePath);
+
+    return this.http.delete(endpoint)
+            .pipe(
+              map(res => plainToClass(MDMLink, res.json() as MDMLink)),
+              tap(link => this.notificationService.notifySuccess(
+                          'File deleted.',
+                          'The file ' + link.remotePath.substring(link.remotePath.lastIndexOf('/') + 1)
+                          + ' has been successfully deleted from file system.'
+                          ))
+            )
+            .catch(this.httpErrorHandler.handleError);
+  }
+
+  // helping function to map sourceType to proper url for endpoint.
+  private typeToUrl(type: string) {
+    if (type != undefined) {
+      switch (type) {
+        case 'MeaResult':
+          return 'measurements';
+        default:
+          return type.toLowerCase() + 's';
+      }
+    }
+  }
+
+  // replaces / by %2F to not break url
+  private escapeUrlCharacters(urlString: string) {
+    return urlString.replace(/\//g, '%2F').replace(/\./g, '%2E');
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/filerelease.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/filerelease.service.ts
new file mode 100644
index 0000000..4ded0ed
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/filerelease.service.ts
@@ -0,0 +1,148 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Injectable} from '@angular/core';
+import {Http, Response, Headers, RequestOptions} from '@angular/http';
+import {catchError, map} from 'rxjs/operators';
+import {HttpErrorHandler} from '../core/http-error-handler';
+import {PropertyService} from '../core/property.service';
+
+import { TRANSLATE } from '../core/mdm-core.module';
+
+@Injectable()
+export class FilereleaseService {
+  url: string;
+  stateMap = new Array();
+  formatMap = new Array();
+  month = new Array();
+
+  constructor(private http: Http,
+              private httpErrorHandler: HttpErrorHandler,
+              private prop: PropertyService) {
+
+    this.url = prop.getUrl('mdm/filereleases');
+
+    this.formatMap['PAK2RAW'] = TRANSLATE('filerelease.filerelease.format-pak2raw');
+    this.formatMap['PAK2ATFX'] = TRANSLATE('filerelease.filerelease.format-pak2atfx');
+
+    this.stateMap['RELEASE_ORDERED'] = TRANSLATE('filerelease.filerelease.state-release-ordered');
+    this.stateMap['RELEASE_APPROVED'] = TRANSLATE('filerelease.filerelease.state-release-approved');
+    this.stateMap['RELEASE_RELEASED'] = TRANSLATE('filerelease.filerelease.state-release-released');
+    this.stateMap['RELEASE_EXPIRED'] = TRANSLATE('filerelease.filerelease.state-release-expired');
+    this.stateMap['RELEASE_PROGRESSING_ERROR'] = TRANSLATE('filerelease.filerelease.state-release-processing-error');
+    this.stateMap['RELEASE_PROGRESSING'] = TRANSLATE('filerelease.filerelease.state-release-in-process');
+    this.stateMap['RELEASE_REJECTED'] = TRANSLATE('filerelease.filerelease.state-release-declined');
+
+    this.month[0] = '1';
+    this.month[1] = '2';
+    this.month[2] = '3';
+    this.month[3] = '4';
+    this.month[4] = '5';
+    this.month[5] = '6';
+    this.month[6] = '7';
+    this.month[7] = '8';
+    this.month[8] = '9';
+    this.month[9] = '10';
+    this.month[10] = '11';
+    this.month[11] = '12';
+  }
+
+  readAll() {
+    return this.read('');
+  }
+
+  readIncomming() {
+    return this.read('?direction=incomming');
+  }
+
+  readOutgoging() {
+    return this.read('?direction=outgoing');
+  }
+
+  create(release: Release) {
+    let body = JSON.stringify(release);
+    let headers = new Headers({ 'Content-Type': 'application/json' });
+    let options = new RequestOptions({ headers: headers });
+    return this.http.post(this.url, body, options).pipe(
+                    map(this.extractData),
+                    catchError(this.httpErrorHandler.handleError));
+  }
+
+  delete(release: Release) {
+    return this.http.delete(this.url + '/' + release.identifier).pipe(
+      catchError(this.httpErrorHandler.handleError));
+  }
+
+  approve(release: Release) {
+    release.state = 'RELEASE_APPROVED';
+    return this.update(release).pipe(
+      catchError(this.httpErrorHandler.handleError));
+  }
+
+  reject(release: Release) {
+    release.state = 'RELEASE_REJECTED';
+    return this.update(release).pipe(
+      catchError(this.httpErrorHandler.handleError));
+  }
+
+  formatDate(date) {
+    let d = new Date(date);
+    let day = d.getDate();
+    let month = this.month[d.getMonth()];
+    let year = d.getFullYear();
+    let hours = (d.getHours() < 10 ? '0' : '') + d.getHours();
+    let min = (d.getMinutes() < 10 ? '0' : '') + d.getMinutes();
+    let sec = (d.getSeconds() < 10 ? '0' : '') + d.getSeconds();
+    return day + '.' + month + '.' + year + ' ' + hours + ':' + min + ':' + sec;
+  }
+
+  private read(query: string) {
+    return this.http.get(this.url + query).pipe(
+      map(res => <Release[]> res.json().data),
+      catchError(this.httpErrorHandler.handleError));
+  }
+
+  private update(release: Release) {
+    let body = JSON.stringify(release);
+    let headers = new Headers({ 'Content-Type': 'application/json' });
+    let options = new RequestOptions({ headers: headers });
+    return this.http.post(this.url + '/' + release.identifier, body, options).pipe(
+                    map(this.extractData),
+                    catchError(this.httpErrorHandler.handleError));
+  }
+
+  private extractData(res: Response) {
+    let body = res.json();
+    return body.data || { };
+  }
+}
+
+export class Release {
+  identifier: string;
+  state: string;
+  name: string;
+  sourceName: string;
+  typeName: string;
+  id: string;
+  sender: string;
+  receiver: string;
+  orderMessage: string;
+  rejectMessage: string;
+  errorMessage: string;
+  format: string;
+  fileLink: string;
+  validity: number;
+  expire: number;
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease-create.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease-create.component.html
new file mode 100644
index 0000000..531b588
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease-create.component.html
@@ -0,0 +1,66 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+
+<button type="button" class="btn btn-default" (click)="lgModal.show()" [disabled]="disabled" style="border-bottom-left-radius: 0; border-top-left-radius: 0;">{{ 'filerelease.mdm-filerelease-create.btn-release-request' | translate }}</button>
+
+<div bsModal #lgModal="bs-modal" class="modal fade" tabindex="-1" role="dialog">
+  <div class="modal-dialog modal-lg">
+    <div class="modal-content">
+      <div class="modal-header">
+        <button type="button" class="close" (click)="lgModal.hide()">
+          <span aria-hidden="true">&times;</span>
+        </button>
+        <h4 class="modal-title">{{ 'filerelease.mdm-filerelease-create.title-release' | translate }}</h4>
+      </div>
+      <div class="modal-body">
+        <form (ngSubmit)="createRelease()" #request="ngForm">
+          <div class="form-group">
+            <div [ngClass]="validity.valid ? 'has-success' : 'has-error'">
+              <label class="col-form-label col-sm-2" for="validity">{{ 'filerelease.mdm-filerelease-create.lbl-validity-days' | translate }}:</label>
+              <div class="col-sm-10">
+                <select name="validity" [(ngModel)]="release.validity" ngControl="validity" #validity="ngModel" class="form-control" required>
+                  <option *ngFor="let opt of expire" [ngValue]="opt">{{opt}}</option>
+                </select>
+              </div>
+            </div>
+
+            <div [ngClass]="format.valid ? 'has-success' : 'has-error'">
+              <label class="col-form-label col-sm-2" for="format">{{ 'filerelease.mdm-filerelease-create.lbl-format' | translate }}:</label>
+              <div class="col-sm-10">
+                <select name="format" [(ngModel)]="release.format" ngControl="format" #format="ngModel" class="form-control" required>
+                  <option *ngFor="let opt of options" [ngValue]="opt">{{ getFormat(opt) | translate }}</option>
+                </select>
+              </div>
+            </div>
+
+            <div [ngClass]="orderMessage.valid ? 'has-success' : 'has-error'">
+              <label class="col-form-label col-sm-2" for="orderMessage">{{ 'filerelease.mdm-filerelease-create.lbl-reason' | translate }}:</label>
+              <div class="col-sm-10">
+                <textarea name="orderMessage" [(ngModel)]="release.orderMessage" ngControl="orderMessage" #orderMessage="ngModel" cols="35" rows="4" class="form-control" required></textarea>
+              </div>
+            </div>
+            <div class="row">
+              <div class="col-xs-12" style="margin-top: 15px; margin-bottom:-15px; padding-right: 30px; text-align: right;">
+                <div class="btn-group">
+                  <button type="submit" class="btn btn-default" [disabled]=!request.form.valid>{{ 'filerelease.mdm-filerelease-create.btn-send' | translate }}</button>
+                </div>
+              </div>
+            </div>
+          </div>
+        </form>
+      </div>
+    </div>
+  </div>
+</div>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease-create.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease-create.component.ts
new file mode 100644
index 0000000..d5a556e
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease-create.component.ts
@@ -0,0 +1,75 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Component, Input, Output, EventEmitter, ViewChild} from '@angular/core';
+import { ModalDirective } from 'ngx-bootstrap';
+import {Release, FilereleaseService} from './filerelease.service';
+import {Node} from '../navigator/node';
+
+import {MDMNotificationService} from '../core/mdm-notification.service';
+
+import { TranslateService } from '@ngx-translate/core';
+
+@Component({
+  selector: 'mdm-filerelease-create',
+  templateUrl: 'mdm-filerelease-create.component.html'
+})
+export class MDMFilereleaseCreateComponent {
+
+  @Input() disabled: boolean;
+  @Input() node: Node;
+  @Output() onSubmit = new EventEmitter<boolean>();
+  release: Release = new Release;
+  options = ['PAK2RAW', 'PAK2ATFX'];
+  expire = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
+
+  @ViewChild('lgModal')
+  lgModal: ModalDirective;
+
+  constructor(private service: FilereleaseService,
+              private notificationService: MDMNotificationService,
+              private translateService: TranslateService) {}
+
+  getFormat(key) {
+      return this.service.formatMap[key];
+  }
+
+  createRelease() {
+    this.release.identifier = '';
+    this.release.state = '';
+    this.release.name = this.node.name;
+    this.release.sourceName = this.node.sourceName;
+    this.release.typeName = this.node.type;
+    this.release.id = this.node.id;
+    this.release.sender = '';
+    this.release.receiver = '';
+    this.release.rejectMessage = '';
+    this.release.errorMessage = '';
+    this.release.fileLink = '';
+    this.release.expire = 0;
+    this.service.create(this.release).subscribe(
+      release => this.release = release,
+      error => this.notificationService.notifyError(
+        this.translateService.instant('filerelease.mdm-filerelease-create.err-cannot-create-release'), error)
+    );
+    this.clear();
+    this.onSubmit.emit(true);
+    this.lgModal.hide();
+  }
+
+  clear() {
+    this.release = new Release();
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease-display.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease-display.component.html
new file mode 100644
index 0000000..d14eb80
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease-display.component.html
@@ -0,0 +1,49 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+
+<table class="table table-bordered">
+  <tbody>
+    <tr>
+      <td>{{ 'filerelease.mdm-filerelease-display.lbl-test-name' | translate }}:</td><td>{{release.name}}</td>
+    </tr>
+    <tr>
+      <td>{{ 'filerelease.mdm-filerelease-display.lbl-error-message' | translate }}:</td><td>{{release.errorMessage}}</td>
+    </tr>
+    <tr>
+      <td>{{ 'filerelease.mdm-filerelease-display.lbl-expires-on' | translate }}:</td><td>{{getDate(release.expire)}}</td>
+    </tr>
+    <tr>
+      <td>{{ 'filerelease.mdm-filerelease-display.tlbl-format' | translate }}:</td><td>{{getFormat(release.format)}}</td>
+    </tr>
+    <tr>
+      <td>{{ 'filerelease.mdm-filerelease-display.lbl-reason-for-release' | translate }}:</td><td>{{release.orderMessage}}</td>
+    </tr>
+    <tr>
+      <td>{{ 'filerelease.mdm-filerelease-display.lbl-reason-for-declining' | translate }}:</td><td>{{release.rejectMessage}}</td>
+    </tr>
+    <tr>
+      <td>{{ 'filerelease.mdm-filerelease-display.lbl-requested-by' | translate }}:</td><td>{{release.sender}}</td>
+    </tr>
+    <tr>
+      <td>{{ 'filerelease.mdm-filerelease-display.lbl-test-responsible-person' | translate }}:</td><td>{{release.receiver}}</td>
+    </tr>
+    <tr>
+      <td>{{ 'filerelease.mdm-filerelease-display.lbl-state' | translate }}:</td><td>{{getState(release.state)}}</td>
+    </tr>
+    <tr>
+      <td>{{ 'filerelease.mdm-filerelease-display.lbl-validity' | translate }}:</td><td>{{release.validity}} Tage</td>
+    </tr>
+  </tbody>
+</table>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease-display.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease-display.component.ts
new file mode 100644
index 0000000..6f79e7e
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease-display.component.ts
@@ -0,0 +1,42 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Component, Input} from '@angular/core';
+import {Release, FilereleaseService} from './filerelease.service';
+
+@Component({
+  selector: 'mdm-filerelease-display',
+  templateUrl: 'mdm-filerelease-display.component.html',
+  styles: [],
+  providers: []
+})
+export class MDMFilereleaseDisplayComponent {
+  @Input() release: Release;
+
+  constructor(private service: FilereleaseService) {}
+
+  getFormat(format) {
+    return this.service.formatMap[format];
+  }
+
+  getState(state) {
+    return this.service.stateMap[state];
+  }
+
+  getDate(date) {
+    if (date === 0) { return; }
+    return this.service.formatDate(date);
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease.component.html
new file mode 100644
index 0000000..109cf23
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease.component.html
@@ -0,0 +1,128 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+
+<style>
+  .container-fluid {
+    padding: 0;
+  }
+</style>
+<div class="container-fluid">
+  <div class="box" style="margin-bottom: 15px;">
+    <div class="well">
+      <h2>{{ 'filerelease.mdm-filerelease.incoming-release-requests' | translate }}</h2>
+    </div>
+    <table class="table table-hover">
+      <thead>
+        <tr>
+          <th>{{ 'filerelease.mdm-filerelease.tblhdr-test-name' | translate }}</th>
+          <th>{{ 'filerelease.mdm-filerelease.tblhdr-request-submitted-by' | translate }}</th>
+          <th>{{ 'filerelease.mdm-filerelease.tblhdr-release-validity' | translate }}</th>
+          <th>{{ 'filerelease.mdm-filerelease.tblhdr-release-expires-on' | translate }}</th>
+          <th>{{ 'filerelease.mdm-filerelease.tblhdr-status' | translate }}</th>
+          <th>{{ 'filerelease.mdm-filerelease.tblhdr-format' | translate }}</th>
+          <th></th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr *ngFor="let data of incoming" [ngClass]="getState(data)" (click)=setData(data) (click)='setEvent("approve")' (click)=lgModal.show()>
+          <td>{{ data.name }}</td>
+          <td>{{ data.sender }}</td>
+          <td>{{ data.validity }} {{ 'filerelease.mdm-filerelease.days' | translate }}</td>
+          <td>{{ getDate(data.expire) }}</td>
+          <td>{{ getTransState(data.state) | translate }}</td>
+          <td>{{ getFormat(data.format) | translate }}</td>
+          <td></td>
+        </tr>
+      </tbody>
+    </table>
+  </div>
+</div>
+<div class="container-fluid">
+  <div class="box">
+    <div class="well">
+      <h2>{{ 'filerelease.mdm-filerelease.outgoing-release-requests' | translate }}</h2>
+    </div>
+    <table class="table table-hover">
+      <thead>
+        <tr>
+          <th>{{ 'filerelease.mdm-filerelease.tblhdr-test-name' | translate }}</th>
+          <th>{{ 'filerelease.mdm-filerelease.tblhdr-test-responsible-person' | translate }}</th>
+          <th>{{ 'filerelease.mdm-filerelease.tblhdr-release-validity' | translate }}</th>
+          <th>{{ 'filerelease.mdm-filerelease.tblhdr-release-expires-on' | translate }}</th>
+          <th>{{ 'filerelease.mdm-filerelease.tblhdr-status' | translate }}</th>
+          <th>{{ 'filerelease.mdm-filerelease.tblhdr-format' | translate }}</th>
+          <th>{{ 'filerelease.mdm-filerelease.tblhdr-download' | translate }}</th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr *ngFor="let data of outgoing" [ngClass]="getState(data)" (click)=setData(data) (click)='setEvent("edit")'>
+          <td (click)=lgModal.show()>{{ data.name }}</td>
+          <td (click)=lgModal.show()>{{ data.receiver }}</td>
+          <td (click)=lgModal.show()>{{ data.validity }}  {{ 'filerelease.mdm-filerelease.days' | translate }}</td>
+          <td (click)=lgModal.show()>{{ getDate(data.expire) }}</td>
+          <td (click)=lgModal.show()>{{ getTransState(data.state) | translate }}</td>
+          <td (click)=lgModal.show()>{{getFormat(data.format) | translate }}</td>
+          <td>
+            <a *ngIf="data.state == 'RELEASE_RELEASED'" href="{{dataHost}}{{data.fileLink}}" download><span class="fa fa-arrow-circle-o-down"></span></a>
+            <span *ngIf="data.state != 'RELEASE_RELEASED'" class="fa fa-ban"></span>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+  </div>
+</div>
+
+<div bsModal #lgModal="bs-modal" class="modal fade" tabindex="-1" role="dialog">
+  <div class="modal-dialog modal-lg">
+    <div class="modal-content">
+      <div class="modal-header">
+        <button type="button" class="close" (click)="lgModal.hide()">
+          <span aria-hidden="true">&times;</span>
+        </button>
+        <h4 class="modal-title"> {{ 'filerelease.mdm-filerelease.release' | translate }}</h4>
+      </div>
+      <div class="modal-body">
+        <mdm-filerelease-display [release]=release ></mdm-filerelease-display>
+        <div class="btn-group" *ngIf='event=="approve"'>
+          <button type="button" class="btn btn-success" (click)="approveRelease()" (click)="lgModal.hide()" [disabled]="isReleaseable()"> {{ 'filerelease.mdm-filerelease.btn-approve' | translate }}</button>
+          <button type="button" class="btn btn-danger" (click)="smModal.show()" (click)="lgModal.hide()" [disabled]="isReleaseable()"> {{ 'filerelease.mdm-filerelease.btn-decline' | translate }}</button>
+        </div>
+        <div class="btn-group" *ngIf='event=="edit"'>
+          <button type="button" class="btn btn-default" (click)="deleteRelease()" (click)="lgModal.hide()" [disabled]=isDeletable()> {{ 'filerelease.mdm-filerelease.btn-cancel-request' | translate }}</button>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+
+<div bsModal #smModal="bs-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
+  <div class="modal-dialog modal-sm">
+    <div class="modal-content">
+      <div class="modal-header">
+        <button type="button" class="close" aria-label="Close" (click)="smModal.hide()">
+          <span aria-hidden="true">&times;</span>
+        </button>
+        <h4 class="modal-title"> {{ 'filerelease.mdm-filerelease.reason' | translate }}</h4>
+      </div>
+      <div class="modal-body">
+        <textarea #reason cols="35" rows="4" class="form-control"></textarea>
+        <div class="btn-group">
+          <button type="button" class="btn btn-danger" (click)="rejectRelease(reason.value)" (click)=smModal.hide() (click)="reason.value = ''"> {{ 'filerelease.mdm-filerelease.btn-decline' | translate }}</button>
+          <button type="button" class="btn btn-default" (click)="smModal.hide()" (click)="reason.value = ''"> {{ 'filerelease.mdm-filerelease.btn-cancel' | translate }}</button>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease.component.ts
new file mode 100644
index 0000000..e2281a2
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease.component.ts
@@ -0,0 +1,127 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Component, OnInit, ViewChild} from '@angular/core';
+import {FilereleaseService, Release} from './filerelease.service';
+import {PropertyService} from '../core/property.service';
+import { ModalDirective } from 'ngx-bootstrap';
+
+import {MDMNotificationService} from '../core/mdm-notification.service';
+
+import { TranslateService } from '@ngx-translate/core';
+
+@Component({
+  selector: 'mdm-filerelease',
+  templateUrl: 'mdm-filerelease.component.html',
+  styles: ['.box {border: 1px solid #ddd; border-radius: 4px;}']
+})
+export class MDMFilereleaseComponent implements OnInit {
+
+  incoming: Release[] = [];
+  outgoing: Release[] = [];
+  release: Release = new Release;
+  event = 'display';
+  dataHost: string;
+
+  @ViewChild('lgModal')
+  lgModal: ModalDirective;
+
+  @ViewChild('smModal')
+  smModal: ModalDirective;
+
+  constructor(private service: FilereleaseService,
+              private prop: PropertyService,
+              private notificationService: MDMNotificationService,
+              private translateService: TranslateService) {
+    this.dataHost = prop.getDataHost();
+  }
+
+  ngOnInit() {
+    this.getReleases();
+  }
+
+  getReleases() {
+    this.service.readOutgoging().subscribe(
+      releases => this.outgoing = releases,
+      error => this.notificationService.notifyError(
+        this.translateService.instant('filerelease.mdm-filerelease.err-cannot-read-outgoing-release'), error)
+    );
+    this.service.readIncomming().subscribe(
+      releases => this.incoming = releases,
+      error => this.notificationService.notifyError(
+        this.translateService.instant('filerelease.mdm-filerelease.err-cannot-read-outgoing-release'), error)
+    );
+  }
+  setData(release) {
+    this.release = release;
+  }
+  getState(release: Release) {
+    if (release.state === 'RELEASE_ORDERED') { return 'info'; }
+    if (release.state === 'RELEASE_APPROVED') { return 'warning'; }
+    if (release.state === 'RELEASE_RELEASED') { return 'success'; }
+    if (release.state === 'RELEASE_EXPIRED') { return 'danger'; }
+    if (release.state === 'RELEASE_REJECTED') { return 'danger'; }
+    if (release.state === 'RELEASE_PROGRESSING_ERROR') { return 'danger'; }
+    if (release.state === 'RELEASE_PROGRESSING') { return 'warning'; }
+    return 'info';
+  }
+  rejectRelease(reason: string) {
+    this.release.rejectMessage = reason;
+    this.service.reject(this.release).subscribe(
+      release => this.updateList(release),
+      error => this.notificationService.notifyError(
+        this.translateService.instant('filerelease.mdm-filerelease.err-error-declining-release'), error)
+    );
+  }
+  approveRelease() {
+    this.service.approve(this.release).subscribe(
+      release => this.updateList(release),
+      error => this.notificationService.notifyError(
+        this.translateService.instant('filerelease.mdm-filerelease.err-error-approving-release'), error)
+    );
+    this.release.state = 'RELEASE_PROGRESSING';
+  }
+  updateList(id) {
+    let pos = this.outgoing.map(function(e) { return e.identifier; }).indexOf(id);
+    if (pos !== -1) { this.outgoing.splice(pos, 1); }
+    pos = this.incoming.map(function(e) { return e.identifier; }).indexOf(id);
+    if (pos !== -1) { this.incoming.splice(pos, 1); }
+  }
+  isDeletable() {
+    if (this.release.state !== 'RELEASE_PROGRESSING') { return false; }
+    return true;
+  }
+  deleteRelease() {
+    let id = this.release.identifier;
+    this.service.delete(this.release).subscribe(data => this.updateList(id), err => console.log(err));
+  }
+  setEvent(event) {
+    this.event = event;
+  }
+  isReleaseable() {
+    if (this.release.state !== 'RELEASE_ORDERED') { return true; }
+    return false;
+  }
+  getFormat(format) {
+    return this.service.formatMap[format];
+  }
+  getTransState(state) {
+    return this.service.stateMap[state];
+  }
+  getDate(date) {
+    if (date === 0) { return; }
+    return this.service.formatDate(date);
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease.module.ts
new file mode 100644
index 0000000..e5034a8
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/filerelease/mdm-filerelease.module.ts
@@ -0,0 +1,40 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { NgModule } from '@angular/core';
+
+import { MDMCoreModule } from '../core/mdm-core.module';
+
+import { MDMFilereleaseComponent } from './mdm-filerelease.component';
+import { MDMFilereleaseCreateComponent } from './mdm-filerelease-create.component';
+import { MDMFilereleaseDisplayComponent } from './mdm-filerelease-display.component';
+
+@NgModule({
+  imports: [
+    MDMCoreModule
+  ],
+  declarations: [
+    MDMFilereleaseComponent,
+    MDMFilereleaseCreateComponent,
+    MDMFilereleaseDisplayComponent,
+  ],
+  exports: [
+    MDMFilereleaseComponent,
+    MDMFilereleaseCreateComponent,
+    MDMFilereleaseDisplayComponent,
+  ]
+})
+export class MDMFilereleaseModule {
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/localization/localization.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/localization/localization.service.ts
new file mode 100644
index 0000000..e494eb3
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/localization/localization.service.ts
@@ -0,0 +1,74 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Injectable} from '@angular/core';
+import {Http, Response} from '@angular/http';
+import {Localization} from './localization';
+import {Node} from '../navigator/node';
+import {NodeService} from '../navigator/node.service';
+import {PropertyService} from '../core/property.service';
+import {HttpErrorHandler} from '../core/http-error-handler';
+import {MDMNotificationService} from '../core/mdm-notification.service';
+import {forkJoin as observableForkJoin, Observable} from 'rxjs';
+import {catchError, mergeMap, publishReplay, refCount, map} from 'rxjs/operators';
+
+@Injectable()
+export class LocalizationService {
+
+  private _nodeUrl: string;
+
+  private cache: Observable<Localization[]>;
+
+  constructor(private http: Http,
+              private httpErrorHandler: HttpErrorHandler,
+              private _prop: PropertyService,
+              private _node: NodeService,
+              private notificationService: MDMNotificationService) {
+
+    this._nodeUrl = _prop.getUrl('mdm/environments');
+  }
+
+  // Caches valueLists if cache is empty. Then returns observable containing cached valueLists.
+  getLocalizations() {
+    if (!this.cache) {
+      this.cache = this._node.getNodes(undefined).pipe(
+                mergeMap(envs => this.initLocalizations(envs)),
+                publishReplay(1),
+                refCount());
+    }
+    return this.cache;
+  }
+
+  private initLocalizations(envs: Node[]) {
+    return observableForkJoin(envs.map(env => this.getLocalization(env))).pipe(
+                     map(locs => locs.reduce((a, b) => a.concat(b), [])));
+  }
+
+  private getLocalization(node: Node): Observable<Localization[]> {
+    let url = this._nodeUrl + '/' + node.sourceName;
+    if (node.sourceType === 'Environment') {
+      url = url + '/localizations?all=true';
+    } else {
+      url = url + '/' + node.type.toLowerCase() + 's/localizations';
+    }
+    return this.get(url);
+  }
+
+  private get(url: string) {
+    return this.http.get(url).pipe(
+    map(res => <Localization[]> res.json().data),
+    catchError(this.httpErrorHandler.handleError));
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/localization/localization.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/localization/localization.ts
new file mode 100644
index 0000000..b72de68
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/localization/localization.ts
@@ -0,0 +1,19 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+export class Localization {
+  name: string;
+  localizedName: string;
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/localization/mdmdatasourcetranslation.pipe.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/localization/mdmdatasourcetranslation.pipe.ts
new file mode 100644
index 0000000..22e5b2b
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/localization/mdmdatasourcetranslation.pipe.ts
@@ -0,0 +1,47 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Pipe, PipeTransform } from '@angular/core';
+import {LocalizationService} from '../localization/localization.service';
+import {Localization} from './localization';
+
+@Pipe({
+  name: 'mdmdatasourcetranslate',
+  pure: false
+})
+export class MDMDataSourceTranslationPipe implements PipeTransform {
+
+  private translation: string;
+
+  constructor(private localService: LocalizationService) {}
+
+  transform(type: string, attr?: string): any {
+    return type ? this.getTrans(type, attr) : type;
+  }
+
+  private getTrans(type: string, attr: string) {
+    this.localService.getLocalizations()
+                     .map(locs => this.getTranslation(locs, type, attr))
+                     .subscribe(t => this.translation = t);
+    return this.translation;
+  }
+
+  private getTranslation(locs: Localization[], type: string, attr: string) {
+    let trans = attr ? type + '.' + attr : type;
+    let temp = locs.find(l => l.name === trans);
+    return temp ? temp.localizedName : trans;
+  }
+
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/modules/mdm-modules-routing.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/modules/mdm-modules-routing.module.ts
new file mode 100644
index 0000000..9921f6b
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/modules/mdm-modules-routing.module.ts
@@ -0,0 +1,43 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+
+import { MDMModulesComponent } from '../modules/mdm-modules.component';
+import { MDMSearchComponent } from '../search/mdm-search.component';
+import { ChartViewerNavCardComponent } from '../chartviewer/components/chatviewer-nav-card/chart-viewer-nav-card.component';
+import { XyChartViewerNavCardComponent } from '../chartviewer/components/xy-chart-viewer-nav-card/xy-chart-viewer-nav-card.component';
+import { FileExplorerNavCardComponent } from '../file-explorer/components/file-explorer-nav-card/file-explorer-nav-card.component';
+
+const moduleRoutes: Routes = [
+  { path: '', component: MDMModulesComponent, children: [
+    { path: '', redirectTo: 'search', pathMatch: 'full' },
+    { path: 'details', loadChildren: '../details/mdm-detail.module#MDMDetailModule'},
+    { path: 'search', component: MDMSearchComponent },
+    { path: 'quickviewer', component: ChartViewerNavCardComponent },
+    { path: 'xychartviewer', component: XyChartViewerNavCardComponent },
+    { path: 'files', component: FileExplorerNavCardComponent },
+  ]}
+];
+
+@NgModule({
+  imports: [
+    RouterModule.forChild(moduleRoutes)
+  ],
+  exports: [
+    RouterModule
+  ]
+})
+export class MDMModulesRoutingModule {}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/modules/mdm-modules.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/modules/mdm-modules.component.html
new file mode 100644
index 0000000..fd566dc
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/modules/mdm-modules.component.html
@@ -0,0 +1,38 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+<style>
+  .nav-item > .nav-link {
+  border-color: #e9ecef #e9ecef #dee2e6;
+  }
+ .nav-item > .nav-link:focus {
+    border-color: #ddd #ddd #dee2e6;
+  }
+  .nav-item > .nav-link:active {
+    border-color: #ddd #ddd #dee2e6;
+  }
+</style>
+
+<ul class="nav nav-tabs mdm-link-list" role="tablist">
+  <li *ngFor="let m of links" [routerLinkActive]="['active']" class="nav-item">
+    <a routerLink="{{m.path}}" class="nav-link" role="tab" data-toggle="tab" style="cursor:pointer;">
+      {{m.name | translate}}
+    </a>
+  </li>
+</ul>
+
+<div class="tab-content" style="border: 1px solid #ddd; border-top: 0; padding: 1em;">
+  <div class="tab-pane active">
+    <router-outlet></router-outlet>
+  <div>
+</div>
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/modules/mdm-modules.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/modules/mdm-modules.component.ts
new file mode 100644
index 0000000..aab9a85
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/modules/mdm-modules.component.ts
@@ -0,0 +1,36 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Component} from '@angular/core';
+import {Router} from '@angular/router';
+
+import {TRANSLATE} from '../core/mdm-core.module';
+
+@Component({
+  selector: 'modules',
+  templateUrl: 'mdm-modules.component.html',
+  providers: []
+})
+export class MDMModulesComponent {
+
+  links = [
+    { name: TRANSLATE('modules.mdm-modules.details'), path: 'details'},
+    { name: TRANSLATE('modules.mdm-modules.mdm-search'), path: 'search'},
+    { name: 'QuickViewer', path: 'quickviewer'},
+    { name: 'X/Y-ChartViewer', path: 'xychartviewer'},
+    { name: TRANSLATE('modules.mdm-modules.file-explorer'), path: 'files'}
+  ];
+  constructor(private router: Router) {}
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/modules/mdm-modules.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/modules/mdm-modules.module.ts
new file mode 100644
index 0000000..1194a7d
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/modules/mdm-modules.module.ts
@@ -0,0 +1,43 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { NgModule } from '@angular/core';
+
+import { MDMModulesComponent } from './mdm-modules.component';
+import { MDMModulesRoutingModule } from './mdm-modules-routing.module';
+
+import { MDMCoreModule } from '../core/mdm-core.module';
+import { MDMDetailModule } from '../details/mdm-detail.module';
+import { MDMSearchModule } from '../search/mdm-search.module';
+import { ChartviewerModule } from '../chartviewer/chartviewer.module';
+import { FileExplorerModule} from '../file-explorer/file-explorer.module';
+
+@NgModule({
+  imports: [
+    MDMCoreModule,
+    MDMModulesRoutingModule,
+    MDMDetailModule,
+    MDMSearchModule,
+    ChartviewerModule,
+    FileExplorerModule
+  ],
+  declarations: [
+    MDMModulesComponent
+  ],
+  exports: [
+    MDMModulesComponent,
+  ]
+})
+export class MDMModulesModule {}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/navigator-view/mdm-navigator-view-routing.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator-view/mdm-navigator-view-routing.module.ts
new file mode 100644
index 0000000..a247f55
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator-view/mdm-navigator-view-routing.module.ts
@@ -0,0 +1,35 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+
+import { MDMNavigatorViewComponent } from './mdm-navigator-view.component';
+
+const navigatorViewRoutes: Routes = [
+  { path: '', component: MDMNavigatorViewComponent, children: [
+      { path: '', loadChildren: '../modules/mdm-modules.module#MDMModulesModule'}
+    ]}
+];
+
+@NgModule({
+  imports: [
+    RouterModule.forChild(navigatorViewRoutes)
+  ],
+  exports: [
+    RouterModule
+  ]
+})
+export class MDMNavigatorViewRoutingModule {}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/navigator-view/mdm-navigator-view.component.css b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator-view/mdm-navigator-view.component.css
new file mode 100644
index 0000000..7ba52f7
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator-view/mdm-navigator-view.component.css
@@ -0,0 +1,82 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+.panel-body {
+  padding: 0;
+}
+.list-group {
+  margin-bottom: 0;
+}
+.list-group-item {
+  white-space: nowrap;
+}
+.list-group-item:first-child {
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+}
+.list-group-item:last-child {
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+  border-bottom-style: none;
+}
+
+
+.navigator {
+  position: relative;
+  margin: 0;
+}
+
+.navigator-content {
+  margin-left: 8px;
+  min-height: calc(100vh - 53px);
+  max-height: calc(100vh - 53px);
+  overflow: auto;
+}
+
+.navbar-default {
+    background-color: #f8f8f8;
+    border-color: #e7e7e7!important;
+}
+
+.navigator .navbar {
+  border-radius: 4px;
+  border: 1px solid;
+}
+
+.navigator .navbar-right {
+  position: relative;
+  right: 15px;
+  z-index: 1;
+}
+
+.navigator .navbar-header {
+  position: relative;
+  background-color: #f8f8f8;
+  z-index: 2;
+}
+
+vertical-split-separator {
+  margin: 0;
+  border: none !important;
+}
+
+.navigator .navbar-right > li {
+  text-align: right;
+}
+
+.navigator .navbar-right > li > ul.dropdown-menu {
+  position: absolute;
+  left: -75px !important;
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/navigator-view/mdm-navigator-view.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator-view/mdm-navigator-view.component.html
new file mode 100644
index 0000000..0215a8c
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator-view/mdm-navigator-view.component.html
@@ -0,0 +1,51 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+  <div class="mainnavigation">
+    <div id="leftsidenav" class="split">
+      <nav class="navigator">
+        <div class="navbar navbar-default container-fluid" style="padding: 0px 5px;">
+          <div class="navbar-header">
+            <a class="navbar-brand" (click)="activate('Navigation')" style="cursor:pointer;">{{ 'navigator-view.mdm-navigator-view.navigator' | translate }}</a>
+          </div>
+          <div>
+            <ul class="nav navbar-nav navbar-right">
+              <li [ngClass]="isDropActive('Dropdown')" title="{{ 'navigator-view.mdm-navigator-view.select-node-provider' | translate }}" dropdown>
+                <a (click)="activate('Dropdown')" class="dropdown-toggle" dropdownToggle aria-haspopup="true" aria-expanded="false" style="cursor:pointer;">
+                  {{activeNodeprovider.name}}
+                  <em class="caret"></em>
+                </a>
+                <ul class="dropdown-menu" *dropdownMenu>
+                  <li *ngFor="let np of getNodeproviders()">
+                    <a class="dropdown-item" (click)="activateNodeProvider(np)" style="cursor:pointer;">
+                      {{np.name}}
+                    </a>
+                  </li>
+                </ul>
+              </li>
+            </ul>
+          </div>
+        </div>
+        <mdm-navigator></mdm-navigator>
+      </nav>
+    </div>
+    <div id="rightsidenav" class="split">
+      <div class="navigator-content" (scroll)=onScroll($event)>
+        <router-outlet></router-outlet>
+        <mdm-basket (onSelect)="updateSelectedNode($event)" [activeNode]=activeNode (onActive)="updateActiveNode($event)"></mdm-basket>
+        <div *ngIf="scrollBtnVisible" style="position: fixed; bottom: 30px; right: 35px;">
+          <button class="btn btn-default" (click)="onScrollTop()" style="z-index: 10000;"><span class="fa fa-arrow-up" style="z-index: 10000;" title="{{ 'navigator-view.mdm-navigator-view.tooltip-scroll-up' | translate }}"></span></button>
+        </div>
+      </div>
+    </div>
+  </div>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/navigator-view/mdm-navigator-view.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator-view/mdm-navigator-view.component.ts
new file mode 100644
index 0000000..10f3dc3
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator-view/mdm-navigator-view.component.ts
@@ -0,0 +1,142 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Component, ViewEncapsulation, OnInit, OnDestroy, AfterViewInit } from '@angular/core';
+
+import { BsDropdownModule, AccordionConfig, BsDropdownConfig } from 'ngx-bootstrap';
+
+import {NodeService} from '../navigator/node.service';
+import {Node} from '../navigator/node';
+import {NodeproviderService} from '../navigator/nodeprovider.service';
+
+import {MDMNotificationService} from '../core/mdm-notification.service';
+
+import { TranslateService } from '@ngx-translate/core';
+import Split from 'split.js';
+
+@Component({
+  selector: 'mdm-navigator-view',
+  templateUrl: 'mdm-navigator-view.component.html',
+  styleUrls: [ './mdm-navigator-view.component.css' ],
+  providers: [BsDropdownConfig, AccordionConfig],
+  encapsulation: ViewEncapsulation.None
+})
+export class MDMNavigatorViewComponent implements OnInit, OnDestroy, AfterViewInit {
+
+  selectedNode = new Node;
+  activeNode: Node;
+  closeOther = false;
+
+  activeNodeprovider: any;
+  _comp = 'Navigation';
+  subscription: any;
+
+  div: any;
+  scrollBtnVisible = false;
+
+  split: Split;
+
+  constructor(private nodeProviderService: NodeproviderService,
+              private notificationService: MDMNotificationService,
+              private translateService: TranslateService) {}
+
+  onScrollTop() {
+    this.div.scrollTop = 0;
+  }
+
+  onScroll(event: any) {
+    if (event.target.scrollTop > 0) {
+      this.scrollBtnVisible = true;
+    } else {
+      this.scrollBtnVisible = false;
+    }
+    this.div = event.target;
+  }
+
+  updateSelectedNode(node: Node) {
+    this.selectedNode = node;
+  }
+  updateActiveNode(node: Node) {
+    this.activeNode = node;
+  }
+  activateNodeProvider(nodeprovider: any) {
+    this.nodeProviderService.setActiveNodeprovider(nodeprovider);
+  }
+
+  getNodeproviders() {
+    return this.nodeProviderService.getNodeproviders();
+  }
+
+  ngOnInit() {
+    this.activeNodeprovider = this.nodeProviderService.getActiveNodeprovider();
+    this.subscription = this.nodeProviderService.nodeProviderChanged
+        .subscribe(
+          np => this.activeNodeprovider = np,
+          error => this.notificationService.notifyError(
+            this.translateService.instant('navigator-view.mdm-navigator-view.err-cannot-update-node-provider'), error)
+    );
+
+  }
+
+  ngAfterViewInit(): void {
+    this.split = Split(['#leftsidenav', '#rightsidenav'], {
+      sizes: [this.initRatio(), this.initRatioRight()],
+      minSize: this.minWidthLeft(),
+      gutterSize: 10,
+      gutterStyle: function (dimension, gutterSize) {
+        return {
+          'width': gutterSize + 'px',
+          'height': (document.getElementById('leftsidenav').clientHeight - 5) + 'px'
+        };
+      },
+    });
+  }
+
+  ngOnDestroy() {
+    this.subscription.unsubscribe();
+  }
+
+  activate(comp: string) {
+    this._comp = comp;
+  }
+
+  isActive(comp: string) {
+    if (comp === this._comp) {
+      return 'active';
+    }
+  }
+
+  isDropActive(comp: string) {
+    if (comp === this._comp) {
+      return 'open ';
+    }
+  }
+
+   minWidthLeft() {
+     return 180;
+   }
+
+   minWidthRight() {
+     return 0.20 * window.innerWidth;
+   }
+
+  initRatio() {
+    return Math.floor(Math.max(250 / window.innerWidth, 0.20) * 100);
+  }
+  initRatioRight() {
+    return 100 - this.initRatio();
+  }
+
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/navigator-view/mdm-navigator-view.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator-view/mdm-navigator-view.module.ts
new file mode 100644
index 0000000..6db2fae
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator-view/mdm-navigator-view.module.ts
@@ -0,0 +1,44 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { NgModule } from '@angular/core';
+
+import { MDMCoreModule } from '../core/mdm-core.module';
+
+import { MDMNavigatorViewRoutingModule } from './mdm-navigator-view-routing.module';
+
+import { MDMNavigatorViewComponent } from './mdm-navigator-view.component';
+
+import { MDMNavigatorModule } from '../navigator/mdm-navigator.module';
+import { MDMModulesModule } from '../modules/mdm-modules.module';
+import { MDMBasketModule } from '../basket/mdm-basket.module';
+
+@NgModule({
+  imports: [
+    MDMCoreModule,
+    MDMNavigatorViewRoutingModule,
+    MDMNavigatorModule,
+    MDMModulesModule,
+    MDMBasketModule
+  ],
+  declarations: [
+    MDMNavigatorViewComponent
+  ],
+  exports: [
+    MDMNavigatorViewRoutingModule
+  ]
+})
+export class MDMNavigatorViewModule {
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/attribute-value.pipe.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/attribute-value.pipe.ts
new file mode 100644
index 0000000..ed5bef2
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/attribute-value.pipe.ts
@@ -0,0 +1,60 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import { Pipe, PipeTransform } from '@angular/core';
+import { TranslateService } from '@ngx-translate/core';
+import { Observable, of } from 'rxjs';
+import { Attribute, MDMLink, ContextGroup } from '../navigator/node';
+
+@Pipe({name: 'attributeValue'})
+export class AttributeValuePipe implements PipeTransform {
+
+  constructor(private translateService: TranslateService) {}
+
+  transform(attr: Attribute, contextGroup?: ContextGroup) {
+    let display = new Observable<string>();
+
+    if (attr != undefined && attr.value != undefined) {
+
+      const value = contextGroup != undefined ? attr.value[contextGroup] : attr.value;
+
+      if (value != undefined) {
+        switch (attr.dataType) {
+          case 'FILE_LINK':
+            const link: MDMLink = Object.assign(new MDMLink(), value);
+            display = of(link.getFileName());
+            break;
+          case 'FILE_LINK_SEQUENCE':
+            const links = value as MDMLink[];
+            if (links != undefined) {
+              switch (links.length) {
+                case 0:
+                  display = this.translateService.get('navigator.attribute-value.msg-no-files-attached');
+                  break;
+                case 1:
+                  display = this.translateService.get('navigator.attribute-value.msg-one-file-attached');
+                  break;
+                default:
+                  display = this.translateService.get('navigator.attribute-value.msg-x-files-attached', {numberOfFiles: links.length});
+              }
+            }
+            break;
+          default:
+            display = of(value);
+        }
+      }
+    }
+    return display;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/defaultnodeprovider.json b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/defaultnodeprovider.json
new file mode 100644
index 0000000..ffcea4d
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/defaultnodeprovider.json
@@ -0,0 +1,40 @@
+{
+	"name" : "Default",
+	"type" : "Environment",
+	"children" : {
+		"type" : "Project",
+		"attribute" : "Name",
+		"query" : "/projects",
+		"children" : {
+			"type" : "Pool",
+			"attribute" : "Name",
+			"query" : "/pools?filter=Project.Id eq \"{Project.Id}\"",
+			"children" : {
+				"type" : "Test",
+				"attribute" : "Name",
+				"query" : "/tests?filter=Pool.Id eq \"{Pool.Id}\"",
+				"children" : {
+					"type" : "TestStep",
+					"attribute" : "Name",
+					"query" : "/teststeps?filter=Test.Id eq \"{Test.Id}\"",
+					"children" : {
+						"type" : "Measurement",
+						"attribute" : "Name",
+						"query" : "/measurements?filter=TestStep.Id eq \"{TestStep.Id}\"",
+						"children" : {
+							"type" : "ChannelGroup",
+							"attribute" : "Name",
+							"query" : "/channelgroups?filter=Measurement.Id eq \"{Measurement.Id}\"",
+							"caption" : "ChannelGroup.Name",
+							"children" : {
+								"type" : "Channel",
+								"attribute" : "Name",
+								"query" : "/channels?filter=ChannelGroup.Id eq \"{ChannelGroup.Id}\""
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/mdm-navigator.MockNodes.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/mdm-navigator.MockNodes.ts
new file mode 100644
index 0000000..5c5e1e3
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/mdm-navigator.MockNodes.ts
@@ -0,0 +1,101 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+export const MockEnvNodes = {
+  'type': 'Environment',
+  'data': [
+    {
+      'name': 'Test Environment',
+      'id': 'id1',
+      'type': 'Environment',
+      'sourceType': 'Environment',
+      'sourceName': 'Test Environment',
+      'attributes': [
+        {
+          'name': 'Timezone',
+          'value': 'GMT',
+          'unit': '',
+          'dataType': 'STRING'
+        }
+      ]
+    }
+  ]
+};
+
+export const MockTestNodes = {
+    'type': 'Test',
+    'data': [
+      {
+        'name': 'Test 1',
+        'id': 'id10',
+        'type': 'Test',
+        'sourceType': 'Test',
+        'sourceName': 'Test Environment',
+        'attributes': [
+          {
+            'name': 'DateClosed',
+            'value': '',
+            'unit': '',
+            'dataType': 'DATE'
+          }
+        ]
+      },
+      {
+        'name': 'Test 2',
+        'id': 'id20',
+        'type': 'Test',
+        'sourceType': 'Test',
+        'sourceName': 'Test Environment',
+        'attributes': [
+          {
+            'name': 'DateClosed',
+            'value': '',
+            'unit': '',
+            'dataType': 'DATE'
+          }
+        ]
+      },
+      {
+        'name': 'Test 3',
+        'id': 'id30',
+        'type': 'Test',
+        'sourceType': 'Test',
+        'sourceName': 'Test Environment',
+        'attributes': [
+          {
+            'name': 'DateClosed',
+            'value': '',
+            'unit': '',
+            'dataType': 'DATE'
+          }
+        ]
+      }
+    ]
+};
+
+export const MockNodeProvider = {
+  'name' : 'Channels',
+  'type' : 'Environment',
+  'children' : {
+    'type' : 'Test',
+    'attribute' : 'Name',
+    'query' : '/tests',
+    'children' : {
+      'type' : 'Channel',
+      'attribute' : 'Name',
+      'query' : '/channels?filter=Test.Id eq "{Test.Id}"'
+    }
+  }
+};
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/mdm-navigator.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/mdm-navigator.component.html
new file mode 100644
index 0000000..f83da77
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/mdm-navigator.component.html
@@ -0,0 +1,29 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+
+<p-contextMenu #cm [model]="contextMenuItems" appendTo="body"></p-contextMenu>
+
+<p-tree class="mdmtree"
+    [value]="nodes"
+    selectionMode="multiple"
+    [(selection)]="selectedNodes"
+    (onNodeExpand)="loadNode($event)"
+    (onNodeSelect)="nodeSelect($event)"
+    [contextMenu]="cm"
+    >
+  <ng-template let-node pTemplate="default">
+        <span [title]="node.label" [id]="getId(node)">{{ node.label }}</span>
+  </ng-template>
+</p-tree>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/mdm-navigator.component.spec.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/mdm-navigator.component.spec.ts
new file mode 100644
index 0000000..8443c21
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/mdm-navigator.component.spec.ts
@@ -0,0 +1,79 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { DebugElement } from '@angular/core';
+import { By } from '@angular/platform-browser';
+import {Observable} from 'rxjs';
+
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { Node } from './node';
+import { MockEnvNodes, MockNodeProvider } from './mdm-navigator.MockNodes';
+import { NodeService } from './node.service';
+import { NavigatorService } from './navigator.service';
+import { MDMNavigatorComponent } from './mdm-navigator.component';
+/*
+describe ( 'Navigator Tree, navigator component', () => {
+
+    class NodeServiceMock {
+        nodeProviderChanged: Observable<any> = Observable.of(MockNodeProvider);
+
+        getNodes(): Observable<Node[]> { return Observable.of(MockEnvNodes.data); };
+
+        compareNode() { return true; };
+    }
+
+    let fixture: ComponentFixture<MDMNavigatorComponent>;
+    let comp: MDMNavigatorComponent;
+    let de, listElement_span, listElement_a: DebugElement;
+
+    beforeEach(() => {
+        TestBed.configureTestingModule({
+            declarations: [MDMNavigatorComponent,
+                           MDMNodeProviderComponent
+                           ],
+            providers: [NavigatorService],
+            imports: []
+        });
+        TestBed.overrideComponent(MDMNavigatorComponent, {
+            set: {
+                providers: [{provide: NodeService, useClass: NodeServiceMock}]
+            }
+        });
+
+        fixture = TestBed.createComponent(MDMNavigatorComponent);
+        comp = fixture.componentInstance;
+        fixture.detectChanges();
+    });
+
+    it('should show environment Node', () => {
+       expect(comp.nodes).toEqual(MockEnvNodes.data);
+       de = fixture.debugElement.query(By.css('li'));
+       expect(de.nativeElement.textContent).toContain(comp.nodes[0].name);
+    });
+
+    it('should open Node after click and emit active node', () => {
+        listElement_span = fixture.debugElement.query(By.css('span'));
+        listElement_span.nativeElement.click();
+        expect(comp.nodes[0].active).toBeTruthy();
+
+        listElement_a = fixture.debugElement.query(By.css('a'));
+        listElement_a.nativeElement.click();
+        comp.onActive.subscribe(node => {
+            expect(node).toEqual(comp.nodes);
+        });
+     });
+});
+*/
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/mdm-navigator.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/mdm-navigator.component.ts
new file mode 100644
index 0000000..7b56a98
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/mdm-navigator.component.ts
@@ -0,0 +1,271 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Component, OnInit} from '@angular/core';
+import {TreeNode, MenuItem} from 'primeng/primeng';
+
+import {map, tap, startWith, filter, flatMap} from 'rxjs/operators';
+
+import {MDMItem} from '../core/mdm-item';
+import {Node} from '../navigator/node';
+import {NodeService} from '../navigator/node.service';
+import {QueryService} from '../tableview/query.service';
+import {NodeproviderService} from './nodeprovider.service';
+import {NavigatorService} from './navigator.service';
+import {BasketService} from '../basket/basket.service';
+
+import {MDMNotificationService} from '../core/mdm-notification.service';
+
+import { TranslateService } from '@ngx-translate/core';
+import { streamTranslate, TRANSLATE } from '../core/mdm-core.module';
+import { ActivatedRoute } from '@angular/router';
+import { forkJoin, combineLatest } from 'rxjs';
+
+@Component({
+  selector: 'mdm-navigator',
+  templateUrl: './mdm-navigator.component.html',
+  styles: [
+    '>>>.ui-tree { overflow: auto; max-height: calc(100vh - 7em); min-height: calc(100vh - 7em); '
+    + 'padding: .25em .25em .5em .25em !important; }',
+    '>>>.ui-tree .ui-tree-container { overflow: visible; }'
+  ]
+})
+export class MDMNavigatorComponent implements OnInit {
+
+  AlrtItemTypeNotSupported = 'This node type is not supported by the current view!';
+
+  selectedNodes: TreeNode[] = [];
+  nodes: TreeNode[] = [];
+  lastClickTime = 0;
+
+  loadingNode = <TreeNode>{
+    label: 'Loading subordinate items...',
+    leaf: true,
+    icon: 'fa fa-spinner fa-pulse fa-fw'
+  };
+
+  contextMenuItems: MenuItem[] = [
+    { label: 'Add to shopping basket', icon: 'fa fa-shopping-cart', command: (event) => this.addSelectionToBasket() }
+  ];
+
+  constructor(private nodeService: NodeService,
+    private queryService: QueryService,
+    private basketService: BasketService,
+    private nodeproviderService: NodeproviderService,
+    private navigatorService: NavigatorService,
+    private notificationService: MDMNotificationService,
+    private translateService: TranslateService,
+    private route: ActivatedRoute) {
+  }
+
+  ngOnInit() {
+    streamTranslate(this.translateService, TRANSLATE('navigator.mdm-navigator.loading-subordinate-items')).subscribe(
+            (msg: string) => this.loadingNode.label = msg);
+    streamTranslate(this.translateService, TRANSLATE('navigator.mdm-navigator.add-to-shopping-basket')).subscribe(
+            (msg: string) => this.contextMenuItems[0].label = msg);
+    streamTranslate(this.translateService, TRANSLATE('navigator.mdm-navigator.msg-item-type-not-supported')).subscribe(
+            (msg: string) => this.AlrtItemTypeNotSupported = msg);
+
+    // make sure navigate parameter is handled after nodes are loaded
+    this.loadRootNodes().subscribe(
+        treeNodes => {
+          this.nodes = treeNodes;
+          this.loadNavigateItems().subscribe(selectItems => {
+            this.navigatorService.fireOnOpenInTree(selectItems);
+          });
+        },
+        error => this.notificationService.notifyError(
+          this.translateService.instant('navigator.mdm-navigator.err-cannot-update-navigation-tree'), error)
+    );
+
+    this.nodeproviderService.nodeProviderChanged.subscribe(
+        np => this.reloadTree(),
+        error => this.notificationService.notifyError(
+          this.translateService.instant('navigator.mdm-navigator.err-cannot-update-navigation-tree'), error)
+      );
+
+    this.navigatorService.onOpenInTree
+      .subscribe(
+        items => this.openInTree(items),
+        error => this.notificationService.notifyError(
+          this.translateService.instant('navigator.mdm-navigator.err-cannot-open-node-in-navigation-tree'), error)
+      );
+  }
+
+  loadRootNodes() {
+    return this.nodeService.getRootNodes()
+      .pipe(
+        map(n => n.map(node => this.mapNode(node)))
+      );
+  }
+
+  loadNavigateItems() {
+    return this.route.queryParamMap
+      .pipe(
+          map(params => params.get('navigate')),
+          filter(url => url !== null),
+          flatMap(url => this.nodeService.getNodesByUrl(url)),
+          map(nodes => nodes.map(node => new MDMItem(node.sourceName, node.type, node.id)))
+      );
+  }
+
+  nodeSelect(event) {
+    if (event.node.data) {
+      this.navigatorService.setSelectedItem(event.node.data);
+    }
+    if (event.originalEvent.timeStamp - this.lastClickTime < 300) {
+      if (!event.node.expanded && !event.node.children) {
+        this.loadNode(event);
+      }
+      event.node.expanded = !event.node.expanded;
+    }
+    this.lastClickTime = event.originalEvent.timeStamp;
+  }
+
+  loadNode(event) {
+    if (event.node && event.node.children == undefined && !event.node.leaf) {
+      return this.getChildren(event.node).pipe(
+        startWith([this.loadingNode]),
+        tap(nodes => (nodes && nodes.length === 0) ? event.node.leaf = true : event.node.leaf = false))
+        .subscribe(
+          nodes => event.node.children = nodes,
+          error => this.notificationService.notifyError(
+            this.translateService.instant('navigator.mdm-navigator.err-cannot-load-nodes'), error)
+        );
+    }
+  }
+
+  reloadTree() {
+    this.loadRootNodes()
+      .subscribe(
+        n => this.nodes = n,
+        error => this.notificationService.notifyError(
+          this.translateService.instant('navigator.mdm-navigator.err-cannot-update-navigation-tree'), error)
+      );
+  }
+
+  onFocus(event: { eventName: string, node: TreeNode }) {
+    this.navigatorService.setSelectedItem(event.node.data.item);
+  }
+
+  getNodeClass(item: MDMItem) {
+    return 'icon ' + item.type.toLowerCase();
+  }
+
+  mapNode(node: Node) {
+    let item = new MDMItem(node.sourceName, node.type, node.id);
+    return <TreeNode>{
+      label: node.name,
+      leaf: this.nodeproviderService.getSubNodeprovider(item) == undefined,
+      data: item,
+      icon: this.getNodeClass(item)
+    };
+  }
+
+  getChildren(node: TreeNode) {
+    return this.nodeService.getNodesByUrl(this.nodeproviderService.getQueryForChildren(node.data)).pipe(
+      map(nodes => nodes.map(n => this.mapNode(n))),
+      map(treenodes => treenodes.sort((n1, n2) => n1.label.localeCompare(n2.label))));
+  }
+
+  addSelectionToBasket() {
+    this.basketService.addAll(this.selectedNodes.map(node => <MDMItem>node.data));
+  }
+
+  openInTree(items: MDMItem[]) {
+    this.selectedNodes = [];
+    items.forEach(item => {
+      let pathTypes = this.nodeproviderService.getPathTypes(item.type);
+      if (pathTypes.length === 0) {
+        alert(this.AlrtItemTypeNotSupported);
+      } else {
+        let env = this.nodes.find(e => item.source === e.data.source);
+        env.expanded = true;
+        this.openChildrenRecursive(item, env, pathTypes, 1);
+      }
+    });
+  }
+
+  openChildrenRecursive(item: MDMItem, current: TreeNode, pathTypes: string[], iii: number) {
+    if (current.children) {
+      this.expander(item, current, pathTypes, iii);
+    } else {
+      this.getChildren(current).pipe(
+        startWith([this.loadingNode]),
+        tap(n => current.children = n))
+        .subscribe(
+          () => this.expander(item, current, pathTypes, iii),
+          error => this.notificationService.notifyError(
+            this.translateService.instant('navigator.mdm-navigator.err-cannot-open-node'), error)
+        );
+    }
+  }
+
+  expander(item: MDMItem, current: TreeNode, pathTypes: string[], iii: number) {
+    let expandList: string[] = [];
+    this.nodeService.searchNodes('filter=' + item.type + '.Id eq "' + item.id + '"',
+      item.source, pathTypes[iii])
+      .subscribe(
+        nodes => {
+          expandList = nodes.map(n => n.id);
+          current.children.filter(node => expandList.findIndex(
+            i => node.data ? i === node.data.id : false) > -1
+          )
+          .forEach(node => {
+            if (++iii < pathTypes.length) {
+              node.expanded = true;
+              this.openChildrenRecursive(item, node, pathTypes, iii);
+              this.scrollToSelectionPrimeNgDataTable(node);
+            } else {
+              this.selectedNodes.push(node);
+              let length = this.selectedNodes.length;
+              if (length === 1) {
+                this.nodeService.getNodeFromItem(this.selectedNodes[length - 1].data)
+                    .subscribe(
+                      n => this.navigatorService.setSelectedNode(n),
+                      error => this.notificationService.notifyError(
+                        this.translateService.instant('navigator.mdm-navigator.err-cannot-open-node'), error)
+                    );
+              }
+              this.scrollToSelectionPrimeNgDataTable(node);
+            }
+          });
+        },
+        error => this.notificationService.notifyError(
+          this.translateService.instant('navigator.mdm-navigator.err-cannot-open-node'), error)
+      );
+  }
+
+  /**
+   * PrimeNG does not support scroll to view. This methods implements a
+   * workaround by using HTML element IDs.
+   * @see https://github.com/primefaces/primeng/issues/1278
+   */
+  scrollToSelectionPrimeNgDataTable(node: TreeNode) {
+    let list = document.querySelectorAll('p-tree span#' + this.getId(node));
+
+    if (list && list.length > 0) {
+        list.item(0).scrollIntoView();
+    }
+  }
+
+  getId(node: TreeNode) {
+    if (node && node.data) {
+      return 'node_' + node.data.source + '_' + node.data.type + '_' + node.data.id;
+    } else {
+      return '';
+    }
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/mdm-navigator.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/mdm-navigator.module.ts
new file mode 100644
index 0000000..a6a0319
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/mdm-navigator.module.ts
@@ -0,0 +1,34 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { NgModule } from '@angular/core';
+
+import { MDMCoreModule } from '../core/mdm-core.module';
+
+import { MDMNavigatorComponent } from './mdm-navigator.component';
+
+@NgModule({
+  imports: [
+    MDMCoreModule
+  ],
+  declarations: [
+    MDMNavigatorComponent
+  ],
+  exports: [
+    MDMNavigatorComponent
+  ]
+})
+export class MDMNavigatorModule {
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/navigator.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/navigator.service.ts
new file mode 100644
index 0000000..a9ec00a
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/navigator.service.ts
@@ -0,0 +1,67 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Injectable, Output, EventEmitter} from '@angular/core';
+import {Http, Response, Headers, RequestOptions} from '@angular/http';
+import {Observable} from 'rxjs';
+
+import {MDMItem} from '../core/mdm-item';
+import {Node} from './node';
+import {PropertyService} from '../core/property.service';
+import {NodeService} from './node.service';
+
+import {MDMNotificationService} from '../core/mdm-notification.service';
+
+import { TranslateService } from '@ngx-translate/core';
+
+@Injectable()
+export class NavigatorService {
+
+  @Output() onOpenInTree = new EventEmitter<MDMItem[]>();
+
+  public selectedNodeChanged: EventEmitter<Node> = new EventEmitter<Node>();
+  private selectedNode: Node;
+
+  constructor(private nodeService: NodeService,
+              private notificationService: MDMNotificationService,
+              private translateService: TranslateService) {
+
+  }
+
+  setSelectedNode(node: Node) {
+    this.selectedNode = node;
+    this.fireSelectedNodeChanged(node);
+  }
+
+  fireSelectedNodeChanged(node: Node) {
+    this.selectedNodeChanged.emit(node);
+  }
+
+  setSelectedItem(item: MDMItem) {
+      this.nodeService.getNodeFromItem(item)
+        .subscribe(
+          node => this.setSelectedNode(node),
+          error => this.notificationService.notifyError(this.translateService.instant('navigator.navigator.err-cannot-set-item'), error)
+        );
+  }
+
+  getSelectedNode(): Node {
+    return this.selectedNode;
+  }
+
+  fireOnOpenInTree(items: MDMItem[]) {
+    this.onOpenInTree.emit(items);
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/node.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/node.service.ts
new file mode 100644
index 0000000..b7dea7d
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/node.service.ts
@@ -0,0 +1,151 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+import {Injectable, EventEmitter} from '@angular/core';
+import {Http, Response, Headers, RequestOptions} from '@angular/http';
+import {Observable} from 'rxjs';
+import {catchError, map} from 'rxjs/operators';
+
+import {MDMItem} from '../core/mdm-item';
+import {Node} from './node';
+import {PropertyService} from '../core/property.service';
+import {PreferenceService, Preference} from '../core/preference.service';
+import {QueryService, Query} from '../tableview/query.service';
+import {HttpErrorHandler} from '../core/http-error-handler';
+import {plainToClass} from 'class-transformer';
+
+@Injectable()
+export class NodeService {
+
+  private _nodeUrl: string;
+
+  static mapSourceNameToName(environments: Node[], sourceName: string) {
+    let env = environments.find(n => n.sourceName === sourceName);
+    return env ? env.name : sourceName;
+  }
+
+  constructor(private http: Http,
+              private httpErrorHandler: HttpErrorHandler,
+              private _prop: PropertyService,
+              private queryService: QueryService,
+              private preferenceService: PreferenceService) {
+      this._nodeUrl = _prop.getUrl('mdm/environments');
+  }
+
+  searchNodes(query, env, type) {
+    return this.http.get(this._nodeUrl + '/' + env + '/' + this.typeToUrl(type) + '?' + query).pipe(
+              map(res => plainToClass(Node, res.json().data)),
+              catchError(this.httpErrorHandler.handleError));
+  }
+
+  searchFT(query, env) {
+    return this.http.get(this._nodeUrl + '/' + env + '/search?q=' + query).pipe(
+              map(res => plainToClass(Node, res.json().data)),
+              catchError(this.httpErrorHandler.handleError));
+  }
+
+  getNodes(node?: Node) {
+    if (node == undefined) {
+      return this.getRootNodes();
+    }
+    return this.getNode(this.getUrl(node));
+  }
+
+  addNode (name: string): Observable<Node> {
+    let body = JSON.stringify({ name });
+    let headers = new Headers({ 'Content-Type': 'application/json' });
+    let options = new RequestOptions({ headers: headers });
+
+    return this.http.post(this._nodeUrl, body, options).pipe(
+                    map(res => plainToClass(Node, res.json().data)[0]),
+                    catchError(this.httpErrorHandler.handleError));
+  }
+
+  deleteNode(node: Node) {
+    return this.http.delete(this.getUrl(node)).pipe(
+      map(res => plainToClass(Node, res.json().data)),
+      catchError(this.httpErrorHandler.handleError));
+  }
+
+  compareNode(node1, node2) {
+    if (node1 == undefined || node2 == undefined) { return; }
+    let n1 = node1.name + node1.id + node1.type + node1.sourceName;
+    let n2 = node2.name + node2.id + node2.type + node2.sourceName;
+    if (n1 === n2) { return true; }
+    return false;
+  }
+
+  getRootNodes() {
+    return this.http.get(this._nodeUrl).pipe(
+      map(res => plainToClass(Node, res.json().data)),
+      catchError(this.httpErrorHandler.handleError));
+  }
+
+  getNodeFromItem(mdmItem: MDMItem) {
+    if (mdmItem.type === 'Environment') {
+      return this.getNode(this._nodeUrl + '/' + mdmItem.source).pipe(
+        map(nodes => (nodes && nodes.length > 0) ? nodes[0] : undefined));
+    } else {
+      return this.getNode(this._nodeUrl + '/' + mdmItem.source + '/' + this.typeToUrl(mdmItem.type) + '/' + mdmItem.id).pipe(
+        map(nodes => (nodes && nodes.length > 0) ? nodes[0] : undefined));
+    }
+  }
+
+  getNodesFromItem(mdmItem: MDMItem) {
+    return this.getNode(this._nodeUrl + '/' + mdmItem.source + '/' + this.typeToUrl(mdmItem.type) + '/' + mdmItem.id).pipe(
+      map(nodes => (nodes && nodes.length > 0) ? nodes[0] : undefined));
+  }
+
+  typeToUrl(type: string) {
+    switch (type) {
+      case 'StructureLevel':
+        return 'pools';
+      case 'MeaResult':
+        return 'measurements';
+      case 'SubMatrix':
+        return 'channelgroups';
+      case 'MeaQuantity':
+        return 'channels';
+      case 'Quantity':
+        return 'quantities';
+      default:
+        return type.toLowerCase() + 's';
+    }
+  }
+
+  getNode(url: string) {
+    return this.http.get(url).pipe(
+      map(res => plainToClass(Node, res.json().data)),
+      catchError(this.httpErrorHandler.handleError));
+  }
+
+  getNodesByUrl(url: string) {
+    // return this.http.get(this._nodeUrl + url).pipe(
+    //   map(res => plainToClass(Node, res.json().data)),
+    //   catchError(this.httpErrorHandler.handleError));
+    return this.getNode(this._nodeUrl + url);
+  }
+
+  getNodesByAbsoluteUrl(url: string) {
+    return this.getNode(url);
+  }
+
+  getNodeByRelation(sourceName: string, type: string, id: string) {
+    return this.getNode(this._nodeUrl + '/' + sourceName + '/' + this.typeToUrl(type) + '/' + id);
+  }
+
+  private getUrl(node: Node) {
+    return this._nodeUrl + '/' + node.sourceName + '/' + node.type + '/' + node.id;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/node.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/node.ts
new file mode 100644
index 0000000..f97e60d
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/node.ts
@@ -0,0 +1,97 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Type } from 'class-transformer';
+
+export enum ContextGroup {
+  ORDERED = 0,
+  MEASURED = 1
+}
+
+export class Attribute {
+  name: string;
+  unit: string;
+  dataType: string;
+  value: string | string [] | MDMLink | MDMLink[] | MDMLink[][];
+  sortIndex?: number;
+  readOnly?: boolean;
+  mandatory?: boolean;
+  description?: string;
+}
+
+export class MergedSensorAttribute {
+  name: string[];
+  unit: string[];
+  dataType: string[];
+  value: (string | MDMLink | MDMLink[])[];
+}
+
+export class MDMLink {
+  remotePath: string;
+  mimeType: string;
+  description: string;
+  size: string;
+
+  public getFileName() {
+    let fileName = '';
+    if (this.remotePath != undefined) {
+      const index = this.remotePath.lastIndexOf('/') + 1;
+      fileName = this.remotePath.substring(index);
+    }
+    return fileName;
+  }
+}
+
+export class FileSize {
+  remotePath: string;
+  size: string;
+}
+
+export class Relation {
+  name: string;
+  type: string;
+  entityType: string;
+  contextType: string;
+  ids: string[];
+  parentId: string;
+}
+
+export class Node {
+  name: string;
+  id: string;
+  type: string;
+  sourceType: string;
+  sourceName: string;
+  @Type(() => Attribute)
+  attributes: (Attribute)[];
+  @Type(() => Relation)
+  relations: Relation[];
+  active: boolean;
+
+  getClass() {
+    switch (this.type) {
+      case 'StructureLevel':
+        return 'pool';
+      case 'MeaResult':
+        return 'measurement';
+      case 'SubMatrix':
+        return 'channelgroup';
+      case 'MeaQuantity':
+        return 'channel';
+      default:
+        return this.type.toLowerCase();
+    }
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/nodeprovider.service.spec.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/nodeprovider.service.spec.ts
new file mode 100644
index 0000000..3f0697c
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/nodeprovider.service.spec.ts
@@ -0,0 +1,84 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { HttpModule } from '@angular/http';
+import { TestBed, inject } from '@angular/core/testing';
+
+import { TranslateModule } from '@ngx-translate/core';
+import { of as observableOf,  Observable } from 'rxjs';
+
+import { PropertyService } from '../core/property.service';
+import { NodeproviderService } from './nodeprovider.service';
+import { NodeService } from '../navigator/node.service';
+import { PreferenceService, Preference } from '../core/preference.service';
+import { MDMNotificationService } from '../core/mdm-notification.service';
+import { QueryService } from '../tableview/query.service';
+import { MDMItem } from '../core/mdm-item';
+import { HttpErrorHandler } from '../core/http-error-handler';
+
+declare function require(path: string): any;
+const defaultNodeProvider = require('../navigator/defaultnodeprovider.json');
+
+class TestPreferenceService {
+  getPreferenceForScope( scope: string, key?: string ): Observable<Preference[]> {
+    let p = new Preference();
+    p.value = JSON.stringify(defaultNodeProvider);
+    return observableOf([p]);
+  }
+}
+
+describe ( 'NodeproviderService', () => {
+
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      imports: [
+        HttpModule,
+        TranslateModule.forRoot(),
+      ],
+      providers: [
+        PropertyService,
+        {
+          provide: PreferenceService,
+          useClass: TestPreferenceService
+        },
+        NodeproviderService,
+        MDMNotificationService,
+        QueryService,
+        HttpErrorHandler,
+        NodeService]
+    });
+  });
+
+  it('getSubNodeprovider', inject([NodeproviderService], (nodeproviderService) => {
+      let item = new MDMItem('MDMNVH', 'Project', 'id1');
+      let query = nodeproviderService.getSubNodeprovider(item);
+
+      expect(query).toEqual('/pools?filter=Project.Id eq "{Project.Id}"');
+  }));
+
+  it('getSubNodeprovider not found', inject([NodeproviderService], (nodeproviderService) => {
+      let item = new MDMItem('MDMNVH', 'xxx', 'id1');
+      let query = nodeproviderService.getSubNodeprovider(item, defaultNodeProvider);
+
+      expect(query).toEqual(undefined);
+  }));
+
+  it('replace', inject([NodeproviderService], (nodeproviderService) => {
+      let item = new MDMItem('MDMNVH', 'Project', 'id1');
+      let query = nodeproviderService.replace('/pools?filter=Project.Id eq "{Project.Id}"', item);
+
+      expect(query).toEqual('/MDMNVH/pools?filter=Project.Id eq "id1"');
+  }));
+});
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/nodeprovider.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/nodeprovider.service.ts
new file mode 100644
index 0000000..5ba4f4b
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/nodeprovider.service.ts
@@ -0,0 +1,122 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Injectable, EventEmitter} from '@angular/core';
+import {Http} from '@angular/http';
+import {map} from 'rxjs/operators';
+
+import {MDMNotificationService} from '../core/mdm-notification.service';
+import {PreferenceService, Scope} from '../core/preference.service';
+import {QueryService} from '../tableview/query.service';
+import {PropertyService} from '../core/property.service';
+import {MDMItem} from '../core/mdm-item';
+
+import { TranslateService } from '@ngx-translate/core';
+import { TRANSLATE } from '../core/mdm-core.module';
+
+declare function require(path: string): any;
+const defaultNodeProvider = require('./defaultnodeprovider.json');
+
+@Injectable()
+export class NodeproviderService {
+
+  public nodeProviderChanged: EventEmitter<any> = new EventEmitter<any>();
+  private nodeproviders = [defaultNodeProvider];
+
+  private activeNodeprovider: any = this.nodeproviders[0];
+
+  constructor(private http: Http,
+              private _prop: PropertyService,
+              private queryService: QueryService,
+              private preferenceService: PreferenceService,
+              private notificationService: MDMNotificationService,
+              private translateService: TranslateService) {
+      this.loadNodeproviders();
+  }
+
+  setActiveNodeprovider(nodeprovider: any) {
+    this.activeNodeprovider = nodeprovider;
+    this.nodeProviderChanged.emit(this.activeNodeprovider);
+  }
+
+  getActiveNodeprovider() {
+    return this.activeNodeprovider;
+  }
+
+  getNodeproviders() {
+    return this.nodeproviders;
+  }
+
+  loadNodeproviders() {
+   this.preferenceService.getPreferenceForScope(Scope.SYSTEM, 'nodeprovider.').pipe(
+      map(prefs => prefs.map(p => JSON.parse(p.value))))
+      .subscribe(
+        nodeproviders => this.setNewNodeproviders(nodeproviders),
+        error => this.notificationService.notifyError(
+          this.translateService.instant('navigator.nodeprovider.err-cannot-load-node-provider-from-settings'), error)
+      );
+  }
+
+  setNewNodeproviders(nodeproviders) {
+    this.nodeproviders = nodeproviders;
+    this.nodeproviders.unshift(defaultNodeProvider);
+  }
+
+  getQueryForChildren(item: MDMItem) {
+    return this.replace(this.getSubNodeprovider(item), item);
+  }
+
+  getSubNodeprovider(item: MDMItem) {
+    let current = this.activeNodeprovider;
+    do {
+      if (current.type === item.type && current.children) {
+        return current.children.query;
+      } else {
+        current = current.children;
+      }
+    }
+    while (current);
+
+    return current;
+  }
+
+replace(query: string, item: MDMItem) {
+    return '/' + item.source + query.replace(/{(\w+)\.(\w+)}/g, function(match, type, attr) {
+
+      if (type !== item.type) {
+        this.notificationService.notifyWarn(
+          this.translateService.instant(TRANSLATE('navigator.nodeprovider.err-unsupported-type'),
+          <any>{'type': type, 'typeToUse': item.type}));
+      }
+
+      if (attr === 'Id') {
+        return item.id;
+      }
+    });
+}
+
+  getPathTypes(type: string): string[] {
+    let current = this.activeNodeprovider;
+    let ancestorList: string[] = [];
+    while (current) {
+        ancestorList.push(current.type);
+        if (current.type === type) {
+          return ancestorList;
+        }
+        current = current.children;
+   }
+    return [];
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/nodeprovider2.json b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/nodeprovider2.json
new file mode 100644
index 0000000..8db3731
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/navigator/nodeprovider2.json
@@ -0,0 +1,14 @@
+{
+  "name" : "Channels",
+  "type" : "Environment",
+  "children" : {
+    "type" : "Test",
+    "attribute" : "Name",
+    "query" : "/tests",
+    "children" : {
+      "type" : "Channel",
+      "attribute" : "Name",
+      "query" : "/channels?filter=Test.Id eq \"{Test.Id}\""
+    }
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/notice.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/notice.component.ts
new file mode 100644
index 0000000..84324e6
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/notice.component.ts
@@ -0,0 +1,25 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Component } from '@angular/core';
+
+@Component({
+  selector: 'notice',
+  templateUrl: './NOTICE.html',
+  styles: ['pre { overflow-y: scroll; height: 400px; }']
+})
+export class NoticeComponent {
+
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/search/edit-searchFields.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/search/edit-searchFields.component.html
new file mode 100644
index 0000000..15cad3e
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/search/edit-searchFields.component.html
@@ -0,0 +1,105 @@
+<!-- ********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ******************************************************************************** -->
+
+<style>
+  .modal-body >>> .dropup .dropdown-menu {
+    margin-bottom: 38px !important;
+  }
+
+  .modal-body >>> .ui-tree .ui-tree-container {
+    margin: 0 0 4px 0 !important;
+    width: 100%;
+    overflow: visible;
+  }
+
+  .modal-body >>> .ui-tree {
+    min-height: 50vh !important;
+    max-height: 76vh !important;
+    overflow: auto;
+  }
+
+  .modal-body >>> .ui-tree .ui-treenode .ui-treenode-content .ui-treenode-label {
+    padding-right: .75em;
+  }
+
+  .auto-width-typeahead >>> typeahead-container {
+    width: auto!important;
+  }
+</style>
+<div bsModal #lgEditSearchFieldsModal="bs-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="SelectSearchComponents" aria-hidden="true">
+  <div class="modal-dialog modal-lg">
+    <div class="modal-content">
+      <div class="modal-header">
+        <h4 class="modal-title">{{ 'search.edit-searchfields.title-search-field-editor' | translate }}</h4>
+        <button type="button" title="{{ 'search.edit-searchfields.tooltip-close' | translate }}" class="close" (click)="childModal.hide()" aria-label="Close">
+          <span aria-hidden="true">&times;</span>
+        </button>
+      </div>
+      <div class="modal-body">
+        <div class="container-fluid">
+          <div class="row">
+            <div class="col-md-4 auto-width-typeahead" style="min-height: 50vh; max-height: 77vh;">
+              <input [(ngModel)]="selectedSearchAttribute" [typeahead]="typeAheadValues"
+                  (typeaheadOnSelect)="typeaheadOnSelect($event)"
+                  typeaheadOptionField="label"
+                  typeaheadGroupField="group"
+                  typeaheadOptionsLimit="15"
+                  placeholder="{{ 'search.edit-searchfields.enter-search-text' | translate }}"
+                  class="form-control"
+                  style="margin-bottom: 15px;">
+              <searchattribute-tree [searchAttributes]="searchAttributes" [environments]="environments"></searchattribute-tree>
+            </div>
+            <div class="col-md-8" style="min-height: 50vh; max-height: 77vh; overflow-y:auto;">
+              <label for="search-source" class="col-form-label" style="padding: 8px 0 15px 0;">{{ 'search.edit-searchfields.lbl-selected-search-attributes' | translate }}</label>
+              <div *ngIf="layout.getSourceNames().length === 0" style="text-align: center;">
+                {{ 'search.edit-searchfields.no-search-attributes-selected' | translate }}
+              </div>
+              <div *ngFor="let env of layout.getSourceNames()">
+              <div *ngIf="layout.getConditions(env).length > 0">
+                <span style="font-weight: bold;">{{mapSourceNameToName(env)}}</span>
+                <table class="table table-bordered searchdefinition">
+                  <colgroup>
+                    <col style="width: 44%;">
+                    <col style="width: 44%;">
+                    <col style="width: 4%;">
+                    <col style="width: 4%;">
+                    <col style="width: 4%;">
+                  </colgroup>
+                  <tr *ngFor="let condition of layout.getConditions(env)">
+                    <td>{{condition?.type}}</td>
+                    <td>{{condition?.attribute}}</td>
+                    <td style="width: 30px; text-align: center; vertical-align: middle;">
+                      <span class="fa fa-chevron-up" [ngStyle]="{'visibility': isFirst(condition) ? 'hidden': 'visible'}" style="cursor: pointer; margin-bottom: 0;" (click)="moveUp(condition)"></span>
+                    </td>
+                    <td style="width: 30px; text-align: center; vertical-align: middle;">
+                      <span class="fa fa-chevron-down" [ngStyle]="{'visibility': isLast(condition)? 'hidden': 'visible'}" style="cursor: pointer;" (click)="moveDown(condition)"></span>
+                    </td>
+                    <td style="text-align: center;"><span class="fa fa-times" style="cursor: pointer" title="{{ 'search.edit-searchfields.remove' | translate }}" (click)="removeCondition(condition)"></span></td>
+                  </tr>
+                </table>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="row" style="margin-top: 15px;">
+          <div class="col-md-12">
+            <button type="button" class="btn btn-default pull-right" (click)="addSearchFields()" [disabled]="conditions.length === 0">
+              <span class="fa fa-check"></span> {{ 'search.edit-searchfields.btn-apply-changes' | translate }}
+            </button>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/search/edit-searchFields.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/search/edit-searchFields.component.ts
new file mode 100644
index 0000000..3d22299
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/search/edit-searchFields.component.ts
@@ -0,0 +1,209 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Component, ViewChild, Input, Output, EventEmitter, OnChanges, SimpleChanges, OnInit} from '@angular/core';
+
+import {SearchAttribute, SearchLayout} from './search.service';
+import {FilterService, Condition, Operator} from './filter.service';
+import {NodeService} from '../navigator/node.service';
+
+import {Node} from '../navigator/node';
+import {SearchattributeTreeComponent} from '../searchattribute-tree/searchattribute-tree.component';
+
+import {TypeaheadMatch} from 'ngx-bootstrap/typeahead';
+import {ModalDirective} from 'ngx-bootstrap';
+import {TreeNode} from 'primeng/primeng';
+import {MDMNotificationService} from '../core/mdm-notification.service';
+import {classToClass} from 'class-transformer';
+
+import { TranslateService } from '@ngx-translate/core';
+
+export class SearchField {
+  group: string;
+  attribute: string;
+
+  constructor(group?: string, attribute?: string) {
+    this.group = group || '';
+    this.attribute = attribute || '';
+  }
+
+  equals(searchField: SearchField) {
+    return (searchField.group === this.group && searchField.attribute === this.attribute);
+  }
+}
+
+@Component({
+  selector: 'edit-searchFields',
+  templateUrl: 'edit-searchFields.component.html',
+})
+export class EditSearchFieldsComponent implements OnChanges, OnInit {
+
+  @ViewChild('lgEditSearchFieldsModal') public childModal: ModalDirective;
+  @ViewChild(SearchattributeTreeComponent) tree: SearchattributeTreeComponent;
+
+  @Input() environments: Node[];
+  @Input() searchAttributes: { [env: string]: SearchAttribute[] } = {};
+  typeAheadValues: { label: string, group: string, attribute: SearchAttribute }[] = [];
+
+  @Output()
+  conditionsSubmitted = new EventEmitter<Condition[]>();
+
+  layout: SearchLayout = new SearchLayout;
+  conditions: Condition[] = [];
+  selectedSearchAttribute: SearchAttribute;
+
+  subscription: any;
+
+  constructor(private filterService: FilterService,
+    private notificationService: MDMNotificationService,
+    private translateService: TranslateService) { }
+
+  ngOnInit() {
+    this.tree.onNodeSelect$.subscribe(
+          node => this.nodeSelect(node),
+          error => this.notificationService.notifyError(
+            this.translateService.instant('search.edit-searchfields.err-cannot-update-selected-node'), error)
+        );
+  }
+
+  ngOnChanges(changes: SimpleChanges) {
+    if (changes['searchAttributes'] || changes['environments']) {
+      let ar = Object.keys(this.searchAttributes)
+          .map(env => this.searchAttributes[env])
+          .reduce((acc, value) => acc.concat(value), <SearchAttribute[]> [])
+          .map(sa => { return { 'label': sa.boType + '.' + sa.attrName, 'group': sa.boType, 'attribute': sa }; });
+
+      this.typeAheadValues = this.uniqueBy(ar, p => p.label);
+    }
+    if (changes['environments']) {
+      this.conditionUpdated();
+    }
+  }
+
+  show(conditions?: Condition[]) {
+    if (conditions) {
+      this.conditions = classToClass(conditions);
+    } else {
+      this.conditions = [];
+    }
+    this.conditionUpdated();
+    this.childModal.show();
+    return this.conditionsSubmitted;
+  }
+
+  conditionUpdated() {
+    let envs = (this.environments || []).map(node => node.sourceName);
+    this.layout = SearchLayout.createSearchLayout(envs, this.searchAttributes, this.conditions);
+  }
+
+  nodeSelect(node: TreeNode) {
+    if (node && node.type === 'attribute') {
+      let sa = <SearchAttribute>node.data;
+      this.pushCondition(new Condition(sa.boType, sa.attrName, Operator.EQUALS, [], sa.valueType));
+      this.conditionUpdated();
+    }
+  }
+
+  removeCondition(condition: Condition) {
+    let index = this.conditions.findIndex(c => condition.type === c.type && condition.attribute === c.attribute);
+    this.conditions.splice(index, 1);
+    this.conditionUpdated();
+  }
+
+  addSearchFields() {
+    this.childModal.hide();
+    this.conditionsSubmitted.emit(this.conditions);
+  }
+
+  public typeaheadOnSelect(match: TypeaheadMatch) {
+    this.pushCondition(new Condition(match.item.attribute.boType,
+      match.item.attribute.attrName, Operator.EQUALS, [], match.item.attribute.valueType));
+    this.conditionUpdated();
+    this.selectedSearchAttribute = undefined;
+  }
+
+  pushCondition(condition: Condition) {
+    if (this.conditions.find(c => condition.type === c.type && condition.attribute === c.attribute)) {
+      this.notificationService.notifyInfo(this.translateService.instant('search.edit-searchfields.search-field-already-selected'), 'Info');
+    } else {
+      this.conditions.push(condition);
+      this.conditionUpdated();
+    }
+  }
+
+  mapSourceNameToName(sourceName: string) {
+    return NodeService.mapSourceNameToName(this.environments, sourceName);
+  }
+
+  isLast(col: Condition) {
+    let sourceName = this.layout.getSourceName(col);
+    if (sourceName) {
+      let conditionsInSameSource = this.layout.getConditions(sourceName);
+      return conditionsInSameSource.indexOf(col) === conditionsInSameSource.length - 1;
+    }
+  }
+
+  isFirst(col: Condition) {
+    let sourceName = this.layout.getSourceName(col);
+    if (sourceName) {
+      let conditionsInSameSource = this.layout.getConditions(sourceName);
+      return conditionsInSameSource.indexOf(col) === 0;
+    }
+  }
+
+  moveUp(condition: Condition) {
+    if (!this.isFirst(condition)) {
+      let sourceName = this.layout.getSourceName(condition);
+      if (sourceName) {
+        let conditionsInSameSource = this.layout.getConditions(sourceName);
+
+        let oldIndex = conditionsInSameSource.indexOf(condition);
+        let otherCondition = conditionsInSameSource[oldIndex - 1];
+        this.swap(condition, otherCondition);
+      }
+    }
+  }
+
+  moveDown(condition: Condition) {
+    if (!this.isLast(condition)) {
+      let sourceName = this.layout.getSourceName(condition);
+      if (sourceName) {
+        let conditionsInSameSource = this.layout.getConditions(sourceName);
+
+        let oldIndex = conditionsInSameSource.indexOf(condition);
+        let otherCondition = conditionsInSameSource[oldIndex + 1];
+        this.swap(condition, otherCondition);
+      }
+    }
+  }
+
+  private swap(condition1: Condition, condition2: Condition) {
+    let index1 = this.conditions.findIndex(c => c.type === condition1.type && c.attribute === condition1.attribute);
+    let index2 = this.conditions.findIndex(c => c.type === condition2.type && c.attribute === condition2.attribute);
+
+    let tmp = this.conditions[index1];
+    this.conditions[index1] = this.conditions[index2];
+    this.conditions[index2] = tmp;
+    this.conditionUpdated();
+  }
+
+  private uniqueBy<T>(a: T[], key: (T) => any) {
+    let seen = {};
+    return a.filter(function(item) {
+      let k = key(item);
+      return seen.hasOwnProperty(k) ? false : (seen[k] = true);
+    });
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/search/filter.service.spec.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/search/filter.service.spec.ts
new file mode 100644
index 0000000..d834036
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/search/filter.service.spec.ts
@@ -0,0 +1,106 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { HttpModule } from '@angular/http';
+import { TestBed, async, inject } from '@angular/core/testing';
+
+import { of as observableOf,  Observable } from 'rxjs';
+
+import { PreferenceService, Preference, Scope } from '../core/preference.service';
+import { PropertyService } from '../core/property.service';
+import { Operator, OperatorUtil, FilterService, SearchFilter } from './filter.service';
+
+class TestPreferenceService {
+  getPreferenceForScope(scope: string, key?: string): Observable<Preference[]> {
+    return observableOf([
+    {
+      id: 1,
+      key: 'filter.nodes.test',
+      scope: Scope.USER,
+      source: null,
+      user: 'testUser',
+      value: '{"conditions":[],"name":"TestFilter","environments":[],"resultType":"Test","fulltextQuery":""}'
+    }
+  ]);
+  }
+}
+
+describe('OperatorUtil', () => {
+
+  describe('toString()', () => {
+    it('should return associated string', () => {
+      expect(OperatorUtil.toString(Operator.EQUALS)).toMatch('=');
+      expect(OperatorUtil.toString(Operator.LESS_THAN)).toMatch('<');
+      expect(OperatorUtil.toString(Operator.GREATER_THAN)).toMatch('>');
+      expect(OperatorUtil.toString(Operator.LIKE)).toMatch('like');
+    });
+  });
+
+  describe('toFilterString()', () => {
+    it('should return associated filterstring', () => {
+      expect(OperatorUtil.toFilterString(Operator.EQUALS)).toMatch('eq');
+      expect(OperatorUtil.toFilterString(Operator.LESS_THAN)).toMatch('lt');
+      expect(OperatorUtil.toFilterString(Operator.GREATER_THAN)).toMatch('gt');
+      expect(OperatorUtil.toFilterString(Operator.LIKE)).toMatch('lk');
+    });
+  });
+});
+
+describe('FilterService', () => {
+
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      imports: [HttpModule],
+      providers: [
+        FilterService,
+        PropertyService,
+        {
+          provide: PreferenceService,
+          useClass: TestPreferenceService
+        },
+      ]
+    });
+
+  });
+
+  describe('getFilters()', () => {
+
+    it('should return array of filters from preference',  async(inject([FilterService], (service) => {
+      let filters = [new SearchFilter('TestFilter', [], 'Test', '', [])];
+
+      service.getFilters().subscribe(f => expect(f).toEqual(filters));
+    })));
+  });
+
+  describe('filterToPreference()', () => {
+
+    it('should return preference holding input filter',  async(inject([FilterService], (service) => {
+      let filter = new SearchFilter('TestFilter', [], 'Test', '', []);
+      let pref = service.filterToPreference(filter);
+
+      expect(pref.scope).toEqual(Scope.USER);
+      expect(pref.key).toMatch('filter.nodes.TestFilter');
+      expect(pref.value).toEqual('{"conditions":[],"name":"TestFilter","environments":[],"resultType":"Test","fulltextQuery":""}');
+    })));
+
+    it('should return preference holding input filter',  async(inject([FilterService], (service) => {
+      let pref = service.filterToPreference(undefined);
+
+      expect(pref.scope).toEqual(Scope.USER);
+      expect(pref.key).toMatch('filter.nodes.');
+      expect(pref.value).toEqual(undefined);
+    })));
+  });
+});
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/search/filter.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/search/filter.service.ts
new file mode 100644
index 0000000..64bef6b
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/search/filter.service.ts
@@ -0,0 +1,140 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Injectable} from '@angular/core';
+import {Http} from '@angular/http';
+import {map} from 'rxjs/operators';
+
+import {PropertyService} from '../core/property.service';
+import {PreferenceService, Preference, Scope} from '../core/preference.service';
+import {Exclude, serialize, deserialize} from 'class-transformer';
+import { TRANSLATE } from '../core/mdm-core.module';
+
+export enum Operator {
+  EQUALS,
+  LESS_THAN,
+  GREATER_THAN,
+  LIKE
+}
+
+export namespace OperatorUtil {
+  export function values() {
+    return [ Operator.EQUALS, Operator.LESS_THAN, Operator.GREATER_THAN, Operator.LIKE ];
+  }
+  export function toString(operator: Operator) {
+      switch (operator) {
+          case Operator.EQUALS:
+            return '=';
+          case Operator.LESS_THAN:
+            return '<';
+          case Operator.GREATER_THAN:
+            return '>';
+          case Operator.LIKE:
+            return 'like';
+          default:
+            return undefined;
+      }
+  }
+  export function toFilterString(operator: Operator) {
+      switch (operator) {
+          case Operator.EQUALS:
+            return 'eq';
+          case Operator.LESS_THAN:
+            return 'lt';
+          case Operator.GREATER_THAN:
+            return 'gt';
+          case Operator.LIKE:
+            return 'lk';
+          default:
+            return undefined;
+      }
+  }
+}
+
+export class Condition {
+  type: string;
+  attribute: string;
+  operator: Operator;
+  value: string[];
+  valueType: string;
+
+  @Exclude()
+  sortIndex: number;
+
+  constructor(type: string, attribute: string, operator: Operator, value: string[], valueType?: string) {
+    this.type = type;
+    this.attribute = attribute;
+    this.operator = operator;
+    this.value = value;
+    if (valueType) {
+      this.valueType = valueType.toLowerCase();
+    } else {
+      this.valueType = 'string';
+    }
+  }
+}
+
+export class SearchFilter {
+  name: string;
+  environments: string[];
+  resultType: string;
+  fulltextQuery: string;
+  conditions: Condition[] = [];
+
+  constructor(name: string, environments: string[], resultType: string, fulltextQuery: string, conditions: Condition[]) {
+    this.name = name;
+    this.environments = environments;
+    this.resultType = resultType;
+    this.fulltextQuery = fulltextQuery;
+    this.conditions = conditions;
+  }
+}
+
+@Injectable()
+export class FilterService {
+  public readonly NO_FILTER_NAME = TRANSLATE('search.filter.no-filter-selected');
+  public readonly NEW_FILTER_NAME = TRANSLATE('search.filter.new-filter');
+  public readonly EMPTY_FILTER: SearchFilter = new SearchFilter(this.NO_FILTER_NAME, [], 'Test', '', []);
+
+  constructor(private http: Http,
+              private _prop: PropertyService,
+              private preferenceService: PreferenceService) {
+  }
+
+  getFilters() {
+    return this.preferenceService.getPreferenceForScope(Scope.USER, 'filter.nodes.').pipe(
+      map(preferences => preferences.map(p => this.preferenceToFilter(p))));
+  }
+
+  saveFilter(filter: SearchFilter) {
+    return this.preferenceService.savePreference(this.filterToPreference(filter));
+  }
+
+  private preferenceToFilter(pref: Preference) {
+    return deserialize(SearchFilter, pref.value);
+  }
+
+  private filterToPreference(filter: SearchFilter) {
+    let pref = new Preference();
+    pref.value = serialize(filter);
+    pref.key = filter ? 'filter.nodes.' + filter.name : 'filter.nodes.';
+    pref.scope = Scope.USER;
+    return pref;
+  }
+
+  deleteFilter(name: string) {
+    return this.preferenceService.deletePreferenceByScopeAndKey(Scope.USER, 'filter.nodes.' + name);
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/search/mdm-search.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/search/mdm-search.component.html
new file mode 100644
index 0000000..5252208
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/search/mdm-search.component.html
@@ -0,0 +1,192 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+<style>
+#searchtext .form-control, #searchtext .btn {
+    border-color: #000000;
+    outline: 0;
+    box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(0, 0, 0,.6);
+}
+
+/* :host /deep/ .ui-multiselect .ui-multiselect-label {
+  padding: .25em 2em .25em .25em;
+} */
+</style>
+
+<div class="container" style="padding: 0;">
+  <div class="row">
+    <div class="col-sm">
+      <label for="search-source" class="col-form-label">{{ 'search.mdm-search.lbl-search-filter' | translate }}</label>
+      <p-dropdown [options]="filters" optionLabel="name" (onChange)="onFilterChange($event)" [style]="{'width': '100%'}"></p-dropdown>
+    </div>
+    <div class="col-sm">
+      <label for="search-source" class="col-form-label">{{ 'search.mdm-search.lbl-source' | translate }}</label>
+      <p-multiSelect [options]="dropdownModel" maxSelectedLabels=2 [(ngModel)]="selectedEnvs" (onChange)="selectedEnvironmentsChanged()" title="{{ 'search.mdm-search.tooltip-select-sources' | translate }}" [style]="{'width': '100%'}"></p-multiSelect>
+    </div>
+    <div class="col-sm">
+      <label for="search-resulttype" class="col-form-label">{{ 'search.mdm-search.lbl-result-type' | translate }}</label>
+      <p-dropdown [options]="definitions" optionLabel="label" (onChange)="onResultTypeChane($event)" [style]="{'width': '100%'}"></p-dropdown>
+    </div>
+  </div>
+  <div class="row" style="margin-top: 5px; margin-bottom: 10px;">
+    <div class="col-sm input-group" id="searchtext" style="width:100%">
+      <input type="text" class="form-control" name="searchText" placeholder="{{ 'search.mdm-search.enter-search-text' | translate }}" [(ngModel)]="currentFilter.fulltextQuery" (keyup.enter)="onSearch()" aria-describedby="basic-addon1" 
+        title="{{ 'search.mdm-search.tooltip-search-text' | translate }}">
+      <div class="input-group-append">
+        <button type="button" class="btn btn-mdm-no-margin" (click)="onSearch()">{{ 'search.mdm-search.btn-search' | translate }}</button>
+      </div>
+    </div>
+  </div>
+</div>
+
+<accordion>
+  <accordion-group id="advancedSearch" [isOpen]="isAdvancedSearchOpen" #advancedSearch [ngClass]="{'greyed': !isAdvancedSearchActive}">
+    <div accordion-heading class="thinheader container-fluid">
+      <div class="row">
+        <div class="col text-left">
+          <input type="checkbox" [(ngModel)]="isAdvancedSearchActive" (click)="onCheckBoxClick($event)" title="{{ getAdvancedSearchCbxTitle() | translate }}"/> &nbsp;{{ 'search.mdm-search.lbl-advanced-search' | translate }} &nbsp;&nbsp;
+          <button type="button" title="{{ 'search.mdm-search.tooltip-create-new-search-filter' | translate }}" class="btn btn-mdm" (click)="showSearchFieldsEditor($event)" [disabled]=!isAdvancedSearchActive><span class="fa fa-plus"></span></button>
+          <button type="button" title="{{ 'search.mdm-search.tooltip-edit-search-filter' | translate }}" class="btn btn-mdm" (click)="showSearchFieldsEditor($event,currentFilter.conditions)" [disabled]=!isAdvancedSearchActive><span class="fa fa-pencil-square-o"></span></button>
+          <button type="button" class="btn btn-mdm" (click)="showSaveModal($event)" title="{{ 'search.mdm-search.tooltip-save-search-filter' | translate }}" [disabled]=!isAdvancedSearchActive><span class="fa fa-floppy-o"></span></button>
+          <button type="button" class="btn btn-mdm" (click)="deleteFilter($event)" title="{{ 'search.mdm-search.tooltip-delete-search-filter' | translate }}"><span class="fa fa-times"></span></button>
+        </div>
+        <div class="col text-right">
+          <button type="button" class="btn btn-mdm" (click)="resetConditions($event)" title="{{ 'search.mdm-search.tooltip-reset-search-conditions' | translate }}" [disabled]=!isAdvancedSearchActive><span class="fa fa-eraser"></span></button>
+          <span class="fa" style="color: #333 !important; padding-left: 15px;" [ngClass]="{'fa-chevron-down': advancedSearch?.isOpen, 'fa-chevron-right': !advancedSearch?.isOpen}"></span>
+        </div>
+      </div>
+    </div>
+    <div class="container-fluid">
+      <div class="row">
+        <div class="col-md-12">
+          <div *ngIf="layout.getSourceNames().length === 0" style="text-align: center; margin-bottom: 5px;">
+            {{ 'search.mdm-search.no-search-attributes-selected' | translate }}
+          </div>
+          <div *ngFor="let env of layout.getSourceNames()">
+            <div *ngIf="layout.getConditions(env).length > 0">
+              <div style="font-weight: bold;" *ngIf="mapSourceNameToName(env) === 'Global'" title="{{ 'search.mdm-search.tooltip-global-search-attributes' | translate }}">
+                {{ 'search.mdm-search.global-search-attributes' | translate }}
+              </div>
+              <div style="font-weight: bold;" *ngIf="mapSourceNameToName(env) !== 'Global'"  title="Suchattribute, die nicht in allen Datenquellen verfügbar sind, sondern nur in der aktuellen Datenquelle.">
+                {{ 'search.mdm-search.search-attributes-from' | translate }} {{mapSourceNameToName(env)}}
+              </div>
+              <table class="table table-bordered searchdefinition">
+                <colgroup>
+                  <col style="width: 17%;">
+                  <col style="width: 17%;">
+                  <col style="width: 5%;">
+                  <col style="width: 58%;">
+                  <col style="width: 3%;">
+                </colgroup>
+                <tr search-condition class="condition" *ngFor="let condition of layout.getConditions(env)"
+                    [env]="env"
+                    [condition]="condition"
+                    [disabled]="!isAdvancedSearchActive"
+                    [selectedEnvs]="selectedEnvironments"
+                    (onRemove)="removeCondition($event)">
+                </tr>
+              </table>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </accordion-group>
+  <accordion-group  id="searchResults" [isOpen]="isSearchResultsOpen" #searchResults>
+    <div accordion-heading class="thinheader container-fluid">
+      <div class="row">
+        <div class="col text-left">
+          {{ 'search.mdm-search.results' | translate }} &nbsp;&nbsp;
+          <mdm-view (click)="onViewClick($event)"></mdm-view>
+        </div>
+        <div class="col text-right">
+          <span class="badge">{{results?.rows.length}}</span>&nbsp;
+          <button type="button" class="btn btn-mdm" (click)="clearResultlist($event)" title="{{ 'search.mdm-search.tooltip-clear-search-results' | translate }}"><span class="fa fa-eraser"></span></button>
+          <button type="button" class="btn btn-mdm" title="{{ 'search.mdm-search.tooltip-add-selection-to-shopping-basket' | translate }}" (click)="selected2Basket($event)">
+            <span class="fa fa-shopping-cart" style="color:#DADADA; margin-right: -12px;"></span>
+            <span class="fa fa-shopping-cart" style="color:#A8A4A4; margin-right: -12px;"></span>
+            <span class="fa fa-shopping-cart"></span>
+          </button>
+          <span class="fa" [ngClass]="{'fa-chevron-down': searchResults?.isOpen, 'fa-chevron-right': !searchResults?.isOpen}" style="padding-left: 15px;"></span>
+        </div>
+      </div>
+    </div>
+    <div class="container-fluid">
+      <div class="row">
+          <mdm-tableview
+            [results]="results"
+            [view]="viewComponent.selectedView"
+            isShopable="true"
+            [menuItems]="contextMenuItems"
+            [selectedEnvs]="selectedEnvironments"
+            [searchAttributes]="allSearchAttributesForCurrentResultType"
+            [environments]="environments"
+            [loading]="loading">
+          </mdm-tableview>
+      </div>
+    </div>
+  </accordion-group>
+</accordion>
+
+<div bsModal #lgSaveModal="bs-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="SelectSearchComponents" aria-hidden="true">
+  <div class="modal-dialog modal-md">
+    <div class="modal-content">
+      <div class="modal-header">
+      <h4 class="modal-title">{{ 'search.mdm-search.title-save-search-filter-as' | translate }}:</h4>
+        <button type="button" class="close" (click)="childSaveModal.hide()" aria-label="Close">
+          <span aria-hidden="true">&times;</span>
+        </button>
+      </div>
+      <div class="modal-body">
+        <div class="container-fluid">
+          <div class="row" *ngIf="filters?.length > 0">
+            <p-dataTable
+              [value]="filters"
+              resizableColumns="false"
+              [reorderableColumns]="false"
+              [rows]="10"
+              [paginator]="true"
+              [pageLinks]="3"
+              [rowsPerPageOptions]="[10,20,50]"
+              [(selection)]="selectedRow"
+              (onRowClick)="onRowSelect($event)"
+              (onRowSelect)="onRowSelect($event)">
+              <p-column [style]="{'width':'30px'}" selectionMode="single"></p-column>
+              <p-column header="{{LblExistingFilterNames}}">
+                <ng-template pTemplate="body" let-col let-row="rowData" >
+                  {{row.name}}
+                </ng-template>
+              </p-column>
+            </p-dataTable>
+          </div>
+          <div class="row" style="margin-top: 15px;">
+            <div class="col-md-10" style="padding-left: 0;">
+            <input type="text" class="form-control" placeholder="{{ 'search.mdm-search.search-filter-name' | translate }}" [(value)]="filterName" (input)="filterName = $event.target.value" (keyup.enter)="saveFilter($event)">
+            </div>
+            <div class="col-md-2" style="padding: 0;">
+              <form class="form-inline">
+                <button type="button" class="btn btn-mdm pull-right" (click)="saveFilter($event)" [disabled]="!filterName" title="{{ getSaveFilterBtnTitle() | translate }}">
+                  <span class="fa fa-floppy-o"></span> {{ 'search.mdm-search.btn-save' | translate }}
+                </button>
+              </form>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+
+<edit-searchFields [searchAttributes]="allSearchAttributesForCurrentResultType" [environments]="selectedEnvironments"></edit-searchFields>
+<overwrite-dialog></overwrite-dialog>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/search/mdm-search.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/search/mdm-search.component.ts
new file mode 100644
index 0000000..ca98675
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/search/mdm-search.component.ts
@@ -0,0 +1,459 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Component, ViewChild, OnInit, OnDestroy} from '@angular/core';
+
+import {SearchService, SearchDefinition, SearchAttribute, SearchLayout} from './search.service';
+import {of as observableOf, combineLatest as observableCombineLatest} from 'rxjs';
+
+import {defaultIfEmpty, mergeMap, tap} from 'rxjs/operators';
+
+import {FilterService, SearchFilter, Condition} from './filter.service';
+import {NodeService} from '../navigator/node.service';
+import {BasketService} from '../basket/basket.service';
+import {QueryService, SearchResult } from '../tableview/query.service';
+
+import {LocalizationService} from '../localization/localization.service';
+import {MDMNotificationService} from '../core/mdm-notification.service';
+
+import {Node} from '../navigator/node';
+
+import {TableviewComponent} from '../tableview/tableview.component';
+import {ViewComponent} from '../tableview/view.component';
+
+import {ModalDirective} from 'ngx-bootstrap';
+import {AccordionPanelComponent} from 'ngx-bootstrap/accordion';
+
+import {MenuItem} from 'primeng/primeng';
+import {EditSearchFieldsComponent} from './edit-searchFields.component';
+import {OverwriteDialogComponent} from '../core/overwrite-dialog.component';
+
+import {classToClass, serialize, deserialize} from 'class-transformer';
+import {SelectItem} from 'primeng/primeng';
+
+import { TranslateService } from '@ngx-translate/core';
+import { streamTranslate, TRANSLATE } from '../core/mdm-core.module';
+
+@Component({
+  selector: 'mdm-search',
+  templateUrl: 'mdm-search.component.html',
+})
+export class MDMSearchComponent implements OnInit, OnDestroy {
+
+  maxResults = 1000;
+
+  filters: SearchFilter[] = [];
+  currentFilter: SearchFilter;
+  filterName = '';
+
+  environments: Node[];
+  selectedEnvironments: Node[] = [];
+
+  definitions: SearchDefinition[] = [];
+
+  results: SearchResult = new SearchResult();
+  allSearchAttributes: { [type: string]: { [env: string]: SearchAttribute[] }} = {};
+  allSearchAttributesForCurrentResultType: { [env: string]: SearchAttribute[] } = {};
+
+  isAdvancedSearchOpen = false;
+  isAdvancedSearchActive = true;
+  isSearchResultsOpen = false;
+
+  layout: SearchLayout = new SearchLayout;
+
+  public dropdownModel: SelectItem[] = [];
+  public selectedEnvs: string[] = [];
+
+  searchFields: { group: string, attribute: string }[] = [];
+
+  subscription: any;
+  searchExecuted = false;
+
+  selectedRow: SearchFilter;
+  lazySelectedRow: SearchFilter;
+  loading = false;
+
+  contextMenuItems: MenuItem[] = [
+    { label: 'Add to shopping basket', icon: 'fa fa-shopping-cart', command: (event) => this.addSelectionToBasket() }
+  ];
+
+  @ViewChild(ViewComponent)
+  viewComponent: ViewComponent;
+
+  @ViewChild(TableviewComponent)
+  tableViewComponent: TableviewComponent;
+
+  @ViewChild('lgSaveModal')
+  childSaveModal: ModalDirective;
+
+  @ViewChild(EditSearchFieldsComponent)
+  editSearchFieldsComponent: EditSearchFieldsComponent;
+
+  @ViewChild(OverwriteDialogComponent)
+  overwriteDialogComponent: OverwriteDialogComponent;
+
+  @ViewChild('advancedSearch')
+  advancedSearchPanel: AccordionPanelComponent;
+
+  @ViewChild('searchResults')
+  searchResultsPanel: AccordionPanelComponent;
+
+  constructor(private searchService: SearchService,
+    private queryService: QueryService,
+    private filterService: FilterService,
+    private nodeService: NodeService,
+    private localService: LocalizationService,
+    private notificationService: MDMNotificationService,
+    private basketService: BasketService,
+    private translateService: TranslateService) { }
+
+  ngOnInit() {
+    this.currentFilter = this.filterService.EMPTY_FILTER;
+
+    streamTranslate(this.translateService, TRANSLATE('search.mdm-search.add-to-shopping-basket')).subscribe(
+            (msg: string) => this.contextMenuItems[0].label = msg);
+
+    this.nodeService.getNodes().pipe(
+      mergeMap(envs => observableCombineLatest([
+        observableOf(envs),
+        this.searchService.loadSearchAttributesStructured(envs.map(env => env.sourceName)),
+        this.filterService.getFilters().pipe(defaultIfEmpty([this.currentFilter])),
+        this.searchService.getDefinitionsSimple()
+      ]))).subscribe(
+        ([envs, attrs, filters, definitions]) => this.init(envs, attrs, filters, definitions),
+        error => this.notificationService.notifyError(
+          this.translateService.instant('search.mdm-search.err-cannot-load-data-sources'), error)
+      );
+
+    // event handlers
+    this.viewComponent.viewChanged$.subscribe(
+      () => this.onViewChanged(),
+      error => this.notificationService.notifyError(this.translateService.instant('search.mdm-search.err-cannot-update-view'), error)
+    );
+  }
+
+  ngOnDestroy() {
+     this.saveState();
+  }
+
+  init(envs: Node[], attrs: { [type: string]: { [env: string]: SearchAttribute[] }},
+      filters: SearchFilter[], definitions: SearchDefinition[]) {
+    this.environments = envs;
+    this.allSearchAttributes = attrs;
+    this.filters = filters;
+    this.definitions = definitions;
+
+    this.dropdownModel = envs.map(env => <SelectItem>{ value: env.sourceName, label: env.name });
+    this.selectedEnvs = envs.map(env => env.sourceName);
+
+    this.updateSearchAttributesForCurrentResultType();
+    this.selectedEnvironmentsChanged();
+
+    this.loadState();
+  }
+
+  loadState() {
+
+    this.results = deserialize(SearchResult, sessionStorage.getItem('mdm-search.searchResult')) || new SearchResult();
+    this.selectFilter(deserialize(SearchFilter, sessionStorage.getItem('mdm-search.currentFilter')) || this.filterService.EMPTY_FILTER);
+    this.isAdvancedSearchActive = !('false' === sessionStorage.getItem('mdm-search.isAdvancedSearchActive'));
+    this.advancedSearchPanel.isOpen = !('false' === sessionStorage.getItem('mdm-search.isAdvancedSearchOpen'));
+    this.searchResultsPanel.isOpen = !('false' === sessionStorage.getItem('mdm-search.isSearchResultsOpen'));
+  }
+
+  saveState() {
+    sessionStorage.setItem('mdm-search.isSearchResultsOpen', serialize(this.searchResultsPanel.isOpen));
+    sessionStorage.setItem('mdm-search.isAdvancedSearchOpen', serialize(this.advancedSearchPanel.isOpen));
+    sessionStorage.setItem('mdm-search.currentFilter', serialize(this.currentFilter));
+    sessionStorage.setItem('mdm-search.searchResult', serialize(this.results));
+    sessionStorage.setItem('mdm-search.isAdvancedSearchActive', this.isAdvancedSearchActive.toString());
+  }
+
+  onViewClick(e: Event) {
+    e.stopPropagation();
+  }
+
+  onCheckBoxClick(event: any) {
+    event.stopPropagation();
+    this.isAdvancedSearchActive = event.target.checked;
+  }
+
+  onViewChanged() {
+    if (this.searchExecuted) {
+      this.onSearch();
+    }
+  }
+
+  selectedEnvironmentsChanged() {
+    this.currentFilter.environments = this.selectedEnvs;
+    if (this.environments) {
+      let envs = this.environments.filter(env =>
+        this.currentFilter.environments.find(envName => envName === env.sourceName));
+
+      if (envs.length === 0) {
+        this.selectedEnvironments = this.environments;
+      } else {
+        this.selectedEnvironments = envs;
+      }
+    }
+    this.calcCurrentSearch();
+  }
+
+  loadFilters() {
+    this.filters = [];
+    this.filterService.getFilters().pipe(
+      defaultIfEmpty([this.currentFilter]))
+      .subscribe(
+        filters => this.filters = this.filters.concat(filters),
+        error => this.notificationService.notifyError(
+          this.translateService.instant('search.mdm-search.err-cannot-load-search-filter'), error)
+      );
+  }
+
+  selectFilterByName(defaultFilterName: string) {
+    this.selectFilter(this.filters.find(f => f.name === defaultFilterName));
+  }
+
+  removeSearchField(searchField: { group: string, attribute: string }) {
+    let index = this.searchFields.findIndex(sf => sf.group === searchField.group && sf.attribute === searchField.attribute);
+    this.searchFields.splice(index, 1);
+  }
+
+  onResultTypeChane(e: any) {
+    this.selectResultType(e.value);
+  }
+
+  selectResultType(type: any) {
+    this.currentFilter.resultType = type.type;
+    this.updateSearchAttributesForCurrentResultType();
+  }
+
+  updateSearchAttributesForCurrentResultType() {
+    if (this.allSearchAttributes.hasOwnProperty(this.getSelectedDefinition())) {
+      this.allSearchAttributesForCurrentResultType = this.allSearchAttributes[this.getSelectedDefinition()];
+    }
+  }
+
+  getSearchDefinition(type: string) {
+    return this.definitions.find(def => def.type === type);
+  }
+
+  getSelectedDefinition() {
+    let def = this.getSearchDefinition(this.currentFilter.resultType);
+    if (def) {
+      return def.value;
+    }
+  }
+
+  onSearch() {
+    let query;
+    this.loading = true;
+    this.isSearchResultsOpen = true;
+    if (this.isAdvancedSearchActive) {
+      query = this.searchService.convertToQuery(this.currentFilter, this.allSearchAttributes, this.viewComponent.selectedView);
+    } else {
+      let filter = classToClass(this.currentFilter);
+      filter.conditions = [];
+      query = this.searchService.convertToQuery(filter, this.allSearchAttributes, this.viewComponent.selectedView);
+    }
+    this.queryService.query(query).pipe(
+      tap(result => this.generateWarningsIfMaxResultsReached(result)))
+      .subscribe(
+        result => {
+          this.results = result;
+          this.isSearchResultsOpen = true;
+          this.searchExecuted = true;
+          this.loading = false;
+        },
+        error => this.notificationService.notifyError(
+          this.translateService.instant('search.mdm-search.err-cannot-process-search-query'), error)
+      );
+  }
+
+  generateWarningsIfMaxResultsReached(result: SearchResult) {
+    let resultsPerSource = result.rows
+      .map(r => r.source)
+      .reduce((prev, item) => { (prev[item]) ? prev[item] += 1 : prev[item] = 1; return prev; }, {});
+
+    Object.keys(resultsPerSource)
+      .filter(source => resultsPerSource[source] > this.maxResults)
+      .forEach(source => this.notificationService.notifyWarn(
+        this.translateService.instant('search.mdm-search.errheading-too-many-search-results'),
+        this.translateService.instant('search.mdm-search.err-too-many-search-results', {'numresults': this.maxResults, 'source': source})));
+  }
+
+  calcCurrentSearch() {
+    let environments = this.currentFilter.environments;
+    let conditions = this.currentFilter.conditions;
+    let type = this.getSelectedDefinition();
+    this.layout = SearchLayout.createSearchLayout(environments, this.allSearchAttributesForCurrentResultType, conditions);
+  }
+
+  onFilterChange(e: any) {
+    this.selectFilter(e.value);
+  }
+
+  selectFilter(filter: SearchFilter) {
+    this.currentFilter = classToClass(filter);
+    this.selectedEnvs = this.currentFilter.environments;
+    this.updateSearchAttributesForCurrentResultType();
+    this.selectedEnvironmentsChanged();
+    this.calcCurrentSearch();
+  }
+
+  resetConditions(e: Event) {
+    e.stopPropagation();
+    this.currentFilter.conditions.forEach(cond => cond.value = []);
+    this.selectFilter(this.currentFilter);
+  }
+
+  clearResultlist(e: Event) {
+    e.stopPropagation();
+    this.results = new SearchResult();
+  }
+
+  deleteFilter(e: Event) {
+    e.stopPropagation();
+    if (this.currentFilter.name === this.filterService.NO_FILTER_NAME
+          || this.currentFilter.name === this.filterService.NEW_FILTER_NAME) {
+      this.notificationService
+        .notifyInfo(this.translateService.instant('search.mdm-search.errheading-cannot-delete-search-filter-none-selected'),
+        this.translateService.instant('search.mdm-search.err-cannot-delete-search-filter-none-selected'));
+    } else {
+      this.layout = new SearchLayout;
+      this.filterService.deleteFilter(this.currentFilter.name).subscribe(
+        () => {
+          this.loadFilters();
+          this.selectFilter(new SearchFilter(this.filterService.NO_FILTER_NAME, [], 'Test', '', []));
+        },
+        error => this.notificationService.notifyError(
+          this.translateService.instant('search.mdm-search.err-cannot-delete-search-filter'), error)
+      );
+    }
+  }
+
+  saveFilter(e: Event) {
+    e.stopPropagation();
+    if (this.filters.find(f => f.name === this.filterName) != undefined) {
+      this.childSaveModal.hide();
+      this.overwriteDialogComponent.showOverwriteModal(this.translateService.instant('search.mdm-search.a-filter')).subscribe(
+        needSave => this.saveFilter2(needSave),
+        error => {
+          this.saveFilter2(false);
+          this.notificationService.notifyError(this.translateService.instant('search.mdm-search.err-cannot-save-search-filter'), error);
+        }
+      );
+    } else {
+      this.saveFilter2(true);
+    }
+  }
+
+  saveFilter2(save: boolean) {
+    if (save) {
+      let filter = this.currentFilter;
+      filter.name = this.filterName;
+      this.filterService.saveFilter(filter).subscribe(
+        () => {
+          this.loadFilters();
+          this.selectFilter(filter);
+        },
+        error => this.notificationService.notifyError(
+          this.translateService.instant('search.mdm-search.err-cannot-save-search-filter'), error)
+      );
+      this.childSaveModal.hide();
+    } else {
+      this.childSaveModal.show();
+    }
+  }
+
+  removeCondition(condition: Condition) {
+    this.currentFilter.conditions = this.currentFilter.conditions
+      .filter(c => !(c.type === condition.type && c.attribute === condition.attribute));
+
+    this.calcCurrentSearch();
+  }
+
+  selected2Basket(e: Event) {
+    e.stopPropagation();
+    this.tableViewComponent.selectedViewRows.forEach(row => this.basketService.add(row.getItem()));
+  }
+
+  showSaveModal(e: Event) {
+    e.stopPropagation();
+    if (this.currentFilter.name === this.filterService.NO_FILTER_NAME
+            || this.currentFilter.name === this.filterService.NEW_FILTER_NAME) {
+      this.filterName = '';
+    } else {
+      this.filterName = this.currentFilter.name;
+    }
+    this.childSaveModal.show();
+  }
+
+  showSearchFieldsEditor(e: Event, conditions?: Condition[]) {
+    e.stopPropagation();
+    this.editSearchFieldsComponent.show(conditions).subscribe(
+      conds => {
+        if (!conditions) {
+          let filter = new SearchFilter(this.filterService.NEW_FILTER_NAME, this.currentFilter.environments, 'Test', '', conds);
+          this.selectFilter(filter);
+        }
+        this.currentFilter.conditions = conds;
+        this.calcCurrentSearch();
+      },
+      error => this.notificationService.notifyError(
+        this.translateService.instant('search.mdm-search.err-cannot-display-search-field-editor'), error)
+    );
+  }
+
+  addSelectionToBasket() {
+    this.basketService.add(this.tableViewComponent.menuSelectedRow.getItem());
+  }
+
+  mapSourceNameToName(sourceName: string) {
+    return NodeService.mapSourceNameToName(this.environments, sourceName);
+  }
+
+  getSaveFilterBtnTitle () {
+    return this.filterName
+      ? TRANSLATE('search.mdm-search.tooltip-save-search-filter')
+      : TRANSLATE('search.mdm-search.tooltip-no-name-set') ;
+  }
+
+  getAdvancedSearchCbxTitle() {
+    return this.isAdvancedSearchActive
+      ? TRANSLATE('search.mdm-search.tooltip-disable-advanced-search')
+      : TRANSLATE('search.mdm-search.tooltip-enable-advanced-search');
+  }
+
+/*
+  private loadSearchAttributes(environments: string[]) {
+    this.searchService.loadSearchAttributesStructured(environments)
+      .subscribe(
+        attrs => { this.allSearchAttributes = attrs; this.updateSearchAttributesForCurrentResultType(); },
+        error => this.notificationService.notifyError(
+          this.translateService.instant('search.mdm-search.err-cannot-load-attributes'), error));
+  }
+*/
+  onRowSelect(e: any) {
+    if (this.lazySelectedRow !== e.data) {
+      this.selectedRow = e.data;
+      this.filterName = e.data.name;
+    } else {
+      this.selectedRow = undefined;
+      this.filterName = '';
+    }
+    this.lazySelectedRow = this.selectedRow;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/search/mdm-search.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/search/mdm-search.module.ts
new file mode 100644
index 0000000..760c623
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/search/mdm-search.module.ts
@@ -0,0 +1,55 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { NgModule } from '@angular/core';
+import { DatePipe } from '@angular/common';
+
+import { MDMCoreModule } from '../core/mdm-core.module';
+
+import { MDMSearchComponent } from './mdm-search.component';
+import { SearchConditionComponent } from './search-condition.component';
+import { EditSearchFieldsComponent } from './edit-searchFields.component';
+
+import { TableViewModule } from '../tableview/tableview.module';
+import {SearchService} from './search.service';
+import {FilterService} from './filter.service';
+
+import {SearchattributeTreeModule} from '../searchattribute-tree/searchattribute-tree.module';
+import {AutoCompleteModule} from 'primeng/primeng';
+
+@NgModule({
+  imports: [
+    MDMCoreModule,
+    TableViewModule,
+    SearchattributeTreeModule,
+    AutoCompleteModule
+  ],
+  declarations: [
+    MDMSearchComponent,
+    SearchConditionComponent,
+    EditSearchFieldsComponent,
+  ],
+  exports: [
+    MDMSearchComponent,
+    EditSearchFieldsComponent
+  ],
+  providers: [
+    SearchService,
+    FilterService,
+    DatePipe
+  ],
+})
+export class MDMSearchModule {
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-base.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-base.ts
new file mode 100644
index 0000000..5ef8d3d
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-base.ts
@@ -0,0 +1,47 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+export class SearchBase<T> {
+  value: T;
+  t: string;
+  a: string;
+  key: string;
+  label: string;
+  required: boolean;
+  order: number;
+  controlType: string;
+  active: boolean;
+  constructor(options: {
+      value?: T,
+      t?: string,
+      a?: string,
+      key?: string,
+      label?: string,
+      required?: boolean,
+      order?: number,
+      controlType?: string,
+      active?: boolean
+    } = {}) {
+    this.value = options.value;
+    this.t = options.t;
+    this.a = options.a;
+    this.key = options.key || '';
+    this.label = options.label || '';
+    this.required = !!options.required;
+    this.order = options.order == undefined ? 1 : options.order;
+    this.controlType = options.controlType || '';
+    this.active = options.active || false;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-condition.component.css b/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-condition.component.css
new file mode 100644
index 0000000..7cda7f7
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-condition.component.css
@@ -0,0 +1,51 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+table.searchdefinition td { vertical-align: middle; padding: 4px 8px; }
+
+p-autoComplete >>> .ui-inputtext.ui-state-focus {
+  border: 1px solid #66afe9 !important;
+  outline: 0 !important;
+  box-shadow: 0 0 8px rgba(102,175,233,.6) !important;
+}
+
+p-autoComplete >>> .ui-autocomplete.ui-autocomplete-multiple .ui-autocomplete-multiple-container {
+  padding: 2.5px 8px !important;
+  border: 1px solid #ccc;
+  color: #555;
+  box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+  width: 100%;
+}
+
+p-autoComplete >>> .ui-autocomplete-multiple-container.ui-inputtext {
+  overflow: inherit !important;
+}
+
+p-autoComplete >>> .ui-autocomplete {
+  width: 100%;
+}
+
+p-autoComplete >>> .ui-widget:disabled{
+  cursor: not-allowed !important;
+  background-color: #eee;
+  color: #555 !important;
+  opacity: 1;
+}
+p-autoComplete >>> .ui-state-disabled{
+  cursor: not-allowed !important;
+  background-color: #eee !important;
+  border-color: #e3e3e3 !important;
+  opacity: 1;
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-condition.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-condition.component.html
new file mode 100644
index 0000000..deccb96
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-condition.component.html
@@ -0,0 +1,55 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+<td style="vertical-align: middle">{{condition.type | mdmdatasourcetranslate}}</td> <!-- | translate -->
+<td style="vertical-align: middle">{{condition.type | mdmdatasourcetranslate: condition.attribute }}</td> <!--  | translate: condition.attribute -->
+<td style="vertical-align: middle">
+  <div class="btn-group" dropdown style="width: 66px;">
+    <button id="operator" type="button" title="{{ 'search.search-condition.tooltip-select-search-operator' | translate }}" class="btn btn-default btn-sm dropdown-toggle" dropdownToggle aria-haspopup="true" aria-expanded="false" [disabled]="disabled">
+      {{getOperatorName(condition.operator)}} <span class="caret"></span>
+    </button>
+    <ul class="dropdown-menu" *dropdownMenu>
+      <li *ngFor="let op of getOperators()">
+        <a class="dropdown-item" (click)="setOperator(op)">{{getOperatorName(op)}}</a>
+      </li>
+    </ul>
+  </div>
+</td>
+<td [ngSwitch]="condition.valueType">
+  <p-autoComplete *ngSwitchCase="'string'"
+    [(ngModel)]="condition.value"
+    [suggestions]="displayedSuggestions"
+    (completeMethod)="updateSuggestions($event)"
+    [multiple]="true"
+    [delay]="0"
+    [size]="500"
+    [scrollHeight]="'50vh'"
+    placeholder="Wert"
+    [disabled]="disabled"
+    (keyup.enter)="onEnter($event)">
+  </p-autoComplete>
+  <p-calendar *ngSwitchCase="'date'" 
+    (ngModelChange)="setDateValue($event)" 
+    [ngModel]="dateValue" 
+    dateFormat="dd.mm.yy" 
+    showTime="true" 
+    hourFormat="24" 
+    hideOnDateTimeSelect="true" 
+    [showIcon]="true" 
+    [disabled]="disabled"
+    [ngStyle]="{ 'width': '100%' }">
+  </p-calendar>
+  <input *ngSwitchDefault type="text" class="form-control input-sm" placeholder="Wert" [value]="condition.value" (input)="setValue($event.target.value)" [disabled]="disabled">
+</td>
+<td style="vertical-align: middle"><button id="remove" type="button" class="btn btn-default btn-sm fa fa-times remove" (click)="remove()" [disabled]="disabled"></button></td>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-condition.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-condition.component.ts
new file mode 100644
index 0000000..0fabadb
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-condition.component.ts
@@ -0,0 +1,154 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ViewChild, AfterViewInit} from '@angular/core';
+import {FormGroup} from '@angular/forms';
+import {LocalizationService} from '../localization/localization.service';
+import {Condition, Operator, OperatorUtil} from './filter.service';
+import {Node} from '../navigator/node';
+
+import {PropertyService} from '../core/property.service';
+import {QueryService} from '../tableview/query.service';
+import {AutoComplete} from 'primeng/primeng';
+
+import {MDMNotificationService} from '../core/mdm-notification.service';
+
+import {TranslateService} from '@ngx-translate/core';
+import { DatePipe } from '@angular/common';
+
+@Component({
+  selector: '[search-condition]',
+  templateUrl: 'search-condition.component.html',
+  styleUrls: ['search-condition.component.css'],
+})
+export class SearchConditionComponent implements OnChanges, AfterViewInit {
+
+  @Input() env: string;
+  @Input() condition: Condition;
+  @Input() form: FormGroup;
+  @Input() disabled: boolean;
+  @Input() selectedEnvs: Node[];
+  @Output() onRemove = new EventEmitter<Condition>();
+
+  suggestions: string[];
+  displayedSuggestions: string[] = [];
+  lastQuery: string;
+  dateValue: Date;
+
+  @ViewChild(AutoComplete) primeAutoCompleteComponent: AutoComplete;
+
+  constructor(private localservice: LocalizationService,
+              private prop: PropertyService,
+              private queryService: QueryService,
+              private notificationService: MDMNotificationService,
+              private translateService: TranslateService,
+              private datePipe: DatePipe) { }
+
+  ngAfterViewInit() {
+    if (this.primeAutoCompleteComponent) {
+      /* Workaround for missing onBlur handler in primeng version 2.x.
+       * We overwrite the existing implementation and additional call our own event handler.
+       * In later versions this feature was added https://github.com/primefaces/primeng/issues/2256
+       * and this workaround should be removed when using primeng version 4 or later
+       */
+      this.primeAutoCompleteComponent.onBlur = function() {
+        this.primeAutoCompleteComponent.focus = false;
+        this.primeAutoCompleteComponent.onModelTouched();
+        this.onAutocompleteBlur();
+      }.bind(this);
+    }
+  }
+
+  onAutocompleteBlur() {
+    this.onEnter(new Event('blur'));
+  }
+
+  ngOnChanges(changes: SimpleChanges) {
+    if (changes['selectedEnvs'] && this.condition.valueType === 'string') {
+      this.setAutoCompleteValues();
+    }
+
+    if (this.condition.valueType === 'date') {
+      console.log(this.condition.value[0]);
+      if (this.condition.value === undefined || this.condition.value[0] === undefined) {
+        this.dateValue = new Date();
+        (<Date> this.dateValue).setHours(0, 0, 0, 0);
+      } else {
+        this.dateValue = new Date(this.condition.value[0]);
+      }
+    }
+  }
+
+  onEnter(e: Event) {
+    let hl = this.primeAutoCompleteComponent.highlightOption;
+    if (hl == undefined && this.lastQuery !== '' || hl != undefined && this.displayedSuggestions.find(s => s === hl) == undefined) {
+      if (this.primeAutoCompleteComponent.value[this.primeAutoCompleteComponent.value.length - 1] === hl) {
+        this.primeAutoCompleteComponent.value.pop();
+      }
+      this.primeAutoCompleteComponent.selectItem(this.lastQuery);
+      this.lastQuery = '';
+    }
+    this.primeAutoCompleteComponent.highlightOption = undefined;
+    this.displayedSuggestions = [];
+  }
+
+  setAutoCompleteValues() {
+    this.queryService.suggestValues(this.env === 'Global' ?
+        this.selectedEnvs.map(env => env.sourceName) :
+        [this.env], this.condition.type, this.condition.attribute)
+      .subscribe(
+        values => this.suggestions = Array.from(new Set<string>(values)),
+        error => this.notificationService.notifyError(
+          this.translateService.instant('search.search-condition.err-cannot-initialize-autocompletion'), error)
+      );
+  }
+
+  updateSuggestions(e: any) {
+    if (this.suggestions) {
+    this.displayedSuggestions =
+      [...this.suggestions.filter(sug => sug.toLowerCase().indexOf(e.query.toLowerCase()) > -1).slice(0, 10)];
+    }
+    this.lastQuery = e.query;
+  }
+
+  getOperators() {
+    return OperatorUtil.values();
+  }
+
+  getOperatorName(op: Operator) {
+    return OperatorUtil.toString(op);
+  }
+
+  setOperator(operator: Operator) {
+    this.condition.operator = operator;
+  }
+
+  setValue(value: string) {
+    this.condition.value = [value];
+  }
+
+  setValues(value: string[]) {
+    this.condition.value = value;
+  }
+
+  setDateValue(value: Date) {
+    console.log(value);
+    this.condition.value = [this.datePipe.transform(value, 'yyyy-MM-dd' + 'T' + 'HH:mm:ss')];
+  }
+
+  remove() {
+    this.onRemove.emit(this.condition);
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-control.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-control.service.ts
new file mode 100644
index 0000000..e859f1c
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-control.service.ts
@@ -0,0 +1,33 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Injectable} from '@angular/core';
+import {FormGroup, FormBuilder, Validators} from '@angular/forms';
+import {SearchBase} from './search-base';
+
+@Injectable()
+export class SearchControlService {
+  constructor(private fb: FormBuilder) { }
+
+  toControlGroup(searches) {
+    let group = {};
+    for (let i = 0; i < searches.length; i++) {
+      searches[i].items.forEach(search => {
+        group[search.key] = search.required ? [search.value || '', Validators.required] : [search.value || ''];
+      });
+    }
+    return this.fb.group(group);
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-dropdown.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-dropdown.ts
new file mode 100644
index 0000000..233b044
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-dropdown.ts
@@ -0,0 +1,26 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {SearchBase} from './search-base';
+
+export class DropdownSearch extends SearchBase<string> {
+  controlType = 'dropdown';
+  options: {key: string, value: string}[] = [];
+
+  constructor(options: {} = {}) {
+    super(options);
+    this.options = options['options'] || [];
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-textbox.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-textbox.ts
new file mode 100644
index 0000000..e64f555
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/search/search-textbox.ts
@@ -0,0 +1,26 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {SearchBase} from './search-base';
+
+export class TextboxSearch extends SearchBase<string> {
+  controlType = 'textbox';
+  type: string;
+
+  constructor(options: {} = {}) {
+    super(options);
+    this.type = options['type'] || '';
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/search/search.service.spec.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/search/search.service.spec.ts
new file mode 100644
index 0000000..77c1c18
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/search/search.service.spec.ts
@@ -0,0 +1,320 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { BaseRequestOptions, Http, HttpModule, Response, ResponseOptions } from '@angular/http';
+import { async, TestBed, inject } from '@angular/core/testing';
+import { MockBackend } from '@angular/http/testing';
+import { of as observableOf,  Observable } from 'rxjs';
+
+import { SearchService, SearchAttribute, SearchLayout } from './search.service';
+import { PreferenceService, Preference, Scope } from '../core/preference.service';
+import { PropertyService } from '../core/property.service';
+import { LocalizationService } from '../localization/localization.service';
+import { NodeService } from '../navigator/node.service';
+import { QueryService } from '../tableview/query.service';
+import { MDMNotificationService } from '../core/mdm-notification.service';
+import { HttpErrorHandler } from '../core/http-error-handler';
+
+import { Condition, Operator } from './filter.service';
+import { TranslateModule } from '@ngx-translate/core';
+
+class TestPreferenceService {
+  getPreference(key?: string): Observable<Preference[]> {
+    return observableOf([
+    {
+      id: 1,
+      key: 'ignoredAttributes',
+      scope: Scope.USER,
+      source: null,
+      user: 'testUser',
+      value: '[\"*.Name\", \"TestStep.Id\", \"Measurement.*\"]'
+      // value: '[\"*.MimeType\", \"TestStep.Sortindex\"]'
+    }
+  ]);
+  }
+}
+
+describe ( 'SearchService', () => {
+
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      imports: [
+        HttpModule,
+        TranslateModule.forRoot(),
+      ],
+      providers: [
+        LocalizationService,
+        PropertyService,
+        {
+          provide: PreferenceService,
+          useClass: TestPreferenceService
+        },
+        SearchService,
+        MDMNotificationService,
+        NodeService,
+        QueryService,
+        MockBackend,
+        BaseRequestOptions,
+        HttpErrorHandler,
+        {
+          provide: Http,
+          useFactory: (backend, options) => new Http(backend, options),
+          deps: [MockBackend, BaseRequestOptions]
+        }]
+    });
+  });
+
+  describe('groupByEnv()', () => {
+    it('should group attributes by environment', () => {
+      let attributes = [
+        new SearchAttribute('env1', 'Test', 'Name'),
+        new SearchAttribute('env1', 'Vehicle', 'Name'),
+        new SearchAttribute('env2', 'Test', 'Name'),
+        new SearchAttribute('env2', 'Uut', 'Name'),
+      ];
+
+      let conditionsPerEnv = SearchLayout.groupByEnv(attributes);
+
+      expect(Object.getOwnPropertyNames(conditionsPerEnv))
+        .toContain('env1', 'env2');
+
+      expect(conditionsPerEnv['env1'])
+        .toContain(attributes[0], attributes[1]);
+
+      expect(conditionsPerEnv['env2'])
+        .toContain(attributes[2], attributes[3]);
+    });
+  });
+
+  describe('createSearchLayout()', () => {
+    it('should create a searchLayout object from conditions', () => {
+      let cond1 = new Condition('Test', 'Name', Operator.EQUALS, []);
+      let cond2 = new Condition('Vehicle', 'Name', Operator.EQUALS, []);
+
+      let attributes = {
+        'env1': [
+          new SearchAttribute('env1', 'Test', 'Name'),
+          new SearchAttribute('env1', 'Vehicle', 'Name'),
+        ],
+        'env2': [
+          new SearchAttribute('env2', 'Test', 'Name'),
+          new SearchAttribute('env2', 'Uut', 'Name'),
+        ]
+      };
+
+      let searchLayout = SearchLayout.createSearchLayout(['env1', 'env2'], attributes, [cond1, cond2]);
+
+      expect(searchLayout.getSourceNames())
+        .toEqual(['Global', 'env1']);
+
+      expect(searchLayout.getConditions('Global'))
+        .toEqual([cond1]);
+
+      expect(searchLayout.getConditions('env1'))
+        .toEqual([cond2]);
+
+    });
+  });
+
+  describe('convert()', () => {
+    it('should convert conditions to filter string',  async(inject([SearchService, MockBackend], (service, mockBackend) => {
+      let cond1 = new Condition('Test', 'Name', Operator.LIKE, ['PBN*']);
+      let cond2 = new Condition('Vehicle', 'Number', Operator.EQUALS, ['12']);
+      let cond3 = new Condition('Vehicle', 'Created', Operator.EQUALS, ['2017-07-17T12:13:14']);
+
+      let attributes = [
+          new SearchAttribute('env1', 'Test', 'Name'),
+          new SearchAttribute('env1', 'Vehicle', 'Number', 'LONG'),
+          new SearchAttribute('env2', 'Test', 'Name'),
+          new SearchAttribute('env2', 'Uut', 'Name'),
+          new SearchAttribute('env2', 'Vehicle', 'Created', 'DATE'),
+        ];
+
+      let filter = service.convertEnv('env1', [cond1, cond2, cond3], attributes, 'test');
+
+      expect(filter.sourceName).toEqual('env1');
+      expect(filter.filter).toEqual('Test.Name ci_lk "PBN*" and Vehicle.Number eq 12 and Vehicle.Created eq "2017-07-17T12:13:14"');
+      expect(filter.searchString).toEqual('test');
+
+    })));
+  });
+
+  describe('loadSearchAttributes()', () => {
+    it('should return filtered search attributes for env',
+      async(inject([SearchService, MockBackend],
+        (searchService, mockBackend) => {
+      mockBackend.connections.subscribe(conn => {
+        let mockResponse = {
+          data: [
+            {
+              boType: 'Test',
+              attrName: 'Name',
+              valueType: 'STRING',
+              criteria: '*'
+            },
+            {
+              boType: 'Test',
+              attrName: 'Id',
+              valueType: 'LONG',
+              criteria: '*'
+            },
+            {
+              boType: 'TestStep',
+              attrName: 'Name',
+              valueType: 'STRING',
+              criteria: '*'
+            },
+            {
+              boType: 'TestStep',
+              attrName: 'MimeType',
+              valueType: 'STRING',
+              criteria: '*'
+            },
+            {
+              boType: 'TestStep',
+              attrName: 'Id',
+              valueType: 'LONG',
+              criteria: '*'
+            },
+            {
+              boType: 'Measurement',
+              attrName: 'Name',
+              valueType: 'STRING',
+              criteria: '*'
+            },
+            {
+              boType: 'Measurement',
+              attrName: 'Id',
+              valueType: 'LONG',
+              criteria: '*'
+            }
+        ]};
+        if (conn.request.url === searchService._prop.getUrl() + '/mdm/environments/TestEnv//searchattributes') {
+          conn.mockRespond(new Response(new ResponseOptions({ body: mockResponse })));
+        } else if (conn.request.url === searchService._prop.getUrl() + '/mdm/environments/' + 'TestEnv2' + '/' + '/searchattributes') {
+          conn.mockRespond(new Response(new ResponseOptions({ body: mockResponse })));
+        }
+      });
+      let ans = [
+        new SearchAttribute('TestEnv', 'Test', 'Id', 'LONG', '*'),
+        new SearchAttribute('TestEnv', 'TestStep', 'MimeType', 'STRING', '*'),
+      ];
+      searchService.loadSearchAttributes('', 'TestEnv').subscribe(sas => {
+        expect(sas).toEqual(ans);
+      });
+    })));
+  });
+
+  describe('getFilters()', () => {
+    it('should retrun ignoredAttributes in a string array',
+      async(inject([SearchService],
+        (searchService) => {
+      expect(searchService.getFilters(undefined)).toEqual(['*.Name', 'TestStep.Id', 'Measurement.*']);
+    })));
+  });
+
+  describe('filterIgnoredAttributes', () => {
+    it('should return searchAttributes without the ignored ones',
+      async(inject([SearchService], (searchService) => {
+
+    let input = [
+      new SearchAttribute('TestEnv', 'Test', 'Name', 'STRING'),
+      new SearchAttribute('TestEnv', 'Test', 'MimeType', 'STRING'),
+      new SearchAttribute('TestEnv', 'Test', 'Id', 'LONG'),
+      new SearchAttribute('TestEnv', 'TestStep', 'Name', 'STRING'),
+      new SearchAttribute('TestEnv', 'TestStep', 'MimeType', 'STRING'),
+      new SearchAttribute('TestEnv', 'TestStep', 'Id', 'LONG'),
+      new SearchAttribute('TestEnv', 'Measurement', 'Name', 'STRING'),
+      new SearchAttribute('TestEnv', 'Measurement', 'MimeType', 'STRING'),
+      new SearchAttribute('TestEnv', 'Measurement', 'Id', 'LONG')
+    ];
+
+  let ans = [
+    new SearchAttribute('TestEnv', 'Test', 'MimeType', 'STRING'),
+    new SearchAttribute('TestEnv', 'Test', 'Id', 'LONG'),
+    new SearchAttribute('TestEnv', 'TestStep', 'MimeType', 'STRING')
+  ];
+
+  expect(searchService.filterIgnoredAttributes(undefined, input)).toEqual(ans);
+    })));
+  });
+
+  describe('getSearchAttributes()', () => {
+    it('should return filtered search attributes for env',
+      async(inject([SearchService, MockBackend],
+        (searchService, mockBackend) => {
+      mockBackend.connections.subscribe(conn => {
+        let mockResponse = {
+          data: [
+            {
+              boType: 'Test',
+              attrName: 'Name',
+              valueType: 'STRING',
+              criteria: '*'
+            },
+            {
+              boType: 'Test',
+              attrName: 'Id',
+              valueType: 'LONG',
+              criteria: '*'
+            },
+            {
+              boType: 'TestStep',
+              attrName: 'Name',
+              valueType: 'STRING',
+              criteria: '*'
+            },
+            {
+              boType: 'TestStep',
+              attrName: 'MimeType',
+              valueType: 'STRING',
+              criteria: '*'
+            },
+            {
+              boType: 'TestStep',
+              attrName: 'Id',
+              valueType: 'LONG',
+              criteria: '*'
+            },
+            {
+              boType: 'Measurement',
+              attrName: 'Name',
+              valueType: 'STRING',
+              criteria: '*'
+            },
+            {
+              boType: 'Measurement',
+              attrName: 'Id',
+              valueType: 'LONG',
+              criteria: '*'
+            }
+        ]};
+        if (conn.request.url === searchService._prop.getUrl() + '/mdm/environments/TestEnv//searchattributes') {
+          conn.mockRespond(new Response(new ResponseOptions({ body: mockResponse })));
+        } else if (conn.request.url === searchService._prop.getUrl() + '/mdm/environments/TestEnv2//searchattributes') {
+          conn.mockRespond(new Response(new ResponseOptions({ body: mockResponse })));
+        }
+      });
+      let ans = [
+        new SearchAttribute('TestEnv', 'Test', 'Id', 'LONG', '*'),
+        new SearchAttribute('TestEnv', 'TestStep', 'MimeType', 'STRING', '*'),
+        new SearchAttribute('TestEnv2', 'Test', 'Id', 'LONG', '*'),
+        new SearchAttribute('TestEnv2', 'TestStep', 'MimeType', 'STRING', '*'),
+      ];
+
+      searchService.getSearchAttributesPerEnvs(['TestEnv', 'TestEnv2'], '').subscribe(sas => expect(sas).toEqual(ans));
+    })));
+  });
+});
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/search/search.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/search/search.service.ts
new file mode 100644
index 0000000..1a461e0
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/search/search.service.ts
@@ -0,0 +1,316 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Injectable} from '@angular/core';
+import {Http} from '@angular/http';
+
+import {forkJoin as observableForkJoin, of as observableOf, Observable} from 'rxjs';
+import {catchError, mergeMap, publishReplay, refCount, map} from 'rxjs/operators';
+
+import {MDMNotificationService} from '../core/mdm-notification.service';
+import {PropertyService} from '../core/property.service';
+import {LocalizationService} from '../localization/localization.service';
+import { Preference, PreferenceService, Scope } from '../core/preference.service';
+import {HttpErrorHandler} from '../core/http-error-handler';
+
+import {SearchFilter, Condition, OperatorUtil} from './filter.service';
+import {Query, Filter} from '../tableview/query.service';
+import {View} from '../tableview/tableview.service';
+
+import { TranslateService } from '@ngx-translate/core';
+
+export class SearchLayout {
+  map: { [sourceNames: string]: Condition[] } = {};
+
+  public static createSearchLayout(envs: string[], attributesPerEnv: { [env: string]: SearchAttribute[] }, conditions: Condition[]) {
+    let conditionsWithSortIndex = conditions.map((c, i) => { c.sortIndex = i; return c; });
+
+    let result = new SearchLayout();
+    let attribute2Envs = SearchLayout.mapAttribute2Environments(envs, attributesPerEnv);
+    let globalEnv = 'Global';
+    Object.keys(attribute2Envs).forEach(attr => {
+      let c = conditionsWithSortIndex.find(cond => cond.type + '.' + cond.attribute === attr);
+      if (c) {
+        if (attribute2Envs[attr].length === envs.length) {
+          result.add(globalEnv, c);
+        } else {
+          attribute2Envs[attr].forEach(e => result.add(e, c));
+        }
+      }
+    });
+    return result;
+  }
+
+  public static groupByEnv(attrs: SearchAttribute[]) {
+    let attributesPerEnv: { [environment: string]: SearchAttribute[] } = {};
+
+    attrs.forEach(attr => {
+      attributesPerEnv[attr.source] = attributesPerEnv[attr.source] || [];
+      attributesPerEnv[attr.source].push(attr);
+    });
+    return attributesPerEnv;
+  }
+
+  private static mapAttribute2Environments(envs: string[], attributesPerEnv: { [environment: string]: SearchAttribute[] }) {
+    let attribute2Envs: { [attribute: string]: string[] } = {};
+
+    Object.keys(attributesPerEnv)
+      .filter(env => envs.find(e => e === env))
+      .forEach(env =>
+        attributesPerEnv[env].forEach(sa => {
+          let attr = sa.boType + '.' + sa.attrName;
+
+          attribute2Envs[attr] = attribute2Envs[attr] || [];
+          attribute2Envs[attr].push(env);
+        })
+      );
+
+    return attribute2Envs;
+  }
+
+  getSourceNames() {
+    return Object.keys(this.map).sort((s1, s2) => {
+      if (s1 === 'Global') {
+        return -1;
+      } else if ( s2 === 'Global') {
+        return 1;
+      } else if (s1) {
+        return s1.localeCompare(s2);
+      } else {
+        return -1;
+      }
+    });
+  }
+
+  getConditions(sourceName: string) {
+    return this.map[sourceName].sort((c1, c2) => c1.sortIndex - c2.sortIndex) || [];
+  }
+
+  getSourceName(condition: Condition) {
+    if (condition) {
+      let sourceName;
+
+      Object.keys(this.map)
+        .forEach(env => {
+            if (this.map[env].find(c => c.type === condition.type && c.attribute === condition.attribute)) {
+              sourceName = env;
+            }
+          }
+        );
+      return sourceName;
+    }
+  }
+
+  set(sourceName: string, conditions: Condition[]) {
+    this.map[sourceName] = conditions;
+  }
+
+  add(sourceName: string, condition: Condition) {
+    this.map[sourceName] = this.map[sourceName] || [];
+    this.map[sourceName].push(condition);
+  }
+}
+
+export class SearchAttribute {
+  source: string;
+  boType: string;
+  attrName: string;
+  valueType: string;
+  criteria: string;
+
+  constructor(source: string, boType: string, attrName: string, valueType?: string, criteria?: string) {
+    this.source = source;
+    this.boType = boType;
+    this.attrName = attrName;
+    this.valueType = valueType || 'string';
+    this.criteria = criteria || '';
+  }
+}
+
+export class SearchDefinition {
+  key: string;
+  value: string;
+  type: string;
+  label: string;
+}
+
+@Injectable()
+export class SearchService {
+
+  private _searchUrl: string;
+  private errorMessage: string;
+
+  private defs: SearchAttribute[];
+
+  ignoreAttributesPrefs: Preference[] = [];
+
+  private cachedAttributes: Observable<any>;
+
+  constructor(private http: Http,
+    private httpErrorHandler: HttpErrorHandler,
+    private localService: LocalizationService,
+    private _prop: PropertyService,
+    private preferenceService: PreferenceService,
+    private notificationService: MDMNotificationService,
+    private translateService: TranslateService) {
+    this.preferenceService.getPreference('ignoredAttributes').subscribe(
+        prefs => this.ignoreAttributesPrefs = this.ignoreAttributesPrefs.concat(prefs),
+        error => this.notificationService.notifyError(
+          this.translateService.instant('search.search.err-cannot-load-preference-for-attributes-to-ignore'), error)
+      );
+    }
+
+  loadSearchAttributes(type: string, env: string) {
+    return this.http.get(this._prop.getUrl('mdm/environments/' + env + '/' + type + '/searchattributes')).pipe(
+      map(response => <SearchAttribute[]>response.json().data),
+      map(sas => sas.map(sa => { sa.source = env; return sa; })),
+      map(sas => this.filterIgnoredAttributes(env, sas)),
+      catchError(this.httpErrorHandler.handleError));
+  }
+
+// TODO TRANSLATION
+  getDefinitionsSimple() {
+    return observableOf([
+      <SearchDefinition>{ key: '1', value: 'tests', type: 'Test', label: 'Versuche' },
+      <SearchDefinition>{ key: '2', value: 'teststeps', type: 'TestStep', label: 'Versuchsschritte' },
+      <SearchDefinition>{ key: '3', value: 'measurements', type: 'Measurement', label: 'Messungen' }
+    ]);
+  }
+
+  getSearchAttributesPerEnvs(envs: string[], type: string) {
+    return observableForkJoin(envs.map(env => this.loadSearchAttributes(type, env).pipe(
+      map(sas => sas.map(sa => { sa.source = env; return sa; }))))).pipe(
+      map(x => x.reduce(function(explored, toExplore) {
+        return explored.concat(toExplore);
+      }, [])));
+  }
+
+  loadSearchAttributesStructured(environments: string[]) {
+    if (!this.cachedAttributes) {
+      this.cachedAttributes = this.getDefinitionsSimple().pipe(
+        map(defs => defs.map(d => d.value)),
+        mergeMap(defs => this.loadSearchAttributesForAllDefs(defs, environments)),
+        publishReplay(1),
+        refCount());
+    }
+    return this.cachedAttributes;
+  }
+
+  loadSearchAttributesForAllDefs(types: string[], environments: string[]) {
+    return observableForkJoin(types.map(type => this.loadSearchAttributesForDef(type, environments))).pipe(
+      map(type2AttributesPerEnv =>
+        type2AttributesPerEnv.reduce(
+          function(acc, value) {
+            acc[value.type] = value.attributesPerEnv;
+            return acc; },
+          <{ [type: string]: { [env: string]: SearchAttribute[] }}> {})
+        ));
+  }
+
+  loadSearchAttributesForDef(type: string, environments: string[]) {
+    return observableForkJoin(environments.map(env => this.loadSearchAttributes(type, env).pipe(
+      catchError(error => {
+        console.log('Could not load search attributes for type ' + type + ' in environment ' + env);
+        return observableOf(<SearchAttribute[]> []);
+      }),
+      map(attrs => { return { 'env': env, 'attributes': attrs}; })))).pipe(
+      map(attrsPerEnv => attrsPerEnv.reduce(
+        function(acc, value) {acc[value.env] = value.attributes; return acc; },
+         <{ [env: string]: SearchAttribute[] }> {})
+       ),
+      map(attrsPerEnv => { return { 'type': type, 'attributesPerEnv': attrsPerEnv}; }));
+  }
+
+  convertToQuery(searchFilter: SearchFilter, attr: { [type: string]: { [env: string]: SearchAttribute[] }}, view: View) {
+    let q = new Query();
+
+    q.resultType = searchFilter.resultType;
+    if (attr['tests']) {
+      q.filters = this.convert(searchFilter.environments, searchFilter.conditions, attr['tests'], searchFilter.fulltextQuery); // TODO
+    }
+    q.columns = view.columns.map(c => c.type + '.' + c.name);
+    console.log('Query', q);
+
+    return q;
+  }
+
+  convert(envs: string[], conditions: Condition[], attr: { [env: string]: SearchAttribute[] }, fullTextQuery: string): Filter[] {
+    return envs.map(e => this.convertEnv(e, conditions, attr[e], fullTextQuery));
+  }
+
+  convertEnv(env: string, conditions: Condition[], attrs: SearchAttribute[], fullTextQuery: string): Filter {
+
+    let filterString = conditions
+      .map(c => c.value.map(value => c.type + '.' + c.attribute + ' ' + this.adjustOperator(OperatorUtil.toFilterString(c.operator),
+         this.getValueType(c, attrs)) + ' ' + this.quoteValue(value, this.getValueType(c, attrs))).join(' or '))
+      .filter(c => c.length > 0)
+      .join(' and ');
+
+    return new Filter(env, filterString, fullTextQuery);
+  }
+
+  quoteValue(value: string, valueType: string) {
+    if (valueType.toLowerCase() === 'string' || valueType.toLowerCase() === 'date') {
+      return '"' + value + '"';
+    } else {
+      return value;
+    }
+  }
+
+  getValueType(c: Condition, attrs: SearchAttribute[]) {
+    return attrs.find(a => a.boType === c.type && a.attrName === c.attribute).valueType;
+  }
+  adjustOperator(operator: string, valueType: string) {
+    if (valueType.toLowerCase() === 'string') {
+      return 'ci_' + operator;
+    } else {
+      return operator;
+    }
+  }
+
+  isAttributeIgnored(attributeName: string, sa: SearchAttribute) {
+    let x = attributeName.split('.', 2);
+    let fType = x[0];
+    let fName = x[1];
+    return ((fType === sa.boType || fType === '*') && (fName === sa.attrName || fName === '*'));
+  }
+
+  private filterIgnoredAttributes(environment: string, searchAttributes: SearchAttribute[]) {
+    let filters = this.getFilters(environment);
+    filters.forEach(f =>
+      searchAttributes = searchAttributes.filter(sa => !this.isAttributeIgnored(f, sa))
+    );
+    return searchAttributes;
+  }
+
+  getFilters(source: string): string[] {
+    return this.ignoreAttributesPrefs
+      .filter(p => p.scope !== Scope.SOURCE || p.source === source)
+      .sort(Preference.sortByScope)
+      .map(p => this.parsePreference(p))
+      .reduce((acc, value) => acc.concat(value), []);
+  }
+
+  private parsePreference(pref: Preference) {
+    try {
+        return <string[]> JSON.parse(pref.value);
+    } catch (e) {
+        this.notificationService.notifyError(
+          this.translateService.instant('search.search.err-faulty-preference-for-attributes-to-ignore'), e);
+        return [];
+    }
+  }
+
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/searchattribute-tree/searchattribute-tree.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/searchattribute-tree/searchattribute-tree.component.html
new file mode 100644
index 0000000..80dd927
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/searchattribute-tree/searchattribute-tree.component.html
@@ -0,0 +1,24 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+<p-tree class="mdmtree"
+        [value]="nodes"
+        selectionMode="single"
+        (onNodeExpand)="loadNodes($event)"
+        (onNodeSelect)="nodeSelect($event)">
+
+    <ng-template let-node pTemplate="default">
+        <span [title]="node.label" >{{ node.label }}</span>
+    </ng-template>
+</p-tree>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/searchattribute-tree/searchattribute-tree.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/searchattribute-tree/searchattribute-tree.component.ts
new file mode 100644
index 0000000..e04f2dd
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/searchattribute-tree/searchattribute-tree.component.ts
@@ -0,0 +1,125 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Component, OnInit, Input, OnChanges, SimpleChanges, EventEmitter} from '@angular/core';
+
+import {SearchService, SearchDefinition, SearchAttribute, SearchLayout} from '../search/search.service';
+import {Preference, PreferenceService} from '../core/preference.service';
+import {Node} from '../navigator/node';
+import {MDMItem} from '../core/mdm-item';
+
+import {TypeaheadMatch} from 'ngx-bootstrap/typeahead';
+import {ModalDirective} from 'ngx-bootstrap';
+import {TreeModule, TreeNode} from 'primeng/primeng';
+
+@Component({
+  selector: 'searchattribute-tree',
+  templateUrl: './searchattribute-tree.component.html'
+})
+export class SearchattributeTreeComponent implements OnChanges {
+
+  @Input() environments: Node[];
+  @Input() searchAttributes: { [env: string]: SearchAttribute[] } = {};
+
+  lastClickTime = 0;
+  nodes: TreeNode[] = [];
+  selectedAttribute: { label: string, group: string, attribute: SearchAttribute };
+  public onNodeSelect$ = new EventEmitter<TreeNode>();
+
+  constructor(private searchService: SearchService) {}
+
+  ngOnChanges(changes: SimpleChanges) {
+    if ((changes['searchAttributes'] || changes['environments']) && this.environments && this.environments.length > 0) {
+      this.nodes = this.environments.map(n => this.mapRootNode(n));
+    }
+  }
+
+  mapRootNode(node: Node) {
+    let item = new MDMItem(node.sourceName, node.type, node.id);
+
+    return <TreeNode>{
+      label: node.name,
+      leaf: false,
+      type: 'env',
+      data: item
+    };
+  }
+
+  loadNodes(event: any) {
+    if (event.node) {
+      event.node.children = this.getChildren(event.node);
+    }
+  }
+
+  mapType(group: { boType: string, attributes: SearchAttribute[] }) {
+    return <TreeNode>{
+      label: group.boType,
+      leaf: false,
+      type: 'group',
+      data: group.attributes
+    };
+  }
+
+  mapAttribute(attribute: SearchAttribute) {
+    return <TreeNode>{
+      label: attribute.attrName,
+      leaf: true,
+      type: 'attribute',
+      data: attribute
+    };
+  }
+
+  getChildren(node: TreeNode): TreeNode[] {
+    if (node.type === 'env') {
+      return this.getSearchableGroups(node.data.source)
+        .sort((a, b) => a.boType.localeCompare(b.boType))
+        .map(g => this.mapType(g));
+    } else if (node.type === 'group') {
+      return (<SearchAttribute[]> node.data)
+        .sort((a, b) => a.attrName.localeCompare(b.attrName))
+        .map(a => this.mapAttribute(a));
+    } else {
+      return [];
+    }
+  }
+
+  getSearchableGroups(env: string): { boType: string, attributes: SearchAttribute[] }[] {
+    let distinctGroupArray: { boType: string, attributes: SearchAttribute[] }[] = [];
+    if (this.searchAttributes.hasOwnProperty(env)) {
+      this.searchAttributes[env].forEach(attribute => {
+          let item = distinctGroupArray.find(p => p.boType === attribute.boType);
+          if (item && item.attributes.every(a => a.attrName !== attribute.attrName)) {
+            item.attributes.push(attribute);
+          } else if (!item) {
+            distinctGroupArray.push({ boType: attribute.boType, attributes: [attribute]});
+          }
+      });
+    }
+
+    return distinctGroupArray;
+  }
+
+  nodeSelect(event) {
+    this.onNodeSelect$.emit(event.node);
+    if (event.originalEvent.timeStamp - this.lastClickTime < 300) {
+      if (!event.node.expanded && !event.node.children) {
+        this.loadNodes(event);
+      }
+      event.node.expanded = !event.node.expanded;
+    }
+    this.lastClickTime = event.originalEvent.timeStamp;
+  }
+
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/searchattribute-tree/searchattribute-tree.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/searchattribute-tree/searchattribute-tree.module.ts
new file mode 100644
index 0000000..95ac63a
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/searchattribute-tree/searchattribute-tree.module.ts
@@ -0,0 +1,36 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { NgModule } from '@angular/core';
+
+import { MDMCoreModule } from '../core/mdm-core.module';
+import { MDMNavigatorModule } from '../navigator/mdm-navigator.module';
+
+import { SearchattributeTreeComponent } from './searchattribute-tree.component';
+
+@NgModule({
+  imports: [
+    MDMCoreModule,
+    MDMNavigatorModule,
+  ],
+  declarations: [
+    SearchattributeTreeComponent,
+  ],
+  exports: [
+    SearchattributeTreeComponent,
+  ]
+})
+export class SearchattributeTreeModule {
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/editview.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/editview.component.html
new file mode 100644
index 0000000..76148ed
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/editview.component.html
@@ -0,0 +1,107 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+<style>
+  .modal-body >>> .ui-tree .ui-tree-container {
+    margin: 0 0 4px 0 !important;
+    width: 100%;
+    overflow: visible;
+  }
+
+  .modal-body >>> .ui-tree {
+    min-height: 50vh !important;
+    max-height: 72vh !important;
+    overflow: auto;
+  }
+
+  .modal-body >>> .ui-tree .ui-treenode .ui-treenode-content .ui-treenode-label {
+    padding-right: .75em;
+  }
+
+  .modal-body {
+    font-size: 14px;
+  }
+
+  .auto-width-typeahead >>> typeahead-container {
+    width: auto!important;
+  }
+
+  >>> .ui-growl {z-index: 999999 !important;}
+</style>
+
+<div bsModal #lgModal="bs-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="SelectSearchComponents" aria-hidden="true">
+  <div class="modal-dialog modal-lg">
+    <div class="modal-content">
+      <div class="modal-header">
+        <h4 class="modal-title">{{ 'tableview.editview.title-view-editor' | translate }}</h4>
+        <button type="button" class="close" (click)="closeDialog()" aria-label="Close">
+          <span aria-hidden="true">&times;</span>
+        </button>
+      </div>
+      <div class="modal-body">
+        <div class="container-fluid">
+          <div class="row">
+            <div class="col-md-4 auto-width-typeahead" style="min-height: 50vh; max-height: 72vh;">
+                <input [(ngModel)]="selectedAttribute"
+                      [typeahead]="typeAheadValues"
+                      (typeaheadOnSelect)="typeaheadOnSelect($event)"
+                      typeaheadOptionField="label"
+                      typeaheadGroupField="group"
+                      typeaheadOptionsLimit="15"
+                      placeholder="{{ 'tableview.editview.enter-search-text' | translate }}"
+                      class="form-control"
+                      style="margin-bottom: 15px;">
+              <searchattribute-tree [searchAttributes]="searchAttributes" [environments]="environments"></searchattribute-tree>
+            </div>
+            <div class="col-md-8" style="min-height: 50vh; max-height: 72vh; overflow-y:auto;">
+            <label for="search-source" class="col-form-label" style="padding: 8px 0 15px 0;">{{ 'tableview.editview.lbl-selected-attributes' | translate }}</label>
+            <div *ngIf="currentView.columns.length === 0" style="text-align: center;">
+              {{ 'tableview.editview.no-attributes-selected' | translate }}
+            </div>
+            <table class="table table-bordered" style="padding: 0; overflow-y:auto; table-layout: fixed;">
+              <tr *ngFor="let col of currentView.columns">
+                <td style="width: 50%;" >
+                  {{col.type}}
+                </td>
+                <td style="width: 50%;" >
+                   {{col.name}}
+                </td>
+                <td style="width: 30px; text-align: center; vertical-align: middle;">
+                  <span class="fa fa-chevron-up" [ngStyle]="{'visibility': isFirst(col) ? 'hidden': 'visible'}" style="cursor: pointer; margin-bottom: 0;" (click)="moveUp(col)"></span>
+                </td>
+                <td style="width: 30px; text-align: center; vertical-align: middle;">
+                  <span class="fa fa-chevron-down" [ngStyle]="{'visibility': isLast(col)? 'hidden': 'visible'}" style="cursor: pointer;" (click)="moveDown(col)"></span>
+                </td>
+                <td style="width: 30px; text-align: center; vertical-align: middle;">
+                  <span class="fa" [ngClass]="{'glyphicon-sort': isNone(col), 'fa-sort-alpha-desc': isDesc(col), 'fa-sort-alpha-asc': isAsc(col)}" style="cursor: pointer;" (click)="toggleSort(col)"></span>
+                </td>
+                <td style="width: 30px; text-align: center; vertical-align: middle;">
+                  <span class="fa fa-times" [ngClass]="" style="cursor: pointer;" (click)="remove(col)"></span>
+                </td>
+              </tr>
+            </table>
+            </div>
+          </div>
+          <div class="row" style="margin-top: 15px;">
+            <div class="col-md-12">
+              <button type="button" class="btn btn-default pull-right" (click)="applyChanges()">
+                <span class="fa fa-check"></span> {{ 'tableview.editview.btn-apply-changes' | translate }}
+              </button>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/editview.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/editview.component.ts
new file mode 100644
index 0000000..e642426
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/editview.component.ts
@@ -0,0 +1,189 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Component, ViewChild, OnInit, Output, EventEmitter} from '@angular/core';
+
+import {map} from 'rxjs/operators';
+import {View, ViewColumn, ViewService} from './tableview.service';
+import {NodeService} from '../navigator/node.service';
+import {Node} from '../navigator/node';
+import {SearchService, SearchAttribute} from '../search/search.service';
+import {SearchattributeTreeComponent} from '../searchattribute-tree/searchattribute-tree.component';
+import {MDMNotificationService} from '../core/mdm-notification.service';
+import {TreeNode} from 'primeng/primeng';
+import {ModalDirective} from 'ngx-bootstrap';
+import {TypeaheadMatch} from 'ngx-bootstrap/typeahead';
+import {classToClass} from 'class-transformer';
+import { TranslateService } from '@ngx-translate/core';
+
+@Component({
+  selector: 'edit-view',
+  templateUrl: './editview.component.html',
+  styles: ['.remove {color:black; cursor: pointer; float: right}', '.icon { cursor: pointer; margin: 0px 5px; }']
+})
+export class EditViewComponent implements OnInit {
+
+  @ViewChild('lgModal') public childModal: ModalDirective;
+  @ViewChild(SearchattributeTreeComponent) tree: SearchattributeTreeComponent;
+
+  environments: Node[] = [];
+  isReadOnly = false;
+  currentView: View = new View();
+  searchAttributes: { [env: string]: SearchAttribute[] } = {};
+  typeAheadValues: {label: string, group: string, attribute: SearchAttribute }[] = [];
+
+  selectedAttribute: SearchAttribute;
+
+  @Output()
+  coloumnsSubmitted = new EventEmitter<View>();
+
+  constructor(private nodeService: NodeService,
+    private viewService: ViewService,
+    private searchService: SearchService,
+    private notificationService: MDMNotificationService,
+    private translateService: TranslateService) { }
+
+  ngOnInit() {
+    this.tree.onNodeSelect$.subscribe(
+      node => this.selectNode(node),
+      error => this.notificationService.notifyError(this.translateService.instant('tableview.editview.err-cannot-select-node'), error)
+    );
+
+    this.nodeService.getNodes()
+      .subscribe(
+        envs => {
+          this.searchService.loadSearchAttributesStructured(envs.map(e => e.sourceName)).pipe(
+            map(attrs => attrs['measurements']))
+            .subscribe(
+              attrs => this.refreshTypeAheadValues(attrs, envs),
+              error => this.notificationService.notifyError(
+                this.translateService.instant('tableview.editview.err-cannot-load-search-attributes'), error)
+            );
+        },
+        error => this.notificationService.notifyError(this.translateService.instant('tableview.editview.err-cannot-load-nodes'), error)
+      );
+  }
+
+  refreshTypeAheadValues(searchAttributes: { [env: string]: SearchAttribute[] }, environments: Node[]) {
+
+    this.searchAttributes = searchAttributes;
+    this.environments = environments;
+
+    let ar = Object.keys(this.searchAttributes)
+        .map(env => this.searchAttributes[env])
+        .reduce((acc, value) => acc.concat(value), <SearchAttribute[]> [])
+        .map(sa => { return { 'label': sa.boType + '.' + sa.attrName, 'group': sa.boType, 'attribute': sa }; });
+
+    this.typeAheadValues = this.uniqueBy(ar, p => p.label);
+  }
+
+  showDialog(currentView: View) {
+    this.currentView = classToClass(currentView);
+    this.isNameReadOnly();
+    this.childModal.show();
+    return this.coloumnsSubmitted;
+  }
+
+  closeDialog() {
+    this.childModal.hide();
+  }
+
+  remove(col: ViewColumn) {
+    this.currentView.columns = this.currentView.columns.filter(c => c !== col);
+  }
+
+  isLast(col: ViewColumn) {
+    return this.currentView.columns.indexOf(col) === this.currentView.columns.length - 1;
+  }
+
+  isFirst(col: ViewColumn) {
+    return this.currentView.columns.indexOf(col) === 0;
+  }
+
+  moveUp(col: ViewColumn) {
+    if (!this.isFirst(col)) {
+      let oldIndex = this.currentView.columns.indexOf(col);
+      let otherCol = this.currentView.columns[oldIndex - 1];
+      this.currentView.columns[oldIndex] = otherCol;
+      this.currentView.columns[oldIndex - 1] = col;
+    }
+  }
+
+  moveDown(col: ViewColumn) {
+    if (!this.isLast(col)) {
+      let oldIndex = this.currentView.columns.indexOf(col);
+      let otherCol = this.currentView.columns[oldIndex + 1];
+      this.currentView.columns[oldIndex] = otherCol;
+      this.currentView.columns[oldIndex + 1] = col;
+    }
+  }
+
+  selectNode(node: TreeNode) {
+    if (node.type !== 'attribute') {
+      return;
+    }
+    this.pushViewCol(new ViewColumn(node.parent.label, node.label));
+  }
+
+  pushViewCol(viewCol: ViewColumn) {
+    if (viewCol && this.currentView.columns.findIndex(c => viewCol.equals(c)) === -1 ) {
+      this.currentView.columns.push(viewCol);
+    } else {
+      this.notificationService.notifyInfo(this.translateService.instant('tableview.editview.attribute-already-selected'), 'Info');
+    }
+  }
+
+  isAsc(col: ViewColumn) {
+    return col.sortOrder === 1;
+  }
+  isDesc(col: ViewColumn) {
+    return col.sortOrder === -1;
+  }
+  isNone(col: ViewColumn) {
+    return col.sortOrder === null;
+  }
+
+  toggleSort(col: ViewColumn) {
+    if (col.sortOrder === null) {
+      this.currentView.setSortOrder(col.type, col.name, 1);
+    } else if (col.sortOrder === 1) {
+      this.currentView.setSortOrder(col.type, col.name, -1);
+    } else if (col.sortOrder === -1) {
+      this.currentView.setSortOrder(col.type, col.name, null);
+    }
+  }
+
+  private uniqueBy<T>(a: T[], key: (T) => any) {
+    let seen = {};
+    return a.filter(function(item) {
+      let k = key(item);
+      return seen.hasOwnProperty(k) ? false : (seen[k] = true);
+    });
+  }
+
+  public typeaheadOnSelect(match: TypeaheadMatch) {
+    this.pushViewCol(new ViewColumn(match.item.attribute.boType, match.item.attribute.attrName));
+    this.selectedAttribute = undefined;
+  }
+
+  private isNameReadOnly() {
+    return this.isReadOnly = (this.currentView.name === '') ? false : true;
+  }
+
+  applyChanges() {
+    this.coloumnsSubmitted.emit(this.currentView);
+    this.closeDialog();
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/query.service.spec.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/query.service.spec.ts
new file mode 100644
index 0000000..4d4999c
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/query.service.spec.ts
@@ -0,0 +1,103 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { async, TestBed, inject } from '@angular/core/testing';
+import { BaseRequestOptions, Http, HttpModule, Response, ResponseOptions, RequestMethod} from '@angular/http';
+import { MockBackend, MockConnection } from '@angular/http/testing';
+import { HttpErrorHandler } from '../core/http-error-handler';
+import { of as observableOf } from 'rxjs';
+
+import { MDMItem } from '../core/mdm-item';
+import { PropertyService } from '../core/property.service';
+import { QueryService, Query, SearchResult } from './query.service';
+
+describe ( 'QueryService', () => {
+
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      imports: [HttpModule],
+      providers: [
+        PropertyService,
+        QueryService,
+        MockBackend,
+        BaseRequestOptions,
+        HttpErrorHandler,
+        {
+          provide: Http,
+          useFactory: (backend, options) => new Http(backend, options),
+          deps: [MockBackend, BaseRequestOptions]
+        }]
+    });
+  });
+
+  describe('query()', () => {
+    it('should return result for simple query', async(inject([QueryService, MockBackend], (queryService, mockBackend) => {
+      mockBackend.connections.subscribe((conn: MockConnection) => {
+        if (conn.request.url.endsWith('/query') && conn.request.method === RequestMethod.Post) {
+          let mockResponse = { rows: [
+            {source: 'MDMNVH', type: 'Test', id: 'id1', columns: [{type: 'Test', attribute: 'Name', value: 'TestNumberOne'}]}
+          ]};
+          conn.mockRespond(new Response(new ResponseOptions({ body: mockResponse })));
+        }
+        return;
+      });
+
+      queryService.query(new Query()).subscribe(results => {
+        expect(results.rows.length).toBe(1);
+        expect(results.rows[0].columns[0].value).toEqual('TestNumberOne');
+      });
+    })));
+  });
+
+  describe('queryType()', () => {
+    it('should quote IDs', async(inject([QueryService], (queryService) => {
+      let spy = spyOn(queryService, 'query').and.returnValue(observableOf(new SearchResult()));
+
+      let query = new Query();
+      query.resultType = 'TestStep';
+      query.addFilter('MDM', 'Test.Id eq "id1"');
+      query.columns = ['TestStep.Name', 'TestStep.Id'];
+
+      queryService.queryType('TestStep', [{ source: 'MDM', type: 'Test', id: 'id1'}], ['TestStep.Name']).subscribe(results => {
+        expect(queryService.query).toHaveBeenCalledWith(query);
+      });
+    })));
+  });
+
+  describe('queryItems()', () => {
+    it('should return result for simple query', async(inject([QueryService, MockBackend], (queryService, mockBackend) => {
+      mockBackend.connections.subscribe((conn: MockConnection) => {
+        if (conn.request.url.endsWith('/query') && conn.request.method === RequestMethod.Post) {
+          let queryObject = <Query>JSON.parse(conn.request.getBody());
+          let mockResponse = { rows: [
+            {source: 'MDMNVH', type: queryObject.resultType, id: 'id1', columns:
+              [{type: 'Test', attribute: 'Name', value: 'TestNumberOne'}]}
+          ]};
+          conn.mockRespond(new Response(new ResponseOptions({ body: mockResponse })));
+        }
+        return;
+      });
+      let item = new MDMItem('MDMNVH', 'Test', 'id1');
+
+      let result = queryService.queryItems([item], ['Test.Name']);
+      expect(result.length).toBe(1);
+      result[0].subscribe(results => {
+        expect(results.rows.length).toBe(1);
+        expect(results.rows[0].type).toEqual('Test');
+        expect(results.rows[0].columns[0].value).toEqual('TestNumberOne');
+      });
+    })));
+  });
+});
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/query.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/query.service.ts
new file mode 100644
index 0000000..abf5e97
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/query.service.ts
@@ -0,0 +1,144 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import {Injectable} from '@angular/core';
+import {Http, Headers, RequestOptions} from '@angular/http';
+
+import {of as observableOf,  Observable } from 'rxjs';
+import {catchError, map} from 'rxjs/operators';
+import {PropertyService} from '../core/property.service';
+import {MDMItem} from '../core/mdm-item';
+import {HttpErrorHandler} from '../core/http-error-handler';
+import {Type, deserialize} from 'class-transformer';
+
+export class Filter {
+  sourceName: string;
+  filter: string;
+  searchString: string;
+
+  constructor(sourceName: string, filter: string, searchString: string) {
+    this.sourceName = sourceName;
+    this.filter = filter;
+    this.searchString = searchString;
+  }
+}
+export class Query {
+  resultType: string;
+  @Type(() => Filter)
+  filters: Filter[] = [];
+  columns: String[] = [];
+
+  addFilter(sourceName: string, filter: string) {
+    let f = this.filters.find(i => i.sourceName === sourceName);
+    if (f) {
+      f.filter += ' or ' + filter; // TODO
+    } else {
+      this.filters.push(new Filter(sourceName, filter, ''));
+    }
+  }
+}
+
+export class Columns {
+  type: string;
+  attribute: string;
+  value: string;
+}
+
+export class Row {
+  source: string;
+  type: string;
+  id: string;
+  @Type(() => Columns)
+  columns: Columns[] = [];
+
+  getColumn(col: string) {
+    let column = this.columns.find(c => c.type + '.' + c.attribute === col);
+    if (column) {
+      return column.value;
+    } else {
+      return '';
+    }
+  }
+
+  equals (row: Row) {
+    return this.source === row.source && this.type === row.type && this.id === row.id;
+  }
+
+  public getItem() {
+    return new MDMItem(this.source, this.type, this.id);
+  }
+}
+
+export class SearchResult {
+  @Type(() => Row)
+  rows: Row[] = [];
+}
+
+@Injectable()
+export class QueryService {
+  private queryUrl: string;
+
+  constructor(private http: Http,
+              private httpErrorHandler: HttpErrorHandler,
+              private _prop: PropertyService) {
+    this.queryUrl = _prop.getUrl('mdm/query');
+  }
+
+  query(query: Query): Observable<SearchResult> {
+    return this.http.post(this.queryUrl, query).pipe(
+               map(res => deserialize(SearchResult, res.text())),
+               catchError(this.httpErrorHandler.handleError));
+  }
+
+  queryItems(items: MDMItem[], columns: string[]): Observable<SearchResult>[] {
+    let byType = items.reduce((acc: [string, MDMItem[]], item: MDMItem) => {
+      let key = item.type;
+      acc[key] = acc[key] || [];
+      acc[key].push(item);
+      return acc;
+    }, {});
+
+    return Object.keys(byType).map(type => this.queryType(type, byType[type], columns));
+  }
+
+  queryType(type: string, items: MDMItem[], columns: string[]) {
+    if (items && items.length > 0) {
+      let query = new Query();
+      query.resultType = type;
+      query.columns = columns;
+
+      query.columns.push(type + '.Id');
+      items.forEach(i => query.addFilter(i.source, i.type + '.Id eq "' + i.id + '"'));
+
+      return this.query(query);
+    } else {
+      return observableOf(new SearchResult());
+    }
+  }
+
+  suggestValues(environments: string[], type: string, attribute: string) {
+    let body = JSON.stringify({
+      'sourceNames': environments,
+      'type': type,
+      'attrName': attribute
+    });
+    let headers = new Headers({ 'Content-Type': 'application/json' });
+    let options = new RequestOptions({ headers: headers });
+    let url =  this._prop.getUrl('mdm/suggestions');
+    return this.http.post(url, body, options).pipe(
+      map(res => res.json().data),
+      catchError(this.httpErrorHandler.handleError));
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/tableview.component.css b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/tableview.component.css
new file mode 100644
index 0000000..0e6b71d
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/tableview.component.css
@@ -0,0 +1,34 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+.table > tbody > tr.active > td {
+	background-color: #66afe9; /*#337ab7;*/
+}
+
+.noselect {
+  -webkit-touch-callout: none; /* iOS Safari */
+    -webkit-user-select: none; /* Safari */
+     -khtml-user-select: none; /* Konqueror HTML */
+       -moz-user-select: none; /* Firefox */
+        -ms-user-select: none; /* Internet Explorer/Edge */
+            user-select: none; /* Non-prefixed version, currently
+                                  supported by Chrome and Opera */
+}
+
+>>> thead >>> .ui-state-active {
+	background-color: #e7e7e7 !important;
+	border-color: #c7c7c7 !important;
+	color: inherit !important;
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/tableview.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/tableview.component.html
new file mode 100644
index 0000000..d1305d7
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/tableview.component.html
@@ -0,0 +1,129 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+<div *ngIf="loading" style="text-align: center; margin: 1em;">
+  <div class="fa fa-spinner fa-pulse fa-fw"></div>
+  <!--   Suchergebnisse werden geladen-->
+  {{ 'tableview.tableview.loading-search-results' | translate }}
+</div>
+<div *ngIf="!loading" style="overflow-x: auto;">
+
+  <p-contextMenu #cm [model]="menuItems" appendTo="body"></p-contextMenu>
+  <p-table [value]="viewRows"
+           [columns]="turboViewColumns"
+
+           [resizableColumns]="true"
+           columnResizeMode="expand"
+           [reorderableColumns]="true"
+
+           sortMode="single"
+           [customSort]=true
+           (sortFunction)="customSort($event)"
+           [sortField]="view?.sortField"
+           [sortOrder]="view?.sortOrder"
+
+           [(selection)]="selectedViewRows"
+           dataKey="id"
+
+           [(contextMenuSelection)]="menuSelectedRow"
+           [contextMenu]="cm"
+
+           [paginator]="true"
+           [pageLinks]="3"
+           [rows]="10"
+           [rowsPerPageOptions]="[3,10,20,50,100,200,500,1000]"
+
+           (onColReorder)="onColReorder($event)"
+           (onColResize)="onColResize($event)"
+           (onSort)="onSort($event)"
+           (onContextMenuSelect)="onContextMenuSelect($event)"
+           (onRowClick)="onRowClick($event)"
+>
+           <!--
+           [scrollable]="true"
+           [style]="{width:'200px;'}"
+
+           [sortField]="view?.getSortField()"
+           [sortOrder]="view?.getSortOrder()"
+           (sortFunction)="onSort($event)"
+
+           (onColReorder)="onColReorder($event)"
+
+
+           stateStorage="local"
+           stateKey="state01" -->
+    <!-- <ng-template pTemplate="colgroup" let-columns>
+          <colgroup>
+            <col style="width: 3em">
+            <col style="width: 3em">
+            <col style="width: 3em">
+            <col *ngFor="let col of columns" [style]="{'width': col.width +'px;'}">
+          </colgroup>
+    </ng-template> -->
+    <ng-template pTemplate="header" let-columns>
+      <tr>
+        <th style="width: 3em">
+          <p-tableHeaderCheckbox></p-tableHeaderCheckbox>
+        </th>
+        <th style="width: 3em"></th>
+        <th style="width: 3em"></th>
+        <!--
+            [style]="{'width': col.width +'px;'}" -->
+        <th *ngFor="let col of columns"
+            [pSortableColumn]="col.field"
+            pReorderableColumn
+            pResizableColumn>
+          {{col.header}}
+          <p-sortIcon [field]="col.field"></p-sortIcon>
+        </th>
+      </tr>
+    </ng-template>
+    <ng-template pTemplate="body"
+                 let-rowData
+                 let-columns="columns">
+      <tr [pSelectableRow]="rowData" [pContextMenuRow]="rowData">
+        <td>
+          <p-tableCheckbox [value]="rowData"></p-tableCheckbox>
+        </td>
+        <td>
+          <a class="icon"
+             [ngClass]="getNodeClass(rowData.type)"
+             title="{{getRowTitle(rowData)}}"
+             style="color:black; cursor: pointer;"
+             (click)="openInTree(rowData, $event)"
+             > </a>
+        </td>
+        <td>
+          <span class="fa"
+                [ngClass]="{'fa-shopping-cart': isShopable, 'fa-times': isRemovable}"
+                style="cursor: pointer"
+                title="{{ getIconTitle() | translate }}"
+                (click)="functionalityProvider(rowData)">
+          </span>
+        </td>
+        <td *ngFor="let col of columns">
+          {{rowData[col.field]}}
+        </td>
+      </tr>
+    </ng-template>
+
+    <!-- add 3 cols for the button columns -->
+    <ng-template pTemplate="emptymessage" let-columns>
+        <tr>
+            <td [attr.colspan]="columns?.length + 3">
+                {{ 'tableview.tableview.no-records-found' | translate }}
+            </td>
+        </tr>
+    </ng-template>
+  </p-table>
+</div>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/tableview.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/tableview.component.ts
new file mode 100644
index 0000000..d1ccecc
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/tableview.component.ts
@@ -0,0 +1,326 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Component, Input, ViewChild, OnInit, OnChanges, SimpleChanges, DoCheck} from '@angular/core';
+
+import { View, ViewColumn} from './tableview.service';
+import { NavigatorService } from '../navigator/navigator.service';
+import { SearchAttribute } from '../search/search.service';
+import { BasketService} from '../basket/basket.service';
+
+import { EditViewComponent } from './editview.component';
+import { SearchResult, Row } from './query.service';
+import { Node } from '../navigator/node';
+import { NodeService } from '../navigator/node.service';
+
+import {DataTableModule, SharedModule, ContextMenuModule, MenuItem, SortEvent} from 'primeng/primeng';
+import {MDMNotificationService} from '../core/mdm-notification.service';
+
+import { TranslateService } from '@ngx-translate/core';
+import { streamTranslate, TRANSLATE } from '../core/mdm-core.module';
+
+export class TurboViewColumn {
+
+  field: string;
+  header: string;
+  width: number;
+  sortOrder: number;
+
+  constructor (field: string, header: string, width?: number, sortOrder?: number) {
+    this.field = field;
+    this.header = header;
+    this.sortOrder = sortOrder != undefined ? sortOrder : 0;
+    this.width = width;
+  }
+}
+
+
+@Component({
+  selector: 'mdm-tableview',
+  templateUrl: 'tableview.component.html',
+  styleUrls: ['./tableview.component.css']
+})
+export class TableviewComponent implements OnInit, OnChanges {
+
+  public static readonly pageSize = 5;
+  readonly buttonColumns = 3;
+
+  @Input() view: View;
+  @Input() results: SearchResult;
+
+  /** @todo: Bad practice. value defined in template will be assumed to be a string.
+  example: in template: [isShopable]="false", in component if(isShopable) {console.log('yes')} else { console.log('no')} will log yes!
+  **/
+  @Input() isShopable = false;
+  @Input() isRemovable  = false;
+  @Input() menuItems: MenuItem[] = [];
+  @Input() selectedEnvs: Node[];
+  @Input() searchAttributes: { [env: string]: SearchAttribute[] };
+  @Input() environments: Node[];
+  @Input() loading: true;
+  @Input() loadingIcon = 'fa-spinner';
+
+  public menuSelectedRow: Row;
+  public selectedRows: Row[] = [];
+  public columnsToShow: ViewColumn[];
+  public readonly buttonColStyle = {'width': '3%'};
+  public btnColHidden = false;
+
+  public viewRows: Row[];
+  public turboViewColumns: TurboViewColumn[];
+  public selectedViewRows: Row[] = [];
+
+
+  constructor(private basketService: BasketService,
+              private navigatorService: NavigatorService,
+              private nodeService: NodeService,
+              private notificationService: MDMNotificationService,
+              private translateService: TranslateService) {
+  }
+
+  ngOnInit() {
+    streamTranslate(this.translateService, TRANSLATE('tableview.tableview.show-in-tree'))
+    .subscribe(labels => this.menuItems.push({
+      label: labels,
+      icon: 'fa fa-tree',
+      command: (event) => this.openInTree(this.menuSelectedRow)
+    }));
+
+    streamTranslate(this.translateService, TRANSLATE('tableview.tableview.reset-selection'))
+    .subscribe(labels => this.menuItems.push({
+      label: labels,
+      icon: 'fa fa-square-o',
+      command: (event) => {
+        this.selectedViewRows = [];
+        this.menuSelectedRow = undefined;
+      }
+    }));
+  }
+
+  ngOnChanges(changes: SimpleChanges) {
+    if (changes['results'] && this.view != undefined) {
+      this.customSort({ 'field': this.view.getSortField(), 'order': this.view.getSortOrder() });
+      this.viewRows = this.results.rows.map(row => this.mapRow2View(row));
+    }
+    if (changes['view'] && this.view != undefined) {
+      this.turboViewColumns = this.view.columns.map(viewCol => this.mapColumn2Turbo(viewCol));
+    }
+    if (changes['selectedEnvs'] || changes['view']) {
+      this.updateColumnsToShow();
+    }
+  }
+
+
+  mapRow2View(row: Row) {
+    let viewRow: Row = new Row();
+    row.columns.forEach(col => viewRow[col.type + '_' + col.attribute] = col.value != undefined ? col.value : '-');
+    viewRow['id'] = row.id;
+    viewRow['type'] = row.type;
+    viewRow['source'] = row.source;
+    return viewRow;
+  }
+
+  mapColumn2Turbo(viewCol: ViewColumn) {
+    return new TurboViewColumn(viewCol.type + '_' + viewCol.name, viewCol.type + ' ' + viewCol.name, viewCol.width);
+  }
+
+  /** @TODO: update for viewRows/columns
+  **/
+  updateColumnsToShow() {
+    if (this.view && this.selectedEnvs && this.selectedEnvs.length > 0
+        && this.searchAttributes && this.searchAttributes[this.selectedEnvs[0].sourceName]) {
+
+      let relevantCols: string[] = [];
+      this.selectedEnvs.forEach(env =>
+        relevantCols = relevantCols.concat(this.searchAttributes[env.sourceName].map(sa =>
+          sa.boType.toLowerCase() + sa.attrName.toLowerCase())
+        )
+      );
+      relevantCols = Array.from(new Set(relevantCols));
+
+      this.view.columns.filter(col => {
+        if (relevantCols.findIndex(ct => ct === col.type.toLowerCase() + col.name.toLowerCase()) > -1) {
+          col.hidden = false;
+        } else {
+          col.hidden = true;
+        }
+        this.btnColHidden = false;
+      });
+    } else if (this.view && this.selectedEnvs && this.selectedEnvs.length === 0) {
+      this.btnColHidden = true;
+      this.view.columns.forEach(vc => vc.hidden = true);
+    }
+  }
+
+  onContextMenuSelect(event: any) {
+    this.menuSelectedRow = event.data;
+  }
+
+  /** @todo: p-table is not supporting manual column width. Might be kept as guide line in case
+  * future version of p-table support checkbox with multi selection.
+  *   @deprecated
+  **/
+  onColResize(event: any) {
+    let index = event.element.cellIndex - this.buttonColumns;
+    if (index > -1) {
+      this.view.columns[index].width = event.element.clientWidth;
+    }
+  }
+
+  onColReorder(event: any) {
+    let tmp = this.view.columns[event.dragIndex];
+    this.view.columns[event.dragIndex] = this.view.columns[ event.dropIndex];
+    this.view.columns[event.dropIndex] = tmp;
+  }
+
+  onSort(event: any) {
+    if (this.view != undefined) {
+      this.view.sortField = event.field;
+      this.view.sortOrder = event.order;
+    }
+  }
+
+  customSort(event: SortEvent) {
+    let comparer = function(row1: Row, row2: Row): number {
+      let value1 = row1[event.field];
+      let value2 = row2[event.field];
+
+      if (value1 == null && value2 != null) {
+        return -1;
+      } else if (value1 != null && value2 == null) {
+        return 1;
+      } else if (value1 == null && value2 == null) {
+        return 0;
+      } else if (!isNaN(<any>value1) && !isNaN(<any>value2)) {
+        if (value1 === value2) {
+          return 0;
+        } else {
+          return (+value1 < +value2 ? -1 : 1) * event.order;
+        }
+      } else {
+        return value1.localeCompare(value2) * -event.order;
+      }
+    };
+    if (event.data) {
+      event.data.sort(comparer);
+    }
+  }
+
+  functionalityProvider(row: Row) {
+    let item = row.getItem();
+    if (this.isShopable) {
+      this.basketService.add(item);
+    } else {
+      this.basketService.remove(item);
+    }
+  }
+
+  /** @todo: should be converted to pipe. avoid function calls from template (apart from event binding) for performance.
+  **/
+  getNodeClass(type: string) {
+    switch (type) {
+      case 'StructureLevel':
+        return 'pool';
+      case 'MeaResult':
+        return 'measurement';
+      case 'SubMatrix':
+        return 'channelgroup';
+      case 'MeaQuantity':
+        return 'channel';
+      default:
+        return type.toLowerCase();
+    }
+  }
+
+  /** @todo: should be converted to pipe. avoid function calls from template (apart from event binding) for performance.
+  **/
+  getRowTitle(row: Row) {
+    return this.translateService.instant('tableview.tableview.tooltip-open-in')
+      + ': ' + [NodeService.mapSourceNameToName(this.environments, row.source), row.type, row.id].join('/');
+  }
+
+  /** @todo: should be converted to pipe. avoid function calls from template for performance.
+  *           option b) convert to componant field, since its not depending on result data.
+  **/
+  getIconTitle() {
+    return this.isShopable
+      ? TRANSLATE('tableview.tableview.tooltip-add-to-shopping-basket')
+      : TRANSLATE('tableview.tableview.tooltip-remove-from-shopping-basket');
+  }
+
+  /** @todo: helping function for multi select in p-datatable. p-table does not support select mode
+  * multiple with check box. Thus, this is not used at the moment. Might be kept as guide line in case
+  * future version of p-table support checkbox with multi selection.
+  *   @deprecated
+  **/
+  onRowClick(e: any) {
+    let row: Row = e.data;
+    this.nodeService.getNodeFromItem(row.getItem()).subscribe(
+      node => this.navigatorService.fireSelectedNodeChanged(node),
+      error => this.notificationService.notifyError(this.translateService.instant('tableview.tableview.err-cannot-calculate-node'), error)
+    );
+    let event: MouseEvent = e.originalEvent;
+    if (event.shiftKey && this.selectedRows.length > 0) {
+      let lastRow = this.selectedRows[this.selectedRows.length - 1];
+      let lastIndex = this.results.rows.findIndex(r => r.equals(lastRow));
+      let thisIndex = this.results.rows.findIndex(r => r.equals(row));
+      if (this.selectedRows.findIndex(sr => sr.equals(row)) > -1) {
+      } else {
+        let min = Math.min(lastIndex, thisIndex);
+        let max = Math.max(lastIndex, thisIndex);
+        this.results.rows.slice(min, max + 1)
+          .forEach(r => {
+            if (this.selectedRows.findIndex(sr => sr.equals(r)) === -1) {
+              this.selectedRows.push(r);
+            }
+          });
+      }
+    } else if (event.ctrlKey) {
+      this.selectRow(row);
+    } else {
+      if (this.selectedRows.length > 1 || (this.selectedRows.length !== 0 && !row.equals(this.selectedRows[0]))) {
+        this.selectedRows = [];
+      }
+      this.selectRow(row);
+    }
+  }
+
+  /** @todo: helping function for multi select in p-datatable. p-table does not support select mode
+  * multiple with check box. Thus, this is not used at the moment. Might be kept as guide line in case
+  * future version of p-table support checkbox with multi selection.
+  *   @deprecated
+  **/
+  selectRow(row: Row) {
+    let index = this.selectedRows.findIndex(ai => ai.equals(row));
+    if (index === -1) {
+      this.selectedRows.push(row);
+    } else {
+      this.selectedRows.splice(index, 1);
+    }
+  }
+
+  openInTree(row?: Row) {
+    if (row != undefined) {
+      this.selectedViewRows = [row];
+    }
+    if (this.selectedViewRows != undefined && this.selectedViewRows.length === 0 && this.menuSelectedRow != undefined) {
+      this.navigatorService.fireOnOpenInTree([this.menuSelectedRow.getItem()]);
+    } else if (row) {
+      this.navigatorService.fireOnOpenInTree([row.getItem()]);
+    } else {
+      this.navigatorService.fireOnOpenInTree(this.selectedRows.map(r => r.getItem()));
+    }
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/tableview.module.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/tableview.module.ts
new file mode 100644
index 0000000..2cfde41
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/tableview.module.ts
@@ -0,0 +1,50 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { NgModule } from '@angular/core';
+
+import { MDMCoreModule } from '../core/mdm-core.module';
+
+import { TableviewComponent } from './tableview.component';
+import { EditViewComponent } from './editview.component';
+import { ViewComponent } from './view.component';
+import {SearchattributeTreeModule} from '../searchattribute-tree/searchattribute-tree.module';
+
+import {TableModule} from 'primeng/table';
+import {DataTableModule, SharedModule} from 'primeng/primeng';
+
+@NgModule({
+  imports: [
+    MDMCoreModule,
+    SearchattributeTreeModule,
+    TableModule,
+    DataTableModule,
+    SharedModule
+  ],
+  declarations: [
+    TableviewComponent,
+    EditViewComponent,
+    ViewComponent
+  ],
+  exports: [
+    TableviewComponent,
+    EditViewComponent,
+    ViewComponent,
+  ],
+  providers: [
+  ]
+})
+export class TableViewModule {
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/tableview.service.spec.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/tableview.service.spec.ts
new file mode 100644
index 0000000..6d64e58
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/tableview.service.spec.ts
@@ -0,0 +1,92 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { async, TestBed, inject } from '@angular/core/testing';
+import { BaseRequestOptions, Http, HttpModule, Response, ResponseOptions } from '@angular/http';
+import { MockBackend } from '@angular/http/testing';
+
+import { ViewService } from './tableview.service';
+import { PropertyService } from '../core/property.service';
+import { PreferenceService, Scope } from '../core/preference.service';
+import { HttpErrorHandler } from '../core/http-error-handler';
+
+import { MDMNotificationService } from '../core/mdm-notification.service';
+import { TranslateModule } from '@ngx-translate/core';
+
+describe ( 'TableviewService', () => {
+
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      imports: [
+        HttpModule,
+        TranslateModule.forRoot(),
+      ],
+      providers: [
+        ViewService,
+        PropertyService,
+        PreferenceService,
+        MockBackend,
+        BaseRequestOptions,
+        HttpErrorHandler,
+        MDMNotificationService,
+        {
+          provide: Http,
+          useFactory: (backend, options) => new Http(backend, options),
+          deps: [MockBackend, BaseRequestOptions]
+        }]
+    });
+  });
+
+  describe('getViews()', () => {
+    it('should return view from preference', async(inject([ViewService, MockBackend], (tableviewService, mockBackend) => {
+
+      mockBackend.connections.subscribe(conn => {
+        const mockResponse = {
+          preferences: [
+          {
+            id: 22,
+            key: 'tableview.view.Test',
+            scope: Scope.USER,
+            source: null,
+            user: 'sa',
+            value: '{"columns":[{"type":"Test","name":"Name"},{"type":"TestStep","name":"Name"}],"name":"Test"}'
+          }
+        ]};
+        conn.mockRespond(new Response(new ResponseOptions({ body: mockResponse })));
+      });
+
+      tableviewService.getViews().subscribe(prefViews => {
+        expect(prefViews.length).toBe(1);
+        expect(prefViews[0].scope).toBe(Scope.USER);
+        expect(prefViews[0].view.columns.length).toBe(2);
+      });
+    })));
+
+    it('should return default view, if no view preferences are available',
+        async(inject([ViewService, MockBackend], (tableviewService, mockBackend) => {
+
+      mockBackend.connections.subscribe(conn => {
+        const mockResponse = { preferences: [] };
+        conn.mockRespond(new Response(new ResponseOptions({ body: mockResponse })));
+      });
+
+      tableviewService.getViews().subscribe(prefViews => {
+        expect(prefViews.length).toBe(1);
+        expect(prefViews[0].scope).toBe(Scope.SYSTEM);
+        expect(prefViews[0].view.columns.length).toBe(1);
+      });
+    })));
+  });
+});
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/tableview.service.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/tableview.service.ts
new file mode 100644
index 0000000..247b78d
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/tableview.service.ts
@@ -0,0 +1,135 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Injectable, EventEmitter } from '@angular/core';
+
+import { defaultIfEmpty, filter, map} from 'rxjs/operators';
+import { TranslateService } from '@ngx-translate/core';
+import { Type, serialize, deserialize } from 'class-transformer';
+
+import { PreferenceService, Preference, Scope } from '../core/preference.service';
+import { MDMNotificationService } from '../core/mdm-notification.service';
+
+export class ViewColumn {
+  type: string;
+  name: string;
+  hidden = false;
+  sortOrder: number;
+  width: number;
+
+  constructor(type: string, name: string, width?: number, sortOrder?: number) {
+    this.type = type;
+    this.name = name;
+    this.width = width;
+    this.sortOrder = sortOrder;
+  }
+
+  equals(vc: ViewColumn) {
+    return this.type === vc.type && this.name === vc.name;
+  }
+}
+
+export class View {
+  name: string;
+  @Type(() => ViewColumn)
+  columns: ViewColumn[] = [];
+  sortOrder: number;
+  sortField: string;
+
+  constructor(name?: string, cols?: ViewColumn[]) {
+    this.name = name || ''; // TODO TRANSLATION: find a way to name a new view "New view" in current language
+    this.columns = cols || [];
+  }
+
+  setSortOrder(type: string, name: string, order: any) {
+    this.columns.forEach(c => {
+    if (c.type === type && c.name === name ) {
+      c.sortOrder = order;
+    } else {
+      c.sortOrder = null;
+    }
+  });
+  }
+
+  getSortOrder() {
+    let col = this.columns.find(c => c.sortOrder !== null);
+    if (col) {
+      return col.sortOrder;
+    }
+  }
+
+  getSortField() {
+    let col = this.columns.find(c => c.sortOrder !== null);
+    if (col) {
+      return col.type + '.' + col.name;
+    }
+  }
+}
+
+export class PreferenceView {
+  scope: string;
+  @Type(() => View)
+  view: View;
+
+  constructor(scope: string, view?: View) {
+    this.scope = scope;
+    this.view = view || new View();
+  }
+}
+
+export class Style {
+  [field: string]: string
+}
+
+
+
+@Injectable()
+export class ViewService {
+  public viewSaved$ = new EventEmitter<View>();
+  public viewDeleted$ = new EventEmitter();
+
+  readonly preferencePrefix = 'tableview.view.';
+  private views: View[] = [];
+
+  defaultPrefViews =  [ new PreferenceView(Scope.SYSTEM, new View('Standard', [new ViewColumn('Test', 'Name')])) ];
+
+  constructor(private prefService: PreferenceService,
+              private notificationService: MDMNotificationService,
+              private translateService: TranslateService) {
+  }
+
+  getViews() {
+    return this.prefService.getPreference(this.preferencePrefix).pipe(
+        map(preferences => preferences.map(p => new PreferenceView(p.scope, deserialize(View, p.value)))),
+        filter(prefViews => !(prefViews == undefined || prefViews.length === 0)),
+        defaultIfEmpty(this.defaultPrefViews));
+  }
+
+  saveView(view: View) {
+    const pref = new Preference();
+    pref.value = serialize(view);
+    pref.key = this.preferencePrefix + view.name;
+    pref.scope = Scope.USER;
+    this.prefService.savePreference(pref).subscribe(
+      saved => this.viewSaved$.emit(view),
+      error => this.notificationService.notifyError(this.translateService.instant('tableview.tableview.err-cannot-save-view'), error)
+    );
+  }
+
+  deleteView(name: string) {
+    return this.prefService.deletePreferenceByScopeAndKey(Scope.USER, 'tableview.view.' + name);
+  }
+
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/view.component.html b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/view.component.html
new file mode 100644
index 0000000..273f81b
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/view.component.html
@@ -0,0 +1,103 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+<style>
+   :host /deep/ .dropdown {
+    width: 200px;
+  }
+
+   :host /deep/ .dropdown-toggle {
+    overflow: hidden;
+    padding-right: 24px/* Optional for caret */
+    ;
+    text-align: left;
+    text-overflow: ellipsis;
+    width: 100%;
+  }
+  /* Optional for caret */
+
+   :host /deep/ .dropdown-toggle .caret {
+    position: absolute;
+    right: 12px;
+    top: calc(50% - 2px);
+  }
+</style>
+
+<div class="btn-group" dropdown>
+  <button id="view" title="{{ 'tableview.view.tooltip-select-view' | translate }}" dropdownToggle type="button" class="btn btn-mdm dropdown-toggle" aria-haspopup="true" aria-expanded="false">
+    {{selectedView?.name}} <span class="caret"></span>
+  </button>
+  <ul class="dropdown-menu scrollable-menu" style="height: auto; max-height: 200px; overflow-x: hidden;" *dropdownMenu>
+    <div *ngFor="let groupedView of groupedViews" class="container-fluid">
+      <li class="dropdown-header" style="padding-left: 0pt;"> {{groupedView.label}} </li>
+      <li *ngFor="let view of groupedView.view">
+        <a class="dropdown-item" style="color:black; cursor: pointer;" (click)="selectView(view)">{{view.name}}</a>
+      </li>
+    </div>
+  </ul>
+</div>
+<button type="button" class="btn btn-mdm" (click)="newView($event)" title="{{ 'tableview.view.tooltip-create-new-view' | translate }}"><span class="fa fa-plus"></span></button>
+<button type="button" class="btn btn-mdm" (click)="editSelectedView($event)" title="{{ 'tableview.view.tooltip-edit-view' | translate }}"><span class="fa fa-pencil-square-o"></span></button>
+<button type="button" class="btn btn-mdm" (click)="showSaveModal($event)" title="{{ 'tableview.view.tooltip-save-view' | translate }}"><span class="fa fa-floppy-o"></span></button>
+<button type="button" class="btn btn-mdm" (click)="deleteView($event)" title="{{ 'tableview.view.tooltip-delete-view' | translate }}"><span class="fa fa-times"></span></button>
+
+<edit-view></edit-view>
+<overwrite-dialog></overwrite-dialog>
+
+<div bsModal #lgSaveModal="bs-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="SelectSearchComponents" aria-hidden="true">
+  <div class="modal-dialog modal-md">
+    <div class="modal-content">
+      <div class="modal-header">
+        <button type="button" class="close" (click)="childSaveModal.hide()" aria-label="Close">
+          <span aria-hidden="true">&times;</span>
+        </button>
+        <h4 class="modal-title">{{ 'tableview.view.title-save-view-as' | translate }}:</h4>
+      </div>
+      <div class="modal-body">
+        <div class="container-fluid">
+          <div class="row" *ngIf="userViewNames?.length > 0">
+            <p-dataTable
+              [value]="userViewNames"
+              resizableColumns="false"
+              [reorderableColumns]="false"
+              [rows]="10"
+              [paginator]="true"
+              [pageLinks]="3"
+              [rowsPerPageOptions]="[10,20,50]"
+              [(selection)]="selectedRow"
+              (onRowClick)="onRowSelect($event)"
+              (onRowSelect)="onRowSelect($event)">
+              <p-column [style]="{'width':'30px'}" selectionMode="single"></p-column>
+              <p-column header="{{ 'tableview.view.existing-view-names' | translate }}">
+                <ng-template pTemplate="body" let-col let-row="rowData" >
+                  {{row}}
+                </ng-template>
+              </p-column>
+            </p-dataTable>
+          </div>
+          <div class="row" style="margin-top: 15px;">
+            <div class="col-md-10" style="padding-left: 0;">
+              <input type="text" class="form-control" placeholder="Ansicht-Name" [value]="viewName" (input)="viewName = $event.target.value" (keyup.enter)="saveView($event)" required>
+            </div>
+            <div class="col-md-2" style="padding: 0;">
+                <button type="button" class="btn btn-default pull-right" (click)="saveView($event)" [disabled]="!viewName" title="{{ getSaveBtnTitle() | translate }}">
+                  <span class="fa fa-floppy-o"></span> {{ 'tableview.view.btn-save' | translate }}
+                </button>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/view.component.ts b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/view.component.ts
new file mode 100644
index 0000000..e5da9f4
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/app/tableview/view.component.ts
@@ -0,0 +1,213 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { Component, ViewChild, OnInit, EventEmitter} from '@angular/core';
+
+import { PreferenceView, View, ViewService} from './tableview.service';
+import { EditViewComponent } from './editview.component';
+
+import {classToClass} from 'class-transformer';
+import { ModalDirective } from 'ngx-bootstrap';
+
+import { OverwriteDialogComponent } from '../core/overwrite-dialog.component';
+import { MDMNotificationService } from '../core/mdm-notification.service';
+import { Scope } from '../core/preference.service';
+
+import { TranslateService } from '@ngx-translate/core';
+import { TRANSLATE } from '../core/mdm-core.module';
+
+@Component({
+  selector: 'mdm-view',
+  templateUrl: 'view.component.html'
+})
+export class ViewComponent implements OnInit {
+
+  public selectedView: View;
+  public groupedViews: { scope: string, view: View[], label: string }[] = [];
+  public viewChanged$ = new EventEmitter();
+  public viewName = '';
+  public userViewNames: string[];
+  public selectedRow: string;
+  public lazySelectedRow: string;
+
+  @ViewChild(EditViewComponent)
+  editViewComponent: EditViewComponent;
+
+  @ViewChild('lgSaveModal')
+  childSaveModal: ModalDirective;
+
+  @ViewChild(OverwriteDialogComponent)
+  overwriteDialogComponent: OverwriteDialogComponent;
+
+  constructor(private viewService: ViewService,
+              private notificationService: MDMNotificationService,
+              private translateService: TranslateService) {
+  }
+
+  ngOnInit() {
+    this.viewService.getViews().subscribe(
+                views => this.setViews(views),
+                error => this.notificationService.notifyError(this.translateService.instant('tableview.view.err-cannot-load-views'), error)
+    );
+    this.viewService.viewSaved$.subscribe(
+                view => this.onViewSaved(view),
+                error => this.notificationService.notifyError(this.translateService.instant('tableview.view.err-saving-view'), error)
+    );
+    this.viewService.viewDeleted$.subscribe(
+                () => this.onDeleteView(),
+                error => this.notificationService.notifyError(this.translateService.instant('tableview.view.err-deleting-view'), error)
+    );
+  }
+
+  selectView(view: View) {
+    this.selectedView = view;
+    this.viewChanged$.emit();
+  }
+
+  public editSelectedView(e: Event) {
+    e.stopPropagation();
+    this.editViewComponent.showDialog(this.selectedView).subscribe(
+      v => this.selectedView = v,
+      error => this.notificationService.notifyError(this.translateService.instant('tableview.view.err-cannot-select-view'), error)
+    );
+  }
+
+  public newView(e: Event) {
+    e.stopPropagation();
+    this.editViewComponent.showDialog(new View()).subscribe(
+      v => this.selectedView = v,
+      error => this.notificationService.notifyError(this.translateService.instant('tableview.view.err-cannot-display-view-editor'), error)
+    );
+  }
+
+  private onDeleteView() {
+    this.viewService.getViews().subscribe(
+      prefViews => {
+        this.getGroupedView(prefViews);
+        if (prefViews.find(pv => pv.view.name === this.selectedView.name) == undefined
+            && this.viewService.defaultPrefViews.find(pv => pv.view.name === this.selectedView.name) == undefined) {
+          this.selectView(prefViews[0].view);
+        }
+      },
+      error => this.notificationService.notifyError(this.translateService.instant('tableview.view.err-cannot-update-views'), error)
+    );
+  }
+
+ private onViewSaved(view: View) {
+   this.viewService.getViews().subscribe(
+     prefViews => this.getGroupedView(prefViews),
+     error => this.notificationService.notifyError(this.translateService.instant('tableview.view.err-cannot-update-views'), error)
+   );
+  }
+
+  private setViews(prefViews: PreferenceView[]) {
+    this.getGroupedView(prefViews);
+    this.selectView(prefViews[0].view);
+  }
+
+  private getGroupedView(prefViews: PreferenceView[]) {
+    this.groupedViews = [];
+    for (let i = 0; i < prefViews.length; i++) {
+      let pushed = false;
+      for (let j = 0; j < this.groupedViews.length; j++) {
+        if (prefViews[i].scope === this.groupedViews[j].scope) {
+          this.groupedViews[j].view.push(prefViews[i].view);
+          pushed = true;
+        }
+      }
+      if (pushed === false) { this.groupedViews.push({
+        scope: prefViews[i].scope,
+        view: [prefViews[i].view],
+        label: Scope.toLabel(prefViews[i].scope)
+      }); }
+    }
+    this.updateUserViewNames();
+  }
+
+  private updateUserViewNames() {
+    this.viewService.getViews().subscribe(
+      prefViews => this.userViewNames = prefViews.filter(pv => pv.scope === Scope.USER)
+                                                 .map(pv => pv.view.name),
+      error => this.notificationService.notifyError(this.translateService.instant('tableview.view.err-cannot-update-views'), error)
+    );
+  }
+
+  saveView(e: Event) {
+    e.stopPropagation();
+    if (this.groupedViews.find(gv => gv.view.find(v => v.name === this.viewName) != undefined)) {
+      this.childSaveModal.hide();
+      this.overwriteDialogComponent.showOverwriteModal(this.translateService.instant('tableview.view.a-view')).subscribe(
+        needSave => this.saveView2(needSave),
+        error => {
+          this.saveView2(false);
+          this.notificationService.notifyError(this.translateService.instant('tableview.view.err-cannot-save-view'), error);
+        }
+      );
+    } else {
+      this.saveView2(true);
+    }
+  }
+
+  saveView2(save: boolean) {
+    if (save) {
+      let view = classToClass(this.selectedView);
+      view.name = this.viewName;
+      this.viewService.saveView(view);
+      this.childSaveModal.hide();
+      this.selectView(classToClass(view));
+    } else {
+      this.childSaveModal.show();
+    }
+  }
+
+  showSaveModal(e: Event) {
+    e.stopPropagation();
+    this.viewName = this.selectedView.name === this.translateService.instant('tableview.view.new-view') ? '' : this.selectedView.name;
+    this.childSaveModal.show();
+  }
+
+  deleteView(e: Event) {
+    e.stopPropagation();
+    let userGroup = this.groupedViews.find(gv => gv.scope === Scope.USER);
+    if (userGroup && userGroup.view.length > 0) {
+      this.viewService.deleteView(this.selectedView.name).subscribe(() =>
+        this.viewService.getViews().subscribe(
+          views => {
+            this.setViews(views);
+            this.viewService.viewDeleted$.emit();
+          },
+          error => this.notificationService.notifyError(this.translateService.instant('tableview.view.err-cannot-delete-view'), error))
+      );
+    } else {
+      this.notificationService.notifyError('Forbidden.',
+      this.translateService.instant('tableview.view.err-cannot-modify-system-settings'));
+    }
+  }
+
+  getSaveBtnTitle() {
+    return this.viewName ? TRANSLATE('tableview.view.tooltip-save-view') : TRANSLATE('tableview.view.tooltip-no-name-set');
+  }
+
+  onRowSelect(e: any) {
+    if (this.lazySelectedRow !== e.data) {
+      this.selectedRow = e.data;
+      this.viewName = e.data;
+    } else {
+      this.selectedRow = undefined;
+      this.viewName = '';
+    }
+    this.lazySelectedRow = this.selectedRow;
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/.gitkeep b/org.eclipse.mdm.application/src/main/webapp/src/assets/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/.gitkeep
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/brick.png b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/brick.png
new file mode 100644
index 0000000..7851cf3
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/brick.png
Binary files differ
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/brick_add.png b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/brick_add.png
new file mode 100644
index 0000000..fac186b
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/brick_add.png
Binary files differ
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/calendar.png b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/calendar.png
new file mode 100644
index 0000000..6589138
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/calendar.png
Binary files differ
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/chart_curve.png b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/chart_curve.png
new file mode 100644
index 0000000..01e933a
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/chart_curve.png
Binary files differ
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/chart_curve_go.png b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/chart_curve_go.png
new file mode 100644
index 0000000..ac9eda5
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/chart_curve_go.png
Binary files differ
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/cog.png b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/cog.png
new file mode 100644
index 0000000..67de2c6
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/cog.png
Binary files differ
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/cog_go.png b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/cog_go.png
new file mode 100644
index 0000000..3262767
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/cog_go.png
Binary files differ
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/computer.png b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/computer.png
new file mode 100644
index 0000000..9bc37dc
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/computer.png
Binary files differ
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/database.png b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/database.png
new file mode 100644
index 0000000..3d09261
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/database.png
Binary files differ
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/folder.png b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/folder.png
new file mode 100644
index 0000000..784e8fa
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/folder.png
Binary files differ
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/house.png b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/house.png
new file mode 100644
index 0000000..fed6221
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/house.png
Binary files differ
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/monitor.png b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/monitor.png
new file mode 100644
index 0000000..d040bd0
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/monitor.png
Binary files differ
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/page_white_stack.png b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/page_white_stack.png
new file mode 100644
index 0000000..44084ad
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/page_white_stack.png
Binary files differ
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/page_white_text.png b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/page_white_text.png
new file mode 100644
index 0000000..813f712
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/page_white_text.png
Binary files differ
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/paste_plain.png b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/paste_plain.png
new file mode 100644
index 0000000..c0490eb
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/paste_plain.png
Binary files differ
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/readme.html b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/readme.html
new file mode 100644
index 0000000..3852c6d
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/readme.html
@@ -0,0 +1,1495 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+	<!-- Document HEAD -->
+	<head>
+	
+		<title>famfamfam.com: Silk Icons</title>
+
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+		<meta name="mssmarttagspreventparsing" content="true" />
+		<meta name="robots" content="all" />		
+		<meta http-equiv="imagetoolbar" content="no" />
+
+		<meta name="author" content="Mark James" />
+		<meta name="copyright" content="Mark James" />
+		<meta name="revisit-after" content="7 days" />		
+		
+	    <style type="text/css">
+<!--
+body {
+	font-family: Verdana, Arial, Helvetica, sans-serif;
+	font-size: 85%;
+}
+
+h1,h2,h3 {
+padding: 10px;
+background-color: #F0F0F0;
+border-bottom: 1px solid #DDD;
+}
+
+table td {
+padding: 5px;
+}
+
+td em {
+display: none;
+}
+-->
+        </style>
+	</head>
+
+	<!-- Document BODY -->
+	<body>
+
+		<div id="container-outer">
+			<div id="container-inner">
+					<div id="content-inner">				
+
+						<h2>Silk Icons</h2>
+						<p><a href="http://www.famfamfam.com/lab/icons/silk/">http://www.famfamfam.com/lab/icons/silk/</a></p>
+					  <p>
+							&#8220;Silk&#8221; is a smooth icon set, containing 1000 16-by-16 pixel icons in
+							strokably-soft PNG format. Containing a large variety of icons, you're sure to find something
+							that tickles your fancy. And all for a low low price of $0.00. You can't say fairer than that.
+							
+							<br />
+							<br/>
+
+						  <!--
+							<a class="download-link" href="famfamfam_mini_icons.zip">Download</a><br />
+							-->
+							
+						  Current version: <strong>1.3</strong></p>
+						
+						<h3>License</h3>
+						<p>
+						<!-- Creative Commons License -->
+						I also love to hear of my work being used, feel encouraged to send an email
+						with a link or screenshot of the icons in their new home to
+						mjames&nbsp;<span class="email">at</span>&nbsp;gmail&nbsp;<span class="email">dot</span>&nbsp;com.
+						This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/2.5/">Creative Commons Attribution 2.5 License</a>.
+						This means you may use it for any purpose, and make any changes you like.
+						All I ask is that you include a link back to <a href="http://www.famfamfam.com/lab/icons/silk/">http://www.famfamfam.com/lab/icons/silk/</a> in your credits (contact me to discuss licencing further).
+						<!-- /Creative Commons License -->
+
+						
+						<!--
+						
+						<rdf:RDF xmlns="http://web.resource.org/cc/"
+							xmlns:dc="http://purl.org/dc/elements/1.1/"
+							xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+						<Work rdf:about="">
+						   <dc:title>Silk icons</dc:title>
+						   <dc:date>2005</dc:date>
+						   <dc:description>'Silk' icon set.</dc:description>
+						   <dc:creator><Agent>
+							  <dc:title>Mark James</dc:title>
+						   </Agent></dc:creator>
+						   <dc:rights><Agent>
+							  <dc:title>Mark James</dc:title>
+						   </Agent></dc:rights>
+						   <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+						   <dc:source rdf:resource="http://www.famfamfam.com/lab/icons/silk/"/>
+						   <license rdf:resource="http://creativecommons.org/licenses/by/2.5/" />
+						</Work>
+						
+						<License rdf:about="http://creativecommons.org/licenses/by/2.5/">
+						   <permits rdf:resource="http://web.resource.org/cc/Reproduction" />
+						   <permits rdf:resource="http://web.resource.org/cc/Distribution" />
+						   <requires rdf:resource="http://web.resource.org/cc/Notice" />
+						   <requires rdf:resource="http://web.resource.org/cc/Attribution" />
+						   <permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+						</License>
+						
+						</rdf:RDF>
+						
+						-->
+						</p>
+						
+						<h3>Sightings</h3>
+						
+						<p>
+						Do you use this set? <a href="http://www.famfamfam.com/about/?contact=Silk%20icons%20in%20the%20wild">Contact me!</a>.
+						</p>
+						
+						
+						<h3>Icons</h3>
+
+						
+						<p><table>
+	<tr>
+		<td><img src="icons/accept.png" title="accept.png" alt="accept "/><em>accept.png</em></td>
+		<td><img src="icons/add.png" title="add.png" alt="add "/><em>add.png</em></td>
+
+		<td><img src="icons/anchor.png" title="anchor.png" alt="anchor "/><em>anchor.png</em></td>
+		<td><img src="icons/application.png" title="application.png" alt="application "/><em>application.png</em></td>
+		<td><img src="icons/application_add.png" title="application_add.png" alt="application add "/><em>application_add.png</em></td>
+		<td><img src="icons/application_cascade.png" title="application_cascade.png" alt="application cascade "/><em>application_cascade.png</em></td>
+		<td><img src="icons/application_delete.png" title="application_delete.png" alt="application delete "/><em>application_delete.png</em></td>
+		<td><img src="icons/application_double.png" title="application_double.png" alt="application double "/><em>application_double.png</em></td>
+
+		<td><img src="icons/application_edit.png" title="application_edit.png" alt="application edit "/><em>application_edit.png</em></td>
+		<td><img src="icons/application_error.png" title="application_error.png" alt="application error "/><em>application_error.png</em></td>
+		<td><img src="icons/application_form.png" title="application_form.png" alt="application form "/><em>application_form.png</em></td>
+		<td><img src="icons/application_form_add.png" title="application_form_add.png" alt="application form add "/><em>application_form_add.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/application_form_delete.png" title="application_form_delete.png" alt="application form delete "/><em>application_form_delete.png</em></td>
+
+		<td><img src="icons/application_form_edit.png" title="application_form_edit.png" alt="application form edit "/><em>application_form_edit.png</em></td>
+		<td><img src="icons/application_form_magnify.png" title="application_form_magnify.png" alt="application form magnify "/><em>application_form_magnify.png</em></td>
+		<td><img src="icons/application_get.png" title="application_get.png" alt="application get "/><em>application_get.png</em></td>
+		<td><img src="icons/application_go.png" title="application_go.png" alt="application go "/><em>application_go.png</em></td>
+		<td><img src="icons/application_home.png" title="application_home.png" alt="application home "/><em>application_home.png</em></td>
+		<td><img src="icons/application_key.png" title="application_key.png" alt="application key "/><em>application_key.png</em></td>
+
+		<td><img src="icons/application_lightning.png" title="application_lightning.png" alt="application lightning "/><em>application_lightning.png</em></td>
+		<td><img src="icons/application_link.png" title="application_link.png" alt="application link "/><em>application_link.png</em></td>
+		<td><img src="icons/application_osx.png" title="application_osx.png" alt="application osx "/><em>application_osx.png</em></td>
+		<td><img src="icons/application_osx_terminal.png" title="application_osx_terminal.png" alt="application osx terminal "/><em>application_osx_terminal.png</em></td>
+		<td><img src="icons/application_put.png" title="application_put.png" alt="application put "/><em>application_put.png</em></td>
+	</tr>
+
+	<tr>
+		<td><img src="icons/application_side_boxes.png" title="application_side_boxes.png" alt="application side boxes "/><em>application_side_boxes.png</em></td>
+		<td><img src="icons/application_side_contract.png" title="application_side_contract.png" alt="application side contract "/><em>application_side_contract.png</em></td>
+		<td><img src="icons/application_side_expand.png" title="application_side_expand.png" alt="application side expand "/><em>application_side_expand.png</em></td>
+		<td><img src="icons/application_side_list.png" title="application_side_list.png" alt="application side list "/><em>application_side_list.png</em></td>
+		<td><img src="icons/application_side_tree.png" title="application_side_tree.png" alt="application side tree "/><em>application_side_tree.png</em></td>
+
+		<td><img src="icons/application_split.png" title="application_split.png" alt="application split "/><em>application_split.png</em></td>
+		<td><img src="icons/application_tile_horizontal.png" title="application_tile_horizontal.png" alt="application tile horizontal "/><em>application_tile_horizontal.png</em></td>
+		<td><img src="icons/application_tile_vertical.png" title="application_tile_vertical.png" alt="application tile vertical "/><em>application_tile_vertical.png</em></td>
+		<td><img src="icons/application_view_columns.png" title="application_view_columns.png" alt="application view columns "/><em>application_view_columns.png</em></td>
+		<td><img src="icons/application_view_detail.png" title="application_view_detail.png" alt="application view detail "/><em>application_view_detail.png</em></td>
+		<td><img src="icons/application_view_gallery.png" title="application_view_gallery.png" alt="application view gallery "/><em>application_view_gallery.png</em></td>
+
+		<td><img src="icons/application_view_icons.png" title="application_view_icons.png" alt="application view icons "/><em>application_view_icons.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/application_view_list.png" title="application_view_list.png" alt="application view list "/><em>application_view_list.png</em></td>
+		<td><img src="icons/application_view_tile.png" title="application_view_tile.png" alt="application view tile "/><em>application_view_tile.png</em></td>
+		<td><img src="icons/application_xp.png" title="application_xp.png" alt="application xp "/><em>application_xp.png</em></td>
+		<td><img src="icons/application_xp_terminal.png" title="application_xp_terminal.png" alt="application xp terminal "/><em>application_xp_terminal.png</em></td>
+
+		<td><img src="icons/arrow_branch.png" title="arrow_branch.png" alt="arrow branch "/><em>arrow_branch.png</em></td>
+		<td><img src="icons/arrow_divide.png" title="arrow_divide.png" alt="arrow divide "/><em>arrow_divide.png</em></td>
+		<td><img src="icons/arrow_down.png" title="arrow_down.png" alt="arrow down "/><em>arrow_down.png</em></td>
+		<td><img src="icons/arrow_in.png" title="arrow_in.png" alt="arrow in "/><em>arrow_in.png</em></td>
+		<td><img src="icons/arrow_inout.png" title="arrow_inout.png" alt="arrow inout "/><em>arrow_inout.png</em></td>
+		<td><img src="icons/arrow_join.png" title="arrow_join.png" alt="arrow join "/><em>arrow_join.png</em></td>
+
+		<td><img src="icons/arrow_left.png" title="arrow_left.png" alt="arrow left "/><em>arrow_left.png</em></td>
+		<td><img src="icons/arrow_merge.png" title="arrow_merge.png" alt="arrow merge "/><em>arrow_merge.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/arrow_out.png" title="arrow_out.png" alt="arrow out "/><em>arrow_out.png</em></td>
+		<td><img src="icons/arrow_redo.png" title="arrow_redo.png" alt="arrow redo "/><em>arrow_redo.png</em></td>
+		<td><img src="icons/arrow_refresh.png" title="arrow_refresh.png" alt="arrow refresh "/><em>arrow_refresh.png</em></td>
+
+		<td><img src="icons/arrow_refresh_small.png" title="arrow_refresh_small.png" alt="arrow refresh small "/><em>arrow_refresh_small.png</em></td>
+		<td><img src="icons/arrow_right.png" title="arrow_right.png" alt="arrow right "/><em>arrow_right.png</em></td>
+		<td><img src="icons/arrow_rotate_anticlockwise.png" title="arrow_rotate_anticlockwise.png" alt="arrow rotate anticlockwise "/><em>arrow_rotate_anticlockwise.png</em></td>
+		<td><img src="icons/arrow_rotate_clockwise.png" title="arrow_rotate_clockwise.png" alt="arrow rotate clockwise "/><em>arrow_rotate_clockwise.png</em></td>
+		<td><img src="icons/arrow_switch.png" title="arrow_switch.png" alt="arrow switch "/><em>arrow_switch.png</em></td>
+		<td><img src="icons/arrow_turn_left.png" title="arrow_turn_left.png" alt="arrow turn left "/><em>arrow_turn_left.png</em></td>
+
+		<td><img src="icons/arrow_turn_right.png" title="arrow_turn_right.png" alt="arrow turn right "/><em>arrow_turn_right.png</em></td>
+		<td><img src="icons/arrow_undo.png" title="arrow_undo.png" alt="arrow undo "/><em>arrow_undo.png</em></td>
+		<td><img src="icons/arrow_up.png" title="arrow_up.png" alt="arrow up "/><em>arrow_up.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/asterisk_orange.png" title="asterisk_orange.png" alt="asterisk orange "/><em>asterisk_orange.png</em></td>
+		<td><img src="icons/asterisk_yellow.png" title="asterisk_yellow.png" alt="asterisk yellow "/><em>asterisk_yellow.png</em></td>
+
+		<td><img src="icons/attach.png" title="attach.png" alt="attach "/><em>attach.png</em></td>
+		<td><img src="icons/award_star_add.png" title="award_star_add.png" alt="award star add "/><em>award_star_add.png</em></td>
+		<td><img src="icons/award_star_bronze_1.png" title="award_star_bronze_1.png" alt="award star bronze 1 "/><em>award_star_bronze_1.png</em></td>
+		<td><img src="icons/award_star_bronze_2.png" title="award_star_bronze_2.png" alt="award star bronze 2 "/><em>award_star_bronze_2.png</em></td>
+		<td><img src="icons/award_star_bronze_3.png" title="award_star_bronze_3.png" alt="award star bronze 3 "/><em>award_star_bronze_3.png</em></td>
+		<td><img src="icons/award_star_delete.png" title="award_star_delete.png" alt="award star delete "/><em>award_star_delete.png</em></td>
+
+		<td><img src="icons/award_star_gold_1.png" title="award_star_gold_1.png" alt="award star gold 1 "/><em>award_star_gold_1.png</em></td>
+		<td><img src="icons/award_star_gold_2.png" title="award_star_gold_2.png" alt="award star gold 2 "/><em>award_star_gold_2.png</em></td>
+		<td><img src="icons/award_star_gold_3.png" title="award_star_gold_3.png" alt="award star gold 3 "/><em>award_star_gold_3.png</em></td>
+		<td><img src="icons/award_star_silver_1.png" title="award_star_silver_1.png" alt="award star silver 1 "/><em>award_star_silver_1.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/award_star_silver_2.png" title="award_star_silver_2.png" alt="award star silver 2 "/><em>award_star_silver_2.png</em></td>
+
+		<td><img src="icons/award_star_silver_3.png" title="award_star_silver_3.png" alt="award star silver 3 "/><em>award_star_silver_3.png</em></td>
+		<td><img src="icons/basket.png" title="basket.png" alt="basket "/><em>basket.png</em></td>
+		<td><img src="icons/basket_add.png" title="basket_add.png" alt="basket add "/><em>basket_add.png</em></td>
+		<td><img src="icons/basket_delete.png" title="basket_delete.png" alt="basket delete "/><em>basket_delete.png</em></td>
+		<td><img src="icons/basket_edit.png" title="basket_edit.png" alt="basket edit "/><em>basket_edit.png</em></td>
+		<td><img src="icons/basket_error.png" title="basket_error.png" alt="basket error "/><em>basket_error.png</em></td>
+
+		<td><img src="icons/basket_go.png" title="basket_go.png" alt="basket go "/><em>basket_go.png</em></td>
+		<td><img src="icons/basket_put.png" title="basket_put.png" alt="basket put "/><em>basket_put.png</em></td>
+		<td><img src="icons/basket_remove.png" title="basket_remove.png" alt="basket remove "/><em>basket_remove.png</em></td>
+		<td><img src="icons/bell.png" title="bell.png" alt="bell "/><em>bell.png</em></td>
+		<td><img src="icons/bell_add.png" title="bell_add.png" alt="bell add "/><em>bell_add.png</em></td>
+	</tr>
+
+	<tr>
+		<td><img src="icons/bell_delete.png" title="bell_delete.png" alt="bell delete "/><em>bell_delete.png</em></td>
+		<td><img src="icons/bell_error.png" title="bell_error.png" alt="bell error "/><em>bell_error.png</em></td>
+		<td><img src="icons/bell_go.png" title="bell_go.png" alt="bell go "/><em>bell_go.png</em></td>
+		<td><img src="icons/bell_link.png" title="bell_link.png" alt="bell link "/><em>bell_link.png</em></td>
+		<td><img src="icons/bin.png" title="bin.png" alt="bin "/><em>bin.png</em></td>
+
+		<td><img src="icons/bin_closed.png" title="bin_closed.png" alt="bin closed "/><em>bin_closed.png</em></td>
+		<td><img src="icons/bin_empty.png" title="bin_empty.png" alt="bin empty "/><em>bin_empty.png</em></td>
+		<td><img src="icons/bomb.png" title="bomb.png" alt="bomb "/><em>bomb.png</em></td>
+		<td><img src="icons/book.png" title="book.png" alt="book "/><em>book.png</em></td>
+		<td><img src="icons/book_add.png" title="book_add.png" alt="book add "/><em>book_add.png</em></td>
+		<td><img src="icons/book_addresses.png" title="book_addresses.png" alt="book addresses "/><em>book_addresses.png</em></td>
+
+		<td><img src="icons/book_delete.png" title="book_delete.png" alt="book delete "/><em>book_delete.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/book_edit.png" title="book_edit.png" alt="book edit "/><em>book_edit.png</em></td>
+		<td><img src="icons/book_error.png" title="book_error.png" alt="book error "/><em>book_error.png</em></td>
+		<td><img src="icons/book_go.png" title="book_go.png" alt="book go "/><em>book_go.png</em></td>
+		<td><img src="icons/book_key.png" title="book_key.png" alt="book key "/><em>book_key.png</em></td>
+
+		<td><img src="icons/book_link.png" title="book_link.png" alt="book link "/><em>book_link.png</em></td>
+		<td><img src="icons/book_next.png" title="book_next.png" alt="book next "/><em>book_next.png</em></td>
+		<td><img src="icons/book_open.png" title="book_open.png" alt="book open "/><em>book_open.png</em></td>
+		<td><img src="icons/book_previous.png" title="book_previous.png" alt="book previous "/><em>book_previous.png</em></td>
+		<td><img src="icons/box.png" title="box.png" alt="box "/><em>box.png</em></td>
+		<td><img src="icons/brick.png" title="brick.png" alt="brick "/><em>brick.png</em></td>
+
+		<td><img src="icons/brick_add.png" title="brick_add.png" alt="brick add "/><em>brick_add.png</em></td>
+		<td><img src="icons/brick_delete.png" title="brick_delete.png" alt="brick delete "/><em>brick_delete.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/brick_edit.png" title="brick_edit.png" alt="brick edit "/><em>brick_edit.png</em></td>
+		<td><img src="icons/brick_error.png" title="brick_error.png" alt="brick error "/><em>brick_error.png</em></td>
+		<td><img src="icons/brick_go.png" title="brick_go.png" alt="brick go "/><em>brick_go.png</em></td>
+
+		<td><img src="icons/brick_link.png" title="brick_link.png" alt="brick link "/><em>brick_link.png</em></td>
+		<td><img src="icons/bricks.png" title="bricks.png" alt="bricks "/><em>bricks.png</em></td>
+		<td><img src="icons/briefcase.png" title="briefcase.png" alt="briefcase "/><em>briefcase.png</em></td>
+		<td><img src="icons/bug.png" title="bug.png" alt="bug "/><em>bug.png</em></td>
+		<td><img src="icons/bug_add.png" title="bug_add.png" alt="bug add "/><em>bug_add.png</em></td>
+		<td><img src="icons/bug_delete.png" title="bug_delete.png" alt="bug delete "/><em>bug_delete.png</em></td>
+
+		<td><img src="icons/bug_edit.png" title="bug_edit.png" alt="bug edit "/><em>bug_edit.png</em></td>
+		<td><img src="icons/bug_error.png" title="bug_error.png" alt="bug error "/><em>bug_error.png</em></td>
+		<td><img src="icons/bug_go.png" title="bug_go.png" alt="bug go "/><em>bug_go.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/bug_link.png" title="bug_link.png" alt="bug link "/><em>bug_link.png</em></td>
+		<td><img src="icons/building.png" title="building.png" alt="building "/><em>building.png</em></td>
+
+		<td><img src="icons/building_add.png" title="building_add.png" alt="building add "/><em>building_add.png</em></td>
+		<td><img src="icons/building_delete.png" title="building_delete.png" alt="building delete "/><em>building_delete.png</em></td>
+		<td><img src="icons/building_edit.png" title="building_edit.png" alt="building edit "/><em>building_edit.png</em></td>
+		<td><img src="icons/building_error.png" title="building_error.png" alt="building error "/><em>building_error.png</em></td>
+		<td><img src="icons/building_go.png" title="building_go.png" alt="building go "/><em>building_go.png</em></td>
+		<td><img src="icons/building_key.png" title="building_key.png" alt="building key "/><em>building_key.png</em></td>
+
+		<td><img src="icons/building_link.png" title="building_link.png" alt="building link "/><em>building_link.png</em></td>
+		<td><img src="icons/bullet_add.png" title="bullet_add.png" alt="bullet add "/><em>bullet_add.png</em></td>
+		<td><img src="icons/bullet_arrow_bottom.png" title="bullet_arrow_bottom.png" alt="bullet arrow bottom "/><em>bullet_arrow_bottom.png</em></td>
+		<td><img src="icons/bullet_arrow_down.png" title="bullet_arrow_down.png" alt="bullet arrow down "/><em>bullet_arrow_down.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/bullet_arrow_top.png" title="bullet_arrow_top.png" alt="bullet arrow top "/><em>bullet_arrow_top.png</em></td>
+
+		<td><img src="icons/bullet_arrow_up.png" title="bullet_arrow_up.png" alt="bullet arrow up "/><em>bullet_arrow_up.png</em></td>
+		<td><img src="icons/bullet_black.png" title="bullet_black.png" alt="bullet black "/><em>bullet_black.png</em></td>
+		<td><img src="icons/bullet_blue.png" title="bullet_blue.png" alt="bullet blue "/><em>bullet_blue.png</em></td>
+		<td><img src="icons/bullet_delete.png" title="bullet_delete.png" alt="bullet delete "/><em>bullet_delete.png</em></td>
+		<td><img src="icons/bullet_disk.png" title="bullet_disk.png" alt="bullet disk "/><em>bullet_disk.png</em></td>
+		<td><img src="icons/bullet_error.png" title="bullet_error.png" alt="bullet error "/><em>bullet_error.png</em></td>
+
+		<td><img src="icons/bullet_feed.png" title="bullet_feed.png" alt="bullet feed "/><em>bullet_feed.png</em></td>
+		<td><img src="icons/bullet_go.png" title="bullet_go.png" alt="bullet go "/><em>bullet_go.png</em></td>
+		<td><img src="icons/bullet_green.png" title="bullet_green.png" alt="bullet green "/><em>bullet_green.png</em></td>
+		<td><img src="icons/bullet_key.png" title="bullet_key.png" alt="bullet key "/><em>bullet_key.png</em></td>
+		<td><img src="icons/bullet_orange.png" title="bullet_orange.png" alt="bullet orange "/><em>bullet_orange.png</em></td>
+	</tr>
+
+	<tr>
+		<td><img src="icons/bullet_picture.png" title="bullet_picture.png" alt="bullet picture "/><em>bullet_picture.png</em></td>
+		<td><img src="icons/bullet_pink.png" title="bullet_pink.png" alt="bullet pink "/><em>bullet_pink.png</em></td>
+		<td><img src="icons/bullet_purple.png" title="bullet_purple.png" alt="bullet purple "/><em>bullet_purple.png</em></td>
+		<td><img src="icons/bullet_red.png" title="bullet_red.png" alt="bullet red "/><em>bullet_red.png</em></td>
+		<td><img src="icons/bullet_star.png" title="bullet_star.png" alt="bullet star "/><em>bullet_star.png</em></td>
+
+		<td><img src="icons/bullet_toggle_minus.png" title="bullet_toggle_minus.png" alt="bullet toggle minus "/><em>bullet_toggle_minus.png</em></td>
+		<td><img src="icons/bullet_toggle_plus.png" title="bullet_toggle_plus.png" alt="bullet toggle plus "/><em>bullet_toggle_plus.png</em></td>
+		<td><img src="icons/bullet_white.png" title="bullet_white.png" alt="bullet white "/><em>bullet_white.png</em></td>
+		<td><img src="icons/bullet_wrench.png" title="bullet_wrench.png" alt="bullet wrench "/><em>bullet_wrench.png</em></td>
+		<td><img src="icons/bullet_yellow.png" title="bullet_yellow.png" alt="bullet yellow "/><em>bullet_yellow.png</em></td>
+		<td><img src="icons/cake.png" title="cake.png" alt="cake "/><em>cake.png</em></td>
+
+		<td><img src="icons/calculator.png" title="calculator.png" alt="calculator "/><em>calculator.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/calculator_add.png" title="calculator_add.png" alt="calculator add "/><em>calculator_add.png</em></td>
+		<td><img src="icons/calculator_delete.png" title="calculator_delete.png" alt="calculator delete "/><em>calculator_delete.png</em></td>
+		<td><img src="icons/calculator_edit.png" title="calculator_edit.png" alt="calculator edit "/><em>calculator_edit.png</em></td>
+		<td><img src="icons/calculator_error.png" title="calculator_error.png" alt="calculator error "/><em>calculator_error.png</em></td>
+
+		<td><img src="icons/calculator_link.png" title="calculator_link.png" alt="calculator link "/><em>calculator_link.png</em></td>
+		<td><img src="icons/calendar.png" title="calendar.png" alt="calendar "/><em>calendar.png</em></td>
+		<td><img src="icons/calendar_add.png" title="calendar_add.png" alt="calendar add "/><em>calendar_add.png</em></td>
+		<td><img src="icons/calendar_delete.png" title="calendar_delete.png" alt="calendar delete "/><em>calendar_delete.png</em></td>
+		<td><img src="icons/calendar_edit.png" title="calendar_edit.png" alt="calendar edit "/><em>calendar_edit.png</em></td>
+		<td><img src="icons/calendar_link.png" title="calendar_link.png" alt="calendar link "/><em>calendar_link.png</em></td>
+
+		<td><img src="icons/calendar_view_day.png" title="calendar_view_day.png" alt="calendar view day "/><em>calendar_view_day.png</em></td>
+		<td><img src="icons/calendar_view_month.png" title="calendar_view_month.png" alt="calendar view month "/><em>calendar_view_month.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/calendar_view_week.png" title="calendar_view_week.png" alt="calendar view week "/><em>calendar_view_week.png</em></td>
+		<td><img src="icons/camera.png" title="camera.png" alt="camera "/><em>camera.png</em></td>
+		<td><img src="icons/camera_add.png" title="camera_add.png" alt="camera add "/><em>camera_add.png</em></td>
+
+		<td><img src="icons/camera_delete.png" title="camera_delete.png" alt="camera delete "/><em>camera_delete.png</em></td>
+		<td><img src="icons/camera_edit.png" title="camera_edit.png" alt="camera edit "/><em>camera_edit.png</em></td>
+		<td><img src="icons/camera_error.png" title="camera_error.png" alt="camera error "/><em>camera_error.png</em></td>
+		<td><img src="icons/camera_go.png" title="camera_go.png" alt="camera go "/><em>camera_go.png</em></td>
+		<td><img src="icons/camera_link.png" title="camera_link.png" alt="camera link "/><em>camera_link.png</em></td>
+		<td><img src="icons/camera_small.png" title="camera_small.png" alt="camera small "/><em>camera_small.png</em></td>
+
+		<td><img src="icons/cancel.png" title="cancel.png" alt="cancel "/><em>cancel.png</em></td>
+		<td><img src="icons/car.png" title="car.png" alt="car "/><em>car.png</em></td>
+		<td><img src="icons/car_add.png" title="car_add.png" alt="car add "/><em>car_add.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/car_delete.png" title="car_delete.png" alt="car delete "/><em>car_delete.png</em></td>
+		<td><img src="icons/cart.png" title="cart.png" alt="cart "/><em>cart.png</em></td>
+
+		<td><img src="icons/cart_add.png" title="cart_add.png" alt="cart add "/><em>cart_add.png</em></td>
+		<td><img src="icons/cart_delete.png" title="cart_delete.png" alt="cart delete "/><em>cart_delete.png</em></td>
+		<td><img src="icons/cart_edit.png" title="cart_edit.png" alt="cart edit "/><em>cart_edit.png</em></td>
+		<td><img src="icons/cart_error.png" title="cart_error.png" alt="cart error "/><em>cart_error.png</em></td>
+		<td><img src="icons/cart_go.png" title="cart_go.png" alt="cart go "/><em>cart_go.png</em></td>
+		<td><img src="icons/cart_put.png" title="cart_put.png" alt="cart put "/><em>cart_put.png</em></td>
+
+		<td><img src="icons/cart_remove.png" title="cart_remove.png" alt="cart remove "/><em>cart_remove.png</em></td>
+		<td><img src="icons/cd.png" title="cd.png" alt="cd "/><em>cd.png</em></td>
+		<td><img src="icons/cd_add.png" title="cd_add.png" alt="cd add "/><em>cd_add.png</em></td>
+		<td><img src="icons/cd_burn.png" title="cd_burn.png" alt="cd burn "/><em>cd_burn.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/cd_delete.png" title="cd_delete.png" alt="cd delete "/><em>cd_delete.png</em></td>
+
+		<td><img src="icons/cd_edit.png" title="cd_edit.png" alt="cd edit "/><em>cd_edit.png</em></td>
+		<td><img src="icons/cd_eject.png" title="cd_eject.png" alt="cd eject "/><em>cd_eject.png</em></td>
+		<td><img src="icons/cd_go.png" title="cd_go.png" alt="cd go "/><em>cd_go.png</em></td>
+		<td><img src="icons/chart_bar.png" title="chart_bar.png" alt="chart bar "/><em>chart_bar.png</em></td>
+		<td><img src="icons/chart_bar_add.png" title="chart_bar_add.png" alt="chart bar add "/><em>chart_bar_add.png</em></td>
+		<td><img src="icons/chart_bar_delete.png" title="chart_bar_delete.png" alt="chart bar delete "/><em>chart_bar_delete.png</em></td>
+
+		<td><img src="icons/chart_bar_edit.png" title="chart_bar_edit.png" alt="chart bar edit "/><em>chart_bar_edit.png</em></td>
+		<td><img src="icons/chart_bar_error.png" title="chart_bar_error.png" alt="chart bar error "/><em>chart_bar_error.png</em></td>
+		<td><img src="icons/chart_bar_link.png" title="chart_bar_link.png" alt="chart bar link "/><em>chart_bar_link.png</em></td>
+		<td><img src="icons/chart_curve.png" title="chart_curve.png" alt="chart curve "/><em>chart_curve.png</em></td>
+		<td><img src="icons/chart_curve_add.png" title="chart_curve_add.png" alt="chart curve add "/><em>chart_curve_add.png</em></td>
+	</tr>
+
+	<tr>
+		<td><img src="icons/chart_curve_delete.png" title="chart_curve_delete.png" alt="chart curve delete "/><em>chart_curve_delete.png</em></td>
+		<td><img src="icons/chart_curve_edit.png" title="chart_curve_edit.png" alt="chart curve edit "/><em>chart_curve_edit.png</em></td>
+		<td><img src="icons/chart_curve_error.png" title="chart_curve_error.png" alt="chart curve error "/><em>chart_curve_error.png</em></td>
+		<td><img src="icons/chart_curve_go.png" title="chart_curve_go.png" alt="chart curve go "/><em>chart_curve_go.png</em></td>
+		<td><img src="icons/chart_curve_link.png" title="chart_curve_link.png" alt="chart curve link "/><em>chart_curve_link.png</em></td>
+
+		<td><img src="icons/chart_line.png" title="chart_line.png" alt="chart line "/><em>chart_line.png</em></td>
+		<td><img src="icons/chart_line_add.png" title="chart_line_add.png" alt="chart line add "/><em>chart_line_add.png</em></td>
+		<td><img src="icons/chart_line_delete.png" title="chart_line_delete.png" alt="chart line delete "/><em>chart_line_delete.png</em></td>
+		<td><img src="icons/chart_line_edit.png" title="chart_line_edit.png" alt="chart line edit "/><em>chart_line_edit.png</em></td>
+		<td><img src="icons/chart_line_error.png" title="chart_line_error.png" alt="chart line error "/><em>chart_line_error.png</em></td>
+		<td><img src="icons/chart_line_link.png" title="chart_line_link.png" alt="chart line link "/><em>chart_line_link.png</em></td>
+
+		<td><img src="icons/chart_organisation.png" title="chart_organisation.png" alt="chart organisation "/><em>chart_organisation.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/chart_organisation_add.png" title="chart_organisation_add.png" alt="chart organisation add "/><em>chart_organisation_add.png</em></td>
+		<td><img src="icons/chart_organisation_delete.png" title="chart_organisation_delete.png" alt="chart organisation delete "/><em>chart_organisation_delete.png</em></td>
+		<td><img src="icons/chart_pie.png" title="chart_pie.png" alt="chart pie "/><em>chart_pie.png</em></td>
+		<td><img src="icons/chart_pie_add.png" title="chart_pie_add.png" alt="chart pie add "/><em>chart_pie_add.png</em></td>
+
+		<td><img src="icons/chart_pie_delete.png" title="chart_pie_delete.png" alt="chart pie delete "/><em>chart_pie_delete.png</em></td>
+		<td><img src="icons/chart_pie_edit.png" title="chart_pie_edit.png" alt="chart pie edit "/><em>chart_pie_edit.png</em></td>
+		<td><img src="icons/chart_pie_error.png" title="chart_pie_error.png" alt="chart pie error "/><em>chart_pie_error.png</em></td>
+		<td><img src="icons/chart_pie_link.png" title="chart_pie_link.png" alt="chart pie link "/><em>chart_pie_link.png</em></td>
+		<td><img src="icons/clock.png" title="clock.png" alt="clock "/><em>clock.png</em></td>
+		<td><img src="icons/clock_add.png" title="clock_add.png" alt="clock add "/><em>clock_add.png</em></td>
+
+		<td><img src="icons/clock_delete.png" title="clock_delete.png" alt="clock delete "/><em>clock_delete.png</em></td>
+		<td><img src="icons/clock_edit.png" title="clock_edit.png" alt="clock edit "/><em>clock_edit.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/clock_error.png" title="clock_error.png" alt="clock error "/><em>clock_error.png</em></td>
+		<td><img src="icons/clock_go.png" title="clock_go.png" alt="clock go "/><em>clock_go.png</em></td>
+		<td><img src="icons/clock_link.png" title="clock_link.png" alt="clock link "/><em>clock_link.png</em></td>
+
+		<td><img src="icons/clock_pause.png" title="clock_pause.png" alt="clock pause "/><em>clock_pause.png</em></td>
+		<td><img src="icons/clock_play.png" title="clock_play.png" alt="clock play "/><em>clock_play.png</em></td>
+		<td><img src="icons/clock_red.png" title="clock_red.png" alt="clock red "/><em>clock_red.png</em></td>
+		<td><img src="icons/clock_stop.png" title="clock_stop.png" alt="clock stop "/><em>clock_stop.png</em></td>
+		<td><img src="icons/cog.png" title="cog.png" alt="cog "/><em>cog.png</em></td>
+		<td><img src="icons/cog_add.png" title="cog_add.png" alt="cog add "/><em>cog_add.png</em></td>
+
+		<td><img src="icons/cog_delete.png" title="cog_delete.png" alt="cog delete "/><em>cog_delete.png</em></td>
+		<td><img src="icons/cog_edit.png" title="cog_edit.png" alt="cog edit "/><em>cog_edit.png</em></td>
+		<td><img src="icons/cog_error.png" title="cog_error.png" alt="cog error "/><em>cog_error.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/cog_go.png" title="cog_go.png" alt="cog go "/><em>cog_go.png</em></td>
+		<td><img src="icons/coins.png" title="coins.png" alt="coins "/><em>coins.png</em></td>
+
+		<td><img src="icons/coins_add.png" title="coins_add.png" alt="coins add "/><em>coins_add.png</em></td>
+		<td><img src="icons/coins_delete.png" title="coins_delete.png" alt="coins delete "/><em>coins_delete.png</em></td>
+		<td><img src="icons/color_swatch.png" title="color_swatch.png" alt="color swatch "/><em>color_swatch.png</em></td>
+		<td><img src="icons/color_wheel.png" title="color_wheel.png" alt="color wheel "/><em>color_wheel.png</em></td>
+		<td><img src="icons/comment.png" title="comment.png" alt="comment "/><em>comment.png</em></td>
+		<td><img src="icons/comment_add.png" title="comment_add.png" alt="comment add "/><em>comment_add.png</em></td>
+
+		<td><img src="icons/comment_delete.png" title="comment_delete.png" alt="comment delete "/><em>comment_delete.png</em></td>
+		<td><img src="icons/comment_edit.png" title="comment_edit.png" alt="comment edit "/><em>comment_edit.png</em></td>
+		<td><img src="icons/comments.png" title="comments.png" alt="comments "/><em>comments.png</em></td>
+		<td><img src="icons/comments_add.png" title="comments_add.png" alt="comments add "/><em>comments_add.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/comments_delete.png" title="comments_delete.png" alt="comments delete "/><em>comments_delete.png</em></td>
+
+		<td><img src="icons/compress.png" title="compress.png" alt="compress "/><em>compress.png</em></td>
+		<td><img src="icons/computer.png" title="computer.png" alt="computer "/><em>computer.png</em></td>
+		<td><img src="icons/computer_add.png" title="computer_add.png" alt="computer add "/><em>computer_add.png</em></td>
+		<td><img src="icons/computer_delete.png" title="computer_delete.png" alt="computer delete "/><em>computer_delete.png</em></td>
+		<td><img src="icons/computer_edit.png" title="computer_edit.png" alt="computer edit "/><em>computer_edit.png</em></td>
+		<td><img src="icons/computer_error.png" title="computer_error.png" alt="computer error "/><em>computer_error.png</em></td>
+
+		<td><img src="icons/computer_go.png" title="computer_go.png" alt="computer go "/><em>computer_go.png</em></td>
+		<td><img src="icons/computer_key.png" title="computer_key.png" alt="computer key "/><em>computer_key.png</em></td>
+		<td><img src="icons/computer_link.png" title="computer_link.png" alt="computer link "/><em>computer_link.png</em></td>
+		<td><img src="icons/connect.png" title="connect.png" alt="connect "/><em>connect.png</em></td>
+		<td><img src="icons/contrast.png" title="contrast.png" alt="contrast "/><em>contrast.png</em></td>
+	</tr>
+
+	<tr>
+		<td><img src="icons/contrast_decrease.png" title="contrast_decrease.png" alt="contrast decrease "/><em>contrast_decrease.png</em></td>
+		<td><img src="icons/contrast_high.png" title="contrast_high.png" alt="contrast high "/><em>contrast_high.png</em></td>
+		<td><img src="icons/contrast_increase.png" title="contrast_increase.png" alt="contrast increase "/><em>contrast_increase.png</em></td>
+		<td><img src="icons/contrast_low.png" title="contrast_low.png" alt="contrast low "/><em>contrast_low.png</em></td>
+		<td><img src="icons/control_eject.png" title="control_eject.png" alt="control eject "/><em>control_eject.png</em></td>
+
+		<td><img src="icons/control_eject_blue.png" title="control_eject_blue.png" alt="control eject blue "/><em>control_eject_blue.png</em></td>
+		<td><img src="icons/control_end.png" title="control_end.png" alt="control end "/><em>control_end.png</em></td>
+		<td><img src="icons/control_end_blue.png" title="control_end_blue.png" alt="control end blue "/><em>control_end_blue.png</em></td>
+		<td><img src="icons/control_equalizer.png" title="control_equalizer.png" alt="control equalizer "/><em>control_equalizer.png</em></td>
+		<td><img src="icons/control_equalizer_blue.png" title="control_equalizer_blue.png" alt="control equalizer blue "/><em>control_equalizer_blue.png</em></td>
+		<td><img src="icons/control_fastforward.png" title="control_fastforward.png" alt="control fastforward "/><em>control_fastforward.png</em></td>
+
+		<td><img src="icons/control_fastforward_blue.png" title="control_fastforward_blue.png" alt="control fastforward blue "/><em>control_fastforward_blue.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/control_pause.png" title="control_pause.png" alt="control pause "/><em>control_pause.png</em></td>
+		<td><img src="icons/control_pause_blue.png" title="control_pause_blue.png" alt="control pause blue "/><em>control_pause_blue.png</em></td>
+		<td><img src="icons/control_play.png" title="control_play.png" alt="control play "/><em>control_play.png</em></td>
+		<td><img src="icons/control_play_blue.png" title="control_play_blue.png" alt="control play blue "/><em>control_play_blue.png</em></td>
+
+		<td><img src="icons/control_repeat.png" title="control_repeat.png" alt="control repeat "/><em>control_repeat.png</em></td>
+		<td><img src="icons/control_repeat_blue.png" title="control_repeat_blue.png" alt="control repeat blue "/><em>control_repeat_blue.png</em></td>
+		<td><img src="icons/control_rewind.png" title="control_rewind.png" alt="control rewind "/><em>control_rewind.png</em></td>
+		<td><img src="icons/control_rewind_blue.png" title="control_rewind_blue.png" alt="control rewind blue "/><em>control_rewind_blue.png</em></td>
+		<td><img src="icons/control_start.png" title="control_start.png" alt="control start "/><em>control_start.png</em></td>
+		<td><img src="icons/control_start_blue.png" title="control_start_blue.png" alt="control start blue "/><em>control_start_blue.png</em></td>
+
+		<td><img src="icons/control_stop.png" title="control_stop.png" alt="control stop "/><em>control_stop.png</em></td>
+		<td><img src="icons/control_stop_blue.png" title="control_stop_blue.png" alt="control stop blue "/><em>control_stop_blue.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/controller.png" title="controller.png" alt="controller "/><em>controller.png</em></td>
+		<td><img src="icons/controller_add.png" title="controller_add.png" alt="controller add "/><em>controller_add.png</em></td>
+		<td><img src="icons/controller_delete.png" title="controller_delete.png" alt="controller delete "/><em>controller_delete.png</em></td>
+
+		<td><img src="icons/controller_error.png" title="controller_error.png" alt="controller error "/><em>controller_error.png</em></td>
+		<td><img src="icons/creditcards.png" title="creditcards.png" alt="creditcards "/><em>creditcards.png</em></td>
+		<td><img src="icons/cross.png" title="cross.png" alt="cross "/><em>cross.png</em></td>
+		<td><img src="icons/css.png" title="css.png" alt="css "/><em>css.png</em></td>
+		<td><img src="icons/css_add.png" title="css_add.png" alt="css add "/><em>css_add.png</em></td>
+		<td><img src="icons/css_delete.png" title="css_delete.png" alt="css delete "/><em>css_delete.png</em></td>
+
+		<td><img src="icons/css_go.png" title="css_go.png" alt="css go "/><em>css_go.png</em></td>
+		<td><img src="icons/css_valid.png" title="css_valid.png" alt="css valid "/><em>css_valid.png</em></td>
+		<td><img src="icons/cup.png" title="cup.png" alt="cup "/><em>cup.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/cup_add.png" title="cup_add.png" alt="cup add "/><em>cup_add.png</em></td>
+		<td><img src="icons/cup_delete.png" title="cup_delete.png" alt="cup delete "/><em>cup_delete.png</em></td>
+
+		<td><img src="icons/cup_edit.png" title="cup_edit.png" alt="cup edit "/><em>cup_edit.png</em></td>
+		<td><img src="icons/cup_error.png" title="cup_error.png" alt="cup error "/><em>cup_error.png</em></td>
+		<td><img src="icons/cup_go.png" title="cup_go.png" alt="cup go "/><em>cup_go.png</em></td>
+		<td><img src="icons/cup_key.png" title="cup_key.png" alt="cup key "/><em>cup_key.png</em></td>
+		<td><img src="icons/cup_link.png" title="cup_link.png" alt="cup link "/><em>cup_link.png</em></td>
+		<td><img src="icons/cursor.png" title="cursor.png" alt="cursor "/><em>cursor.png</em></td>
+
+		<td><img src="icons/cut.png" title="cut.png" alt="cut "/><em>cut.png</em></td>
+		<td><img src="icons/cut_red.png" title="cut_red.png" alt="cut red "/><em>cut_red.png</em></td>
+		<td><img src="icons/database.png" title="database.png" alt="database "/><em>database.png</em></td>
+		<td><img src="icons/database_add.png" title="database_add.png" alt="database add "/><em>database_add.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/database_connect.png" title="database_connect.png" alt="database connect "/><em>database_connect.png</em></td>
+
+		<td><img src="icons/database_delete.png" title="database_delete.png" alt="database delete "/><em>database_delete.png</em></td>
+		<td><img src="icons/database_edit.png" title="database_edit.png" alt="database edit "/><em>database_edit.png</em></td>
+		<td><img src="icons/database_error.png" title="database_error.png" alt="database error "/><em>database_error.png</em></td>
+		<td><img src="icons/database_gear.png" title="database_gear.png" alt="database gear "/><em>database_gear.png</em></td>
+		<td><img src="icons/database_go.png" title="database_go.png" alt="database go "/><em>database_go.png</em></td>
+		<td><img src="icons/database_key.png" title="database_key.png" alt="database key "/><em>database_key.png</em></td>
+
+		<td><img src="icons/database_lightning.png" title="database_lightning.png" alt="database lightning "/><em>database_lightning.png</em></td>
+		<td><img src="icons/database_link.png" title="database_link.png" alt="database link "/><em>database_link.png</em></td>
+		<td><img src="icons/database_refresh.png" title="database_refresh.png" alt="database refresh "/><em>database_refresh.png</em></td>
+		<td><img src="icons/database_save.png" title="database_save.png" alt="database save "/><em>database_save.png</em></td>
+		<td><img src="icons/database_table.png" title="database_table.png" alt="database table "/><em>database_table.png</em></td>
+	</tr>
+
+	<tr>
+		<td><img src="icons/date.png" title="date.png" alt="date "/><em>date.png</em></td>
+		<td><img src="icons/date_add.png" title="date_add.png" alt="date add "/><em>date_add.png</em></td>
+		<td><img src="icons/date_delete.png" title="date_delete.png" alt="date delete "/><em>date_delete.png</em></td>
+		<td><img src="icons/date_edit.png" title="date_edit.png" alt="date edit "/><em>date_edit.png</em></td>
+		<td><img src="icons/date_error.png" title="date_error.png" alt="date error "/><em>date_error.png</em></td>
+
+		<td><img src="icons/date_go.png" title="date_go.png" alt="date go "/><em>date_go.png</em></td>
+		<td><img src="icons/date_link.png" title="date_link.png" alt="date link "/><em>date_link.png</em></td>
+		<td><img src="icons/date_magnify.png" title="date_magnify.png" alt="date magnify "/><em>date_magnify.png</em></td>
+		<td><img src="icons/date_next.png" title="date_next.png" alt="date next "/><em>date_next.png</em></td>
+		<td><img src="icons/date_previous.png" title="date_previous.png" alt="date previous "/><em>date_previous.png</em></td>
+		<td><img src="icons/delete.png" title="delete.png" alt="delete "/><em>delete.png</em></td>
+
+		<td><img src="icons/disconnect.png" title="disconnect.png" alt="disconnect "/><em>disconnect.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/disk.png" title="disk.png" alt="disk "/><em>disk.png</em></td>
+		<td><img src="icons/disk_multiple.png" title="disk_multiple.png" alt="disk multiple "/><em>disk_multiple.png</em></td>
+		<td><img src="icons/door.png" title="door.png" alt="door "/><em>door.png</em></td>
+		<td><img src="icons/door_in.png" title="door_in.png" alt="door in "/><em>door_in.png</em></td>
+
+		<td><img src="icons/door_open.png" title="door_open.png" alt="door open "/><em>door_open.png</em></td>
+		<td><img src="icons/door_out.png" title="door_out.png" alt="door out "/><em>door_out.png</em></td>
+		<td><img src="icons/drink.png" title="drink.png" alt="drink "/><em>drink.png</em></td>
+		<td><img src="icons/drink_empty.png" title="drink_empty.png" alt="drink empty "/><em>drink_empty.png</em></td>
+		<td><img src="icons/drive.png" title="drive.png" alt="drive "/><em>drive.png</em></td>
+		<td><img src="icons/drive_add.png" title="drive_add.png" alt="drive add "/><em>drive_add.png</em></td>
+
+		<td><img src="icons/drive_burn.png" title="drive_burn.png" alt="drive burn "/><em>drive_burn.png</em></td>
+		<td><img src="icons/drive_cd.png" title="drive_cd.png" alt="drive cd "/><em>drive_cd.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/drive_cd_empty.png" title="drive_cd_empty.png" alt="drive cd empty "/><em>drive_cd_empty.png</em></td>
+		<td><img src="icons/drive_delete.png" title="drive_delete.png" alt="drive delete "/><em>drive_delete.png</em></td>
+		<td><img src="icons/drive_disk.png" title="drive_disk.png" alt="drive disk "/><em>drive_disk.png</em></td>
+
+		<td><img src="icons/drive_edit.png" title="drive_edit.png" alt="drive edit "/><em>drive_edit.png</em></td>
+		<td><img src="icons/drive_error.png" title="drive_error.png" alt="drive error "/><em>drive_error.png</em></td>
+		<td><img src="icons/drive_go.png" title="drive_go.png" alt="drive go "/><em>drive_go.png</em></td>
+		<td><img src="icons/drive_key.png" title="drive_key.png" alt="drive key "/><em>drive_key.png</em></td>
+		<td><img src="icons/drive_link.png" title="drive_link.png" alt="drive link "/><em>drive_link.png</em></td>
+		<td><img src="icons/drive_magnify.png" title="drive_magnify.png" alt="drive magnify "/><em>drive_magnify.png</em></td>
+
+		<td><img src="icons/drive_network.png" title="drive_network.png" alt="drive network "/><em>drive_network.png</em></td>
+		<td><img src="icons/drive_rename.png" title="drive_rename.png" alt="drive rename "/><em>drive_rename.png</em></td>
+		<td><img src="icons/drive_user.png" title="drive_user.png" alt="drive user "/><em>drive_user.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/drive_web.png" title="drive_web.png" alt="drive web "/><em>drive_web.png</em></td>
+		<td><img src="icons/dvd.png" title="dvd.png" alt="dvd "/><em>dvd.png</em></td>
+
+		<td><img src="icons/dvd_add.png" title="dvd_add.png" alt="dvd add "/><em>dvd_add.png</em></td>
+		<td><img src="icons/dvd_delete.png" title="dvd_delete.png" alt="dvd delete "/><em>dvd_delete.png</em></td>
+		<td><img src="icons/dvd_edit.png" title="dvd_edit.png" alt="dvd edit "/><em>dvd_edit.png</em></td>
+		<td><img src="icons/dvd_error.png" title="dvd_error.png" alt="dvd error "/><em>dvd_error.png</em></td>
+		<td><img src="icons/dvd_go.png" title="dvd_go.png" alt="dvd go "/><em>dvd_go.png</em></td>
+		<td><img src="icons/dvd_key.png" title="dvd_key.png" alt="dvd key "/><em>dvd_key.png</em></td>
+
+		<td><img src="icons/dvd_link.png" title="dvd_link.png" alt="dvd link "/><em>dvd_link.png</em></td>
+		<td><img src="icons/email.png" title="email.png" alt="email "/><em>email.png</em></td>
+		<td><img src="icons/email_add.png" title="email_add.png" alt="email add "/><em>email_add.png</em></td>
+		<td><img src="icons/email_attach.png" title="email_attach.png" alt="email attach "/><em>email_attach.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/email_delete.png" title="email_delete.png" alt="email delete "/><em>email_delete.png</em></td>
+
+		<td><img src="icons/email_edit.png" title="email_edit.png" alt="email edit "/><em>email_edit.png</em></td>
+		<td><img src="icons/email_error.png" title="email_error.png" alt="email error "/><em>email_error.png</em></td>
+		<td><img src="icons/email_go.png" title="email_go.png" alt="email go "/><em>email_go.png</em></td>
+		<td><img src="icons/email_link.png" title="email_link.png" alt="email link "/><em>email_link.png</em></td>
+		<td><img src="icons/email_open.png" title="email_open.png" alt="email open "/><em>email_open.png</em></td>
+		<td><img src="icons/email_open_image.png" title="email_open_image.png" alt="email open image "/><em>email_open_image.png</em></td>
+
+		<td><img src="icons/emoticon_evilgrin.png" title="emoticon_evilgrin.png" alt="emoticon evilgrin "/><em>emoticon_evilgrin.png</em></td>
+		<td><img src="icons/emoticon_grin.png" title="emoticon_grin.png" alt="emoticon grin "/><em>emoticon_grin.png</em></td>
+		<td><img src="icons/emoticon_happy.png" title="emoticon_happy.png" alt="emoticon happy "/><em>emoticon_happy.png</em></td>
+		<td><img src="icons/emoticon_smile.png" title="emoticon_smile.png" alt="emoticon smile "/><em>emoticon_smile.png</em></td>
+		<td><img src="icons/emoticon_surprised.png" title="emoticon_surprised.png" alt="emoticon surprised "/><em>emoticon_surprised.png</em></td>
+	</tr>
+
+	<tr>
+		<td><img src="icons/emoticon_tongue.png" title="emoticon_tongue.png" alt="emoticon tongue "/><em>emoticon_tongue.png</em></td>
+		<td><img src="icons/emoticon_unhappy.png" title="emoticon_unhappy.png" alt="emoticon unhappy "/><em>emoticon_unhappy.png</em></td>
+		<td><img src="icons/emoticon_waii.png" title="emoticon_waii.png" alt="emoticon waii "/><em>emoticon_waii.png</em></td>
+		<td><img src="icons/emoticon_wink.png" title="emoticon_wink.png" alt="emoticon wink "/><em>emoticon_wink.png</em></td>
+		<td><img src="icons/error.png" title="error.png" alt="error "/><em>error.png</em></td>
+
+		<td><img src="icons/error_add.png" title="error_add.png" alt="error add "/><em>error_add.png</em></td>
+		<td><img src="icons/error_delete.png" title="error_delete.png" alt="error delete "/><em>error_delete.png</em></td>
+		<td><img src="icons/error_go.png" title="error_go.png" alt="error go "/><em>error_go.png</em></td>
+		<td><img src="icons/exclamation.png" title="exclamation.png" alt="exclamation "/><em>exclamation.png</em></td>
+		<td><img src="icons/eye.png" title="eye.png" alt="eye "/><em>eye.png</em></td>
+		<td><img src="icons/feed.png" title="feed.png" alt="feed "/><em>feed.png</em></td>
+
+		<td><img src="icons/feed_add.png" title="feed_add.png" alt="feed add "/><em>feed_add.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/feed_delete.png" title="feed_delete.png" alt="feed delete "/><em>feed_delete.png</em></td>
+		<td><img src="icons/feed_disk.png" title="feed_disk.png" alt="feed disk "/><em>feed_disk.png</em></td>
+		<td><img src="icons/feed_edit.png" title="feed_edit.png" alt="feed edit "/><em>feed_edit.png</em></td>
+		<td><img src="icons/feed_error.png" title="feed_error.png" alt="feed error "/><em>feed_error.png</em></td>
+
+		<td><img src="icons/feed_go.png" title="feed_go.png" alt="feed go "/><em>feed_go.png</em></td>
+		<td><img src="icons/feed_key.png" title="feed_key.png" alt="feed key "/><em>feed_key.png</em></td>
+		<td><img src="icons/feed_link.png" title="feed_link.png" alt="feed link "/><em>feed_link.png</em></td>
+		<td><img src="icons/feed_magnify.png" title="feed_magnify.png" alt="feed magnify "/><em>feed_magnify.png</em></td>
+		<td><img src="icons/female.png" title="female.png" alt="female "/><em>female.png</em></td>
+		<td><img src="icons/film.png" title="film.png" alt="film "/><em>film.png</em></td>
+
+		<td><img src="icons/film_add.png" title="film_add.png" alt="film add "/><em>film_add.png</em></td>
+		<td><img src="icons/film_delete.png" title="film_delete.png" alt="film delete "/><em>film_delete.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/film_edit.png" title="film_edit.png" alt="film edit "/><em>film_edit.png</em></td>
+		<td><img src="icons/film_error.png" title="film_error.png" alt="film error "/><em>film_error.png</em></td>
+		<td><img src="icons/film_go.png" title="film_go.png" alt="film go "/><em>film_go.png</em></td>
+
+		<td><img src="icons/film_key.png" title="film_key.png" alt="film key "/><em>film_key.png</em></td>
+		<td><img src="icons/film_link.png" title="film_link.png" alt="film link "/><em>film_link.png</em></td>
+		<td><img src="icons/film_save.png" title="film_save.png" alt="film save "/><em>film_save.png</em></td>
+		<td><img src="icons/find.png" title="find.png" alt="find "/><em>find.png</em></td>
+		<td><img src="icons/flag_blue.png" title="flag_blue.png" alt="flag blue "/><em>flag_blue.png</em></td>
+		<td><img src="icons/flag_green.png" title="flag_green.png" alt="flag green "/><em>flag_green.png</em></td>
+
+		<td><img src="icons/flag_orange.png" title="flag_orange.png" alt="flag orange "/><em>flag_orange.png</em></td>
+		<td><img src="icons/flag_pink.png" title="flag_pink.png" alt="flag pink "/><em>flag_pink.png</em></td>
+		<td><img src="icons/flag_purple.png" title="flag_purple.png" alt="flag purple "/><em>flag_purple.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/flag_red.png" title="flag_red.png" alt="flag red "/><em>flag_red.png</em></td>
+		<td><img src="icons/flag_yellow.png" title="flag_yellow.png" alt="flag yellow "/><em>flag_yellow.png</em></td>
+
+		<td><img src="icons/folder.png" title="folder.png" alt="folder "/><em>folder.png</em></td>
+		<td><img src="icons/folder_add.png" title="folder_add.png" alt="folder add "/><em>folder_add.png</em></td>
+		<td><img src="icons/folder_bell.png" title="folder_bell.png" alt="folder bell "/><em>folder_bell.png</em></td>
+		<td><img src="icons/folder_brick.png" title="folder_brick.png" alt="folder brick "/><em>folder_brick.png</em></td>
+		<td><img src="icons/folder_bug.png" title="folder_bug.png" alt="folder bug "/><em>folder_bug.png</em></td>
+		<td><img src="icons/folder_camera.png" title="folder_camera.png" alt="folder camera "/><em>folder_camera.png</em></td>
+
+		<td><img src="icons/folder_database.png" title="folder_database.png" alt="folder database "/><em>folder_database.png</em></td>
+		<td><img src="icons/folder_delete.png" title="folder_delete.png" alt="folder delete "/><em>folder_delete.png</em></td>
+		<td><img src="icons/folder_edit.png" title="folder_edit.png" alt="folder edit "/><em>folder_edit.png</em></td>
+		<td><img src="icons/folder_error.png" title="folder_error.png" alt="folder error "/><em>folder_error.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/folder_explore.png" title="folder_explore.png" alt="folder explore "/><em>folder_explore.png</em></td>
+
+		<td><img src="icons/folder_feed.png" title="folder_feed.png" alt="folder feed "/><em>folder_feed.png</em></td>
+		<td><img src="icons/folder_find.png" title="folder_find.png" alt="folder find "/><em>folder_find.png</em></td>
+		<td><img src="icons/folder_go.png" title="folder_go.png" alt="folder go "/><em>folder_go.png</em></td>
+		<td><img src="icons/folder_heart.png" title="folder_heart.png" alt="folder heart "/><em>folder_heart.png</em></td>
+		<td><img src="icons/folder_image.png" title="folder_image.png" alt="folder image "/><em>folder_image.png</em></td>
+		<td><img src="icons/folder_key.png" title="folder_key.png" alt="folder key "/><em>folder_key.png</em></td>
+
+		<td><img src="icons/folder_lightbulb.png" title="folder_lightbulb.png" alt="folder lightbulb "/><em>folder_lightbulb.png</em></td>
+		<td><img src="icons/folder_link.png" title="folder_link.png" alt="folder link "/><em>folder_link.png</em></td>
+		<td><img src="icons/folder_magnify.png" title="folder_magnify.png" alt="folder magnify "/><em>folder_magnify.png</em></td>
+		<td><img src="icons/folder_page.png" title="folder_page.png" alt="folder page "/><em>folder_page.png</em></td>
+		<td><img src="icons/folder_page_white.png" title="folder_page_white.png" alt="folder page white "/><em>folder_page_white.png</em></td>
+	</tr>
+
+	<tr>
+		<td><img src="icons/folder_palette.png" title="folder_palette.png" alt="folder palette "/><em>folder_palette.png</em></td>
+		<td><img src="icons/folder_picture.png" title="folder_picture.png" alt="folder picture "/><em>folder_picture.png</em></td>
+		<td><img src="icons/folder_star.png" title="folder_star.png" alt="folder star "/><em>folder_star.png</em></td>
+		<td><img src="icons/folder_table.png" title="folder_table.png" alt="folder table "/><em>folder_table.png</em></td>
+		<td><img src="icons/folder_user.png" title="folder_user.png" alt="folder user "/><em>folder_user.png</em></td>
+
+		<td><img src="icons/folder_wrench.png" title="folder_wrench.png" alt="folder wrench "/><em>folder_wrench.png</em></td>
+		<td><img src="icons/font.png" title="font.png" alt="font "/><em>font.png</em></td>
+		<td><img src="icons/font_add.png" title="font_add.png" alt="font add "/><em>font_add.png</em></td>
+		<td><img src="icons/font_delete.png" title="font_delete.png" alt="font delete "/><em>font_delete.png</em></td>
+		<td><img src="icons/font_go.png" title="font_go.png" alt="font go "/><em>font_go.png</em></td>
+		<td><img src="icons/group.png" title="group.png" alt="group "/><em>group.png</em></td>
+
+		<td><img src="icons/group_add.png" title="group_add.png" alt="group add "/><em>group_add.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/group_delete.png" title="group_delete.png" alt="group delete "/><em>group_delete.png</em></td>
+		<td><img src="icons/group_edit.png" title="group_edit.png" alt="group edit "/><em>group_edit.png</em></td>
+		<td><img src="icons/group_error.png" title="group_error.png" alt="group error "/><em>group_error.png</em></td>
+		<td><img src="icons/group_gear.png" title="group_gear.png" alt="group gear "/><em>group_gear.png</em></td>
+
+		<td><img src="icons/group_go.png" title="group_go.png" alt="group go "/><em>group_go.png</em></td>
+		<td><img src="icons/group_key.png" title="group_key.png" alt="group key "/><em>group_key.png</em></td>
+		<td><img src="icons/group_link.png" title="group_link.png" alt="group link "/><em>group_link.png</em></td>
+		<td><img src="icons/heart.png" title="heart.png" alt="heart "/><em>heart.png</em></td>
+		<td><img src="icons/heart_add.png" title="heart_add.png" alt="heart add "/><em>heart_add.png</em></td>
+		<td><img src="icons/heart_delete.png" title="heart_delete.png" alt="heart delete "/><em>heart_delete.png</em></td>
+
+		<td><img src="icons/help.png" title="help.png" alt="help "/><em>help.png</em></td>
+		<td><img src="icons/hourglass.png" title="hourglass.png" alt="hourglass "/><em>hourglass.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/hourglass_add.png" title="hourglass_add.png" alt="hourglass add "/><em>hourglass_add.png</em></td>
+		<td><img src="icons/hourglass_delete.png" title="hourglass_delete.png" alt="hourglass delete "/><em>hourglass_delete.png</em></td>
+		<td><img src="icons/hourglass_go.png" title="hourglass_go.png" alt="hourglass go "/><em>hourglass_go.png</em></td>
+
+		<td><img src="icons/hourglass_link.png" title="hourglass_link.png" alt="hourglass link "/><em>hourglass_link.png</em></td>
+		<td><img src="icons/house.png" title="house.png" alt="house "/><em>house.png</em></td>
+		<td><img src="icons/house_go.png" title="house_go.png" alt="house go "/><em>house_go.png</em></td>
+		<td><img src="icons/house_link.png" title="house_link.png" alt="house link "/><em>house_link.png</em></td>
+		<td><img src="icons/html.png" title="html.png" alt="html "/><em>html.png</em></td>
+		<td><img src="icons/html_add.png" title="html_add.png" alt="html add "/><em>html_add.png</em></td>
+
+		<td><img src="icons/html_delete.png" title="html_delete.png" alt="html delete "/><em>html_delete.png</em></td>
+		<td><img src="icons/html_go.png" title="html_go.png" alt="html go "/><em>html_go.png</em></td>
+		<td><img src="icons/html_valid.png" title="html_valid.png" alt="html valid "/><em>html_valid.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/image.png" title="image.png" alt="image "/><em>image.png</em></td>
+		<td><img src="icons/image_add.png" title="image_add.png" alt="image add "/><em>image_add.png</em></td>
+
+		<td><img src="icons/image_delete.png" title="image_delete.png" alt="image delete "/><em>image_delete.png</em></td>
+		<td><img src="icons/image_edit.png" title="image_edit.png" alt="image edit "/><em>image_edit.png</em></td>
+		<td><img src="icons/image_link.png" title="image_link.png" alt="image link "/><em>image_link.png</em></td>
+		<td><img src="icons/images.png" title="images.png" alt="images "/><em>images.png</em></td>
+		<td><img src="icons/information.png" title="information.png" alt="information "/><em>information.png</em></td>
+		<td><img src="icons/ipod.png" title="ipod.png" alt="ipod "/><em>ipod.png</em></td>
+
+		<td><img src="icons/ipod_cast.png" title="ipod_cast.png" alt="ipod cast "/><em>ipod_cast.png</em></td>
+		<td><img src="icons/ipod_cast_add.png" title="ipod_cast_add.png" alt="ipod cast add "/><em>ipod_cast_add.png</em></td>
+		<td><img src="icons/ipod_cast_delete.png" title="ipod_cast_delete.png" alt="ipod cast delete "/><em>ipod_cast_delete.png</em></td>
+		<td><img src="icons/ipod_sound.png" title="ipod_sound.png" alt="ipod sound "/><em>ipod_sound.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/joystick.png" title="joystick.png" alt="joystick "/><em>joystick.png</em></td>
+
+		<td><img src="icons/joystick_add.png" title="joystick_add.png" alt="joystick add "/><em>joystick_add.png</em></td>
+		<td><img src="icons/joystick_delete.png" title="joystick_delete.png" alt="joystick delete "/><em>joystick_delete.png</em></td>
+		<td><img src="icons/joystick_error.png" title="joystick_error.png" alt="joystick error "/><em>joystick_error.png</em></td>
+		<td><img src="icons/key.png" title="key.png" alt="key "/><em>key.png</em></td>
+		<td><img src="icons/key_add.png" title="key_add.png" alt="key add "/><em>key_add.png</em></td>
+		<td><img src="icons/key_delete.png" title="key_delete.png" alt="key delete "/><em>key_delete.png</em></td>
+
+		<td><img src="icons/key_go.png" title="key_go.png" alt="key go "/><em>key_go.png</em></td>
+		<td><img src="icons/keyboard.png" title="keyboard.png" alt="keyboard "/><em>keyboard.png</em></td>
+		<td><img src="icons/keyboard_add.png" title="keyboard_add.png" alt="keyboard add "/><em>keyboard_add.png</em></td>
+		<td><img src="icons/keyboard_delete.png" title="keyboard_delete.png" alt="keyboard delete "/><em>keyboard_delete.png</em></td>
+		<td><img src="icons/keyboard_magnify.png" title="keyboard_magnify.png" alt="keyboard magnify "/><em>keyboard_magnify.png</em></td>
+	</tr>
+
+	<tr>
+		<td><img src="icons/layers.png" title="layers.png" alt="layers "/><em>layers.png</em></td>
+		<td><img src="icons/layout.png" title="layout.png" alt="layout "/><em>layout.png</em></td>
+		<td><img src="icons/layout_add.png" title="layout_add.png" alt="layout add "/><em>layout_add.png</em></td>
+		<td><img src="icons/layout_content.png" title="layout_content.png" alt="layout content "/><em>layout_content.png</em></td>
+		<td><img src="icons/layout_delete.png" title="layout_delete.png" alt="layout delete "/><em>layout_delete.png</em></td>
+
+		<td><img src="icons/layout_edit.png" title="layout_edit.png" alt="layout edit "/><em>layout_edit.png</em></td>
+		<td><img src="icons/layout_error.png" title="layout_error.png" alt="layout error "/><em>layout_error.png</em></td>
+		<td><img src="icons/layout_header.png" title="layout_header.png" alt="layout header "/><em>layout_header.png</em></td>
+		<td><img src="icons/layout_link.png" title="layout_link.png" alt="layout link "/><em>layout_link.png</em></td>
+		<td><img src="icons/layout_sidebar.png" title="layout_sidebar.png" alt="layout sidebar "/><em>layout_sidebar.png</em></td>
+		<td><img src="icons/lightbulb.png" title="lightbulb.png" alt="lightbulb "/><em>lightbulb.png</em></td>
+
+		<td><img src="icons/lightbulb_add.png" title="lightbulb_add.png" alt="lightbulb add "/><em>lightbulb_add.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/lightbulb_delete.png" title="lightbulb_delete.png" alt="lightbulb delete "/><em>lightbulb_delete.png</em></td>
+		<td><img src="icons/lightbulb_off.png" title="lightbulb_off.png" alt="lightbulb off "/><em>lightbulb_off.png</em></td>
+		<td><img src="icons/lightning.png" title="lightning.png" alt="lightning "/><em>lightning.png</em></td>
+		<td><img src="icons/lightning_add.png" title="lightning_add.png" alt="lightning add "/><em>lightning_add.png</em></td>
+
+		<td><img src="icons/lightning_delete.png" title="lightning_delete.png" alt="lightning delete "/><em>lightning_delete.png</em></td>
+		<td><img src="icons/lightning_go.png" title="lightning_go.png" alt="lightning go "/><em>lightning_go.png</em></td>
+		<td><img src="icons/link.png" title="link.png" alt="link "/><em>link.png</em></td>
+		<td><img src="icons/link_add.png" title="link_add.png" alt="link add "/><em>link_add.png</em></td>
+		<td><img src="icons/link_break.png" title="link_break.png" alt="link break "/><em>link_break.png</em></td>
+		<td><img src="icons/link_delete.png" title="link_delete.png" alt="link delete "/><em>link_delete.png</em></td>
+
+		<td><img src="icons/link_edit.png" title="link_edit.png" alt="link edit "/><em>link_edit.png</em></td>
+		<td><img src="icons/link_error.png" title="link_error.png" alt="link error "/><em>link_error.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/link_go.png" title="link_go.png" alt="link go "/><em>link_go.png</em></td>
+		<td><img src="icons/lock.png" title="lock.png" alt="lock "/><em>lock.png</em></td>
+		<td><img src="icons/lock_add.png" title="lock_add.png" alt="lock add "/><em>lock_add.png</em></td>
+
+		<td><img src="icons/lock_break.png" title="lock_break.png" alt="lock break "/><em>lock_break.png</em></td>
+		<td><img src="icons/lock_delete.png" title="lock_delete.png" alt="lock delete "/><em>lock_delete.png</em></td>
+		<td><img src="icons/lock_edit.png" title="lock_edit.png" alt="lock edit "/><em>lock_edit.png</em></td>
+		<td><img src="icons/lock_go.png" title="lock_go.png" alt="lock go "/><em>lock_go.png</em></td>
+		<td><img src="icons/lock_open.png" title="lock_open.png" alt="lock open "/><em>lock_open.png</em></td>
+		<td><img src="icons/lorry.png" title="lorry.png" alt="lorry "/><em>lorry.png</em></td>
+
+		<td><img src="icons/lorry_add.png" title="lorry_add.png" alt="lorry add "/><em>lorry_add.png</em></td>
+		<td><img src="icons/lorry_delete.png" title="lorry_delete.png" alt="lorry delete "/><em>lorry_delete.png</em></td>
+		<td><img src="icons/lorry_error.png" title="lorry_error.png" alt="lorry error "/><em>lorry_error.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/lorry_flatbed.png" title="lorry_flatbed.png" alt="lorry flatbed "/><em>lorry_flatbed.png</em></td>
+		<td><img src="icons/lorry_go.png" title="lorry_go.png" alt="lorry go "/><em>lorry_go.png</em></td>
+
+		<td><img src="icons/lorry_link.png" title="lorry_link.png" alt="lorry link "/><em>lorry_link.png</em></td>
+		<td><img src="icons/magifier_zoom_out.png" title="magifier_zoom_out.png" alt="magifier zoom out "/><em>magifier_zoom_out.png</em></td>
+		<td><img src="icons/magnifier.png" title="magnifier.png" alt="magnifier "/><em>magnifier.png</em></td>
+		<td><img src="icons/magnifier_zoom_in.png" title="magnifier_zoom_in.png" alt="magnifier zoom in "/><em>magnifier_zoom_in.png</em></td>
+		<td><img src="icons/male.png" title="male.png" alt="male "/><em>male.png</em></td>
+		<td><img src="icons/map.png" title="map.png" alt="map "/><em>map.png</em></td>
+
+		<td><img src="icons/map_add.png" title="map_add.png" alt="map add "/><em>map_add.png</em></td>
+		<td><img src="icons/map_delete.png" title="map_delete.png" alt="map delete "/><em>map_delete.png</em></td>
+		<td><img src="icons/map_edit.png" title="map_edit.png" alt="map edit "/><em>map_edit.png</em></td>
+		<td><img src="icons/map_go.png" title="map_go.png" alt="map go "/><em>map_go.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/map_magnify.png" title="map_magnify.png" alt="map magnify "/><em>map_magnify.png</em></td>
+
+		<td><img src="icons/medal_bronze_1.png" title="medal_bronze_1.png" alt="medal bronze 1 "/><em>medal_bronze_1.png</em></td>
+		<td><img src="icons/medal_bronze_2.png" title="medal_bronze_2.png" alt="medal bronze 2 "/><em>medal_bronze_2.png</em></td>
+		<td><img src="icons/medal_bronze_3.png" title="medal_bronze_3.png" alt="medal bronze 3 "/><em>medal_bronze_3.png</em></td>
+		<td><img src="icons/medal_bronze_add.png" title="medal_bronze_add.png" alt="medal bronze add "/><em>medal_bronze_add.png</em></td>
+		<td><img src="icons/medal_bronze_delete.png" title="medal_bronze_delete.png" alt="medal bronze delete "/><em>medal_bronze_delete.png</em></td>
+		<td><img src="icons/medal_gold_1.png" title="medal_gold_1.png" alt="medal gold 1 "/><em>medal_gold_1.png</em></td>
+
+		<td><img src="icons/medal_gold_2.png" title="medal_gold_2.png" alt="medal gold 2 "/><em>medal_gold_2.png</em></td>
+		<td><img src="icons/medal_gold_3.png" title="medal_gold_3.png" alt="medal gold 3 "/><em>medal_gold_3.png</em></td>
+		<td><img src="icons/medal_gold_add.png" title="medal_gold_add.png" alt="medal gold add "/><em>medal_gold_add.png</em></td>
+		<td><img src="icons/medal_gold_delete.png" title="medal_gold_delete.png" alt="medal gold delete "/><em>medal_gold_delete.png</em></td>
+		<td><img src="icons/medal_silver_1.png" title="medal_silver_1.png" alt="medal silver 1 "/><em>medal_silver_1.png</em></td>
+	</tr>
+
+	<tr>
+		<td><img src="icons/medal_silver_2.png" title="medal_silver_2.png" alt="medal silver 2 "/><em>medal_silver_2.png</em></td>
+		<td><img src="icons/medal_silver_3.png" title="medal_silver_3.png" alt="medal silver 3 "/><em>medal_silver_3.png</em></td>
+		<td><img src="icons/medal_silver_add.png" title="medal_silver_add.png" alt="medal silver add "/><em>medal_silver_add.png</em></td>
+		<td><img src="icons/medal_silver_delete.png" title="medal_silver_delete.png" alt="medal silver delete "/><em>medal_silver_delete.png</em></td>
+		<td><img src="icons/money.png" title="money.png" alt="money "/><em>money.png</em></td>
+
+		<td><img src="icons/money_add.png" title="money_add.png" alt="money add "/><em>money_add.png</em></td>
+		<td><img src="icons/money_delete.png" title="money_delete.png" alt="money delete "/><em>money_delete.png</em></td>
+		<td><img src="icons/money_dollar.png" title="money_dollar.png" alt="money dollar "/><em>money_dollar.png</em></td>
+		<td><img src="icons/money_euro.png" title="money_euro.png" alt="money euro "/><em>money_euro.png</em></td>
+		<td><img src="icons/money_pound.png" title="money_pound.png" alt="money pound "/><em>money_pound.png</em></td>
+		<td><img src="icons/money_yen.png" title="money_yen.png" alt="money yen "/><em>money_yen.png</em></td>
+
+		<td><img src="icons/monitor.png" title="monitor.png" alt="monitor "/><em>monitor.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/monitor_add.png" title="monitor_add.png" alt="monitor add "/><em>monitor_add.png</em></td>
+		<td><img src="icons/monitor_delete.png" title="monitor_delete.png" alt="monitor delete "/><em>monitor_delete.png</em></td>
+		<td><img src="icons/monitor_edit.png" title="monitor_edit.png" alt="monitor edit "/><em>monitor_edit.png</em></td>
+		<td><img src="icons/monitor_error.png" title="monitor_error.png" alt="monitor error "/><em>monitor_error.png</em></td>
+
+		<td><img src="icons/monitor_go.png" title="monitor_go.png" alt="monitor go "/><em>monitor_go.png</em></td>
+		<td><img src="icons/monitor_lightning.png" title="monitor_lightning.png" alt="monitor lightning "/><em>monitor_lightning.png</em></td>
+		<td><img src="icons/monitor_link.png" title="monitor_link.png" alt="monitor link "/><em>monitor_link.png</em></td>
+		<td><img src="icons/mouse.png" title="mouse.png" alt="mouse "/><em>mouse.png</em></td>
+		<td><img src="icons/mouse_add.png" title="mouse_add.png" alt="mouse add "/><em>mouse_add.png</em></td>
+		<td><img src="icons/mouse_delete.png" title="mouse_delete.png" alt="mouse delete "/><em>mouse_delete.png</em></td>
+
+		<td><img src="icons/mouse_error.png" title="mouse_error.png" alt="mouse error "/><em>mouse_error.png</em></td>
+		<td><img src="icons/music.png" title="music.png" alt="music "/><em>music.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/new.png" title="new.png" alt="new "/><em>new.png</em></td>
+		<td><img src="icons/newspaper.png" title="newspaper.png" alt="newspaper "/><em>newspaper.png</em></td>
+		<td><img src="icons/newspaper_add.png" title="newspaper_add.png" alt="newspaper add "/><em>newspaper_add.png</em></td>
+
+		<td><img src="icons/newspaper_delete.png" title="newspaper_delete.png" alt="newspaper delete "/><em>newspaper_delete.png</em></td>
+		<td><img src="icons/newspaper_go.png" title="newspaper_go.png" alt="newspaper go "/><em>newspaper_go.png</em></td>
+		<td><img src="icons/newspaper_link.png" title="newspaper_link.png" alt="newspaper link "/><em>newspaper_link.png</em></td>
+		<td><img src="icons/note.png" title="note.png" alt="note "/><em>note.png</em></td>
+		<td><img src="icons/note_add.png" title="note_add.png" alt="note add "/><em>note_add.png</em></td>
+		<td><img src="icons/note_delete.png" title="note_delete.png" alt="note delete "/><em>note_delete.png</em></td>
+
+		<td><img src="icons/note_edit.png" title="note_edit.png" alt="note edit "/><em>note_edit.png</em></td>
+		<td><img src="icons/note_error.png" title="note_error.png" alt="note error "/><em>note_error.png</em></td>
+		<td><img src="icons/note_go.png" title="note_go.png" alt="note go "/><em>note_go.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/overlays.png" title="overlays.png" alt="overlays "/><em>overlays.png</em></td>
+		<td><img src="icons/package.png" title="package.png" alt="package "/><em>package.png</em></td>
+
+		<td><img src="icons/package_add.png" title="package_add.png" alt="package add "/><em>package_add.png</em></td>
+		<td><img src="icons/package_delete.png" title="package_delete.png" alt="package delete "/><em>package_delete.png</em></td>
+		<td><img src="icons/package_go.png" title="package_go.png" alt="package go "/><em>package_go.png</em></td>
+		<td><img src="icons/package_green.png" title="package_green.png" alt="package green "/><em>package_green.png</em></td>
+		<td><img src="icons/package_link.png" title="package_link.png" alt="package link "/><em>package_link.png</em></td>
+		<td><img src="icons/page.png" title="page.png" alt="page "/><em>page.png</em></td>
+
+		<td><img src="icons/page_add.png" title="page_add.png" alt="page add "/><em>page_add.png</em></td>
+		<td><img src="icons/page_attach.png" title="page_attach.png" alt="page attach "/><em>page_attach.png</em></td>
+		<td><img src="icons/page_code.png" title="page_code.png" alt="page code "/><em>page_code.png</em></td>
+		<td><img src="icons/page_copy.png" title="page_copy.png" alt="page copy "/><em>page_copy.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/page_delete.png" title="page_delete.png" alt="page delete "/><em>page_delete.png</em></td>
+
+		<td><img src="icons/page_edit.png" title="page_edit.png" alt="page edit "/><em>page_edit.png</em></td>
+		<td><img src="icons/page_error.png" title="page_error.png" alt="page error "/><em>page_error.png</em></td>
+		<td><img src="icons/page_excel.png" title="page_excel.png" alt="page excel "/><em>page_excel.png</em></td>
+		<td><img src="icons/page_find.png" title="page_find.png" alt="page find "/><em>page_find.png</em></td>
+		<td><img src="icons/page_gear.png" title="page_gear.png" alt="page gear "/><em>page_gear.png</em></td>
+		<td><img src="icons/page_go.png" title="page_go.png" alt="page go "/><em>page_go.png</em></td>
+
+		<td><img src="icons/page_green.png" title="page_green.png" alt="page green "/><em>page_green.png</em></td>
+		<td><img src="icons/page_key.png" title="page_key.png" alt="page key "/><em>page_key.png</em></td>
+		<td><img src="icons/page_lightning.png" title="page_lightning.png" alt="page lightning "/><em>page_lightning.png</em></td>
+		<td><img src="icons/page_link.png" title="page_link.png" alt="page link "/><em>page_link.png</em></td>
+		<td><img src="icons/page_paintbrush.png" title="page_paintbrush.png" alt="page paintbrush "/><em>page_paintbrush.png</em></td>
+	</tr>
+
+	<tr>
+		<td><img src="icons/page_paste.png" title="page_paste.png" alt="page paste "/><em>page_paste.png</em></td>
+		<td><img src="icons/page_red.png" title="page_red.png" alt="page red "/><em>page_red.png</em></td>
+		<td><img src="icons/page_refresh.png" title="page_refresh.png" alt="page refresh "/><em>page_refresh.png</em></td>
+		<td><img src="icons/page_save.png" title="page_save.png" alt="page save "/><em>page_save.png</em></td>
+		<td><img src="icons/page_white.png" title="page_white.png" alt="page white "/><em>page_white.png</em></td>
+
+		<td><img src="icons/page_white_acrobat.png" title="page_white_acrobat.png" alt="page white acrobat "/><em>page_white_acrobat.png</em></td>
+		<td><img src="icons/page_white_actionscript.png" title="page_white_actionscript.png" alt="page white actionscript "/><em>page_white_actionscript.png</em></td>
+		<td><img src="icons/page_white_add.png" title="page_white_add.png" alt="page white add "/><em>page_white_add.png</em></td>
+		<td><img src="icons/page_white_c.png" title="page_white_c.png" alt="page white c "/><em>page_white_c.png</em></td>
+		<td><img src="icons/page_white_camera.png" title="page_white_camera.png" alt="page white camera "/><em>page_white_camera.png</em></td>
+		<td><img src="icons/page_white_cd.png" title="page_white_cd.png" alt="page white cd "/><em>page_white_cd.png</em></td>
+
+		<td><img src="icons/page_white_code.png" title="page_white_code.png" alt="page white code "/><em>page_white_code.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/page_white_code_red.png" title="page_white_code_red.png" alt="page white code red "/><em>page_white_code_red.png</em></td>
+		<td><img src="icons/page_white_coldfusion.png" title="page_white_coldfusion.png" alt="page white coldfusion "/><em>page_white_coldfusion.png</em></td>
+		<td><img src="icons/page_white_compressed.png" title="page_white_compressed.png" alt="page white compressed "/><em>page_white_compressed.png</em></td>
+		<td><img src="icons/page_white_copy.png" title="page_white_copy.png" alt="page white copy "/><em>page_white_copy.png</em></td>
+
+		<td><img src="icons/page_white_cplusplus.png" title="page_white_cplusplus.png" alt="page white cplusplus "/><em>page_white_cplusplus.png</em></td>
+		<td><img src="icons/page_white_csharp.png" title="page_white_csharp.png" alt="page white csharp "/><em>page_white_csharp.png</em></td>
+		<td><img src="icons/page_white_cup.png" title="page_white_cup.png" alt="page white cup "/><em>page_white_cup.png</em></td>
+		<td><img src="icons/page_white_database.png" title="page_white_database.png" alt="page white database "/><em>page_white_database.png</em></td>
+		<td><img src="icons/page_white_delete.png" title="page_white_delete.png" alt="page white delete "/><em>page_white_delete.png</em></td>
+		<td><img src="icons/page_white_dvd.png" title="page_white_dvd.png" alt="page white dvd "/><em>page_white_dvd.png</em></td>
+
+		<td><img src="icons/page_white_edit.png" title="page_white_edit.png" alt="page white edit "/><em>page_white_edit.png</em></td>
+		<td><img src="icons/page_white_error.png" title="page_white_error.png" alt="page white error "/><em>page_white_error.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/page_white_excel.png" title="page_white_excel.png" alt="page white excel "/><em>page_white_excel.png</em></td>
+		<td><img src="icons/page_white_find.png" title="page_white_find.png" alt="page white find "/><em>page_white_find.png</em></td>
+		<td><img src="icons/page_white_flash.png" title="page_white_flash.png" alt="page white flash "/><em>page_white_flash.png</em></td>
+
+		<td><img src="icons/page_white_freehand.png" title="page_white_freehand.png" alt="page white freehand "/><em>page_white_freehand.png</em></td>
+		<td><img src="icons/page_white_gear.png" title="page_white_gear.png" alt="page white gear "/><em>page_white_gear.png</em></td>
+		<td><img src="icons/page_white_get.png" title="page_white_get.png" alt="page white get "/><em>page_white_get.png</em></td>
+		<td><img src="icons/page_white_go.png" title="page_white_go.png" alt="page white go "/><em>page_white_go.png</em></td>
+		<td><img src="icons/page_white_h.png" title="page_white_h.png" alt="page white h "/><em>page_white_h.png</em></td>
+		<td><img src="icons/page_white_horizontal.png" title="page_white_horizontal.png" alt="page white horizontal "/><em>page_white_horizontal.png</em></td>
+
+		<td><img src="icons/page_white_key.png" title="page_white_key.png" alt="page white key "/><em>page_white_key.png</em></td>
+		<td><img src="icons/page_white_lightning.png" title="page_white_lightning.png" alt="page white lightning "/><em>page_white_lightning.png</em></td>
+		<td><img src="icons/page_white_link.png" title="page_white_link.png" alt="page white link "/><em>page_white_link.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/page_white_magnify.png" title="page_white_magnify.png" alt="page white magnify "/><em>page_white_magnify.png</em></td>
+		<td><img src="icons/page_white_medal.png" title="page_white_medal.png" alt="page white medal "/><em>page_white_medal.png</em></td>
+
+		<td><img src="icons/page_white_office.png" title="page_white_office.png" alt="page white office "/><em>page_white_office.png</em></td>
+		<td><img src="icons/page_white_paint.png" title="page_white_paint.png" alt="page white paint "/><em>page_white_paint.png</em></td>
+		<td><img src="icons/page_white_paintbrush.png" title="page_white_paintbrush.png" alt="page white paintbrush "/><em>page_white_paintbrush.png</em></td>
+		<td><img src="icons/page_white_paste.png" title="page_white_paste.png" alt="page white paste "/><em>page_white_paste.png</em></td>
+		<td><img src="icons/page_white_php.png" title="page_white_php.png" alt="page white php "/><em>page_white_php.png</em></td>
+		<td><img src="icons/page_white_picture.png" title="page_white_picture.png" alt="page white picture "/><em>page_white_picture.png</em></td>
+
+		<td><img src="icons/page_white_powerpoint.png" title="page_white_powerpoint.png" alt="page white powerpoint "/><em>page_white_powerpoint.png</em></td>
+		<td><img src="icons/page_white_put.png" title="page_white_put.png" alt="page white put "/><em>page_white_put.png</em></td>
+		<td><img src="icons/page_white_ruby.png" title="page_white_ruby.png" alt="page white ruby "/><em>page_white_ruby.png</em></td>
+		<td><img src="icons/page_white_stack.png" title="page_white_stack.png" alt="page white stack "/><em>page_white_stack.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/page_white_star.png" title="page_white_star.png" alt="page white star "/><em>page_white_star.png</em></td>
+
+		<td><img src="icons/page_white_swoosh.png" title="page_white_swoosh.png" alt="page white swoosh "/><em>page_white_swoosh.png</em></td>
+		<td><img src="icons/page_white_text.png" title="page_white_text.png" alt="page white text "/><em>page_white_text.png</em></td>
+		<td><img src="icons/page_white_text_width.png" title="page_white_text_width.png" alt="page white text width "/><em>page_white_text_width.png</em></td>
+		<td><img src="icons/page_white_tux.png" title="page_white_tux.png" alt="page white tux "/><em>page_white_tux.png</em></td>
+		<td><img src="icons/page_white_vector.png" title="page_white_vector.png" alt="page white vector "/><em>page_white_vector.png</em></td>
+		<td><img src="icons/page_white_visualstudio.png" title="page_white_visualstudio.png" alt="page white visualstudio "/><em>page_white_visualstudio.png</em></td>
+
+		<td><img src="icons/page_white_width.png" title="page_white_width.png" alt="page white width "/><em>page_white_width.png</em></td>
+		<td><img src="icons/page_white_word.png" title="page_white_word.png" alt="page white word "/><em>page_white_word.png</em></td>
+		<td><img src="icons/page_white_world.png" title="page_white_world.png" alt="page white world "/><em>page_white_world.png</em></td>
+		<td><img src="icons/page_white_wrench.png" title="page_white_wrench.png" alt="page white wrench "/><em>page_white_wrench.png</em></td>
+		<td><img src="icons/page_white_zip.png" title="page_white_zip.png" alt="page white zip "/><em>page_white_zip.png</em></td>
+	</tr>
+
+	<tr>
+		<td><img src="icons/page_word.png" title="page_word.png" alt="page word "/><em>page_word.png</em></td>
+		<td><img src="icons/page_world.png" title="page_world.png" alt="page world "/><em>page_world.png</em></td>
+		<td><img src="icons/paintbrush.png" title="paintbrush.png" alt="paintbrush "/><em>paintbrush.png</em></td>
+		<td><img src="icons/paintcan.png" title="paintcan.png" alt="paintcan "/><em>paintcan.png</em></td>
+		<td><img src="icons/palette.png" title="palette.png" alt="palette "/><em>palette.png</em></td>
+
+		<td><img src="icons/paste_plain.png" title="paste_plain.png" alt="paste plain "/><em>paste_plain.png</em></td>
+		<td><img src="icons/paste_word.png" title="paste_word.png" alt="paste word "/><em>paste_word.png</em></td>
+		<td><img src="icons/pencil.png" title="pencil.png" alt="pencil "/><em>pencil.png</em></td>
+		<td><img src="icons/pencil_add.png" title="pencil_add.png" alt="pencil add "/><em>pencil_add.png</em></td>
+		<td><img src="icons/pencil_delete.png" title="pencil_delete.png" alt="pencil delete "/><em>pencil_delete.png</em></td>
+		<td><img src="icons/pencil_go.png" title="pencil_go.png" alt="pencil go "/><em>pencil_go.png</em></td>
+
+		<td><img src="icons/phone.png" title="phone.png" alt="phone "/><em>phone.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/phone_add.png" title="phone_add.png" alt="phone add "/><em>phone_add.png</em></td>
+		<td><img src="icons/phone_delete.png" title="phone_delete.png" alt="phone delete "/><em>phone_delete.png</em></td>
+		<td><img src="icons/phone_sound.png" title="phone_sound.png" alt="phone sound "/><em>phone_sound.png</em></td>
+		<td><img src="icons/photo.png" title="photo.png" alt="photo "/><em>photo.png</em></td>
+
+		<td><img src="icons/photo_add.png" title="photo_add.png" alt="photo add "/><em>photo_add.png</em></td>
+		<td><img src="icons/photo_delete.png" title="photo_delete.png" alt="photo delete "/><em>photo_delete.png</em></td>
+		<td><img src="icons/photo_link.png" title="photo_link.png" alt="photo link "/><em>photo_link.png</em></td>
+		<td><img src="icons/photos.png" title="photos.png" alt="photos "/><em>photos.png</em></td>
+		<td><img src="icons/picture.png" title="picture.png" alt="picture "/><em>picture.png</em></td>
+		<td><img src="icons/picture_add.png" title="picture_add.png" alt="picture add "/><em>picture_add.png</em></td>
+
+		<td><img src="icons/picture_delete.png" title="picture_delete.png" alt="picture delete "/><em>picture_delete.png</em></td>
+		<td><img src="icons/picture_edit.png" title="picture_edit.png" alt="picture edit "/><em>picture_edit.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/picture_empty.png" title="picture_empty.png" alt="picture empty "/><em>picture_empty.png</em></td>
+		<td><img src="icons/picture_error.png" title="picture_error.png" alt="picture error "/><em>picture_error.png</em></td>
+		<td><img src="icons/picture_go.png" title="picture_go.png" alt="picture go "/><em>picture_go.png</em></td>
+
+		<td><img src="icons/picture_key.png" title="picture_key.png" alt="picture key "/><em>picture_key.png</em></td>
+		<td><img src="icons/picture_link.png" title="picture_link.png" alt="picture link "/><em>picture_link.png</em></td>
+		<td><img src="icons/picture_save.png" title="picture_save.png" alt="picture save "/><em>picture_save.png</em></td>
+		<td><img src="icons/pictures.png" title="pictures.png" alt="pictures "/><em>pictures.png</em></td>
+		<td><img src="icons/pilcrow.png" title="pilcrow.png" alt="pilcrow "/><em>pilcrow.png</em></td>
+		<td><img src="icons/pill.png" title="pill.png" alt="pill "/><em>pill.png</em></td>
+
+		<td><img src="icons/pill_add.png" title="pill_add.png" alt="pill add "/><em>pill_add.png</em></td>
+		<td><img src="icons/pill_delete.png" title="pill_delete.png" alt="pill delete "/><em>pill_delete.png</em></td>
+		<td><img src="icons/pill_go.png" title="pill_go.png" alt="pill go "/><em>pill_go.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/plugin.png" title="plugin.png" alt="plugin "/><em>plugin.png</em></td>
+		<td><img src="icons/plugin_add.png" title="plugin_add.png" alt="plugin add "/><em>plugin_add.png</em></td>
+
+		<td><img src="icons/plugin_delete.png" title="plugin_delete.png" alt="plugin delete "/><em>plugin_delete.png</em></td>
+		<td><img src="icons/plugin_disabled.png" title="plugin_disabled.png" alt="plugin disabled "/><em>plugin_disabled.png</em></td>
+		<td><img src="icons/plugin_edit.png" title="plugin_edit.png" alt="plugin edit "/><em>plugin_edit.png</em></td>
+		<td><img src="icons/plugin_error.png" title="plugin_error.png" alt="plugin error "/><em>plugin_error.png</em></td>
+		<td><img src="icons/plugin_go.png" title="plugin_go.png" alt="plugin go "/><em>plugin_go.png</em></td>
+		<td><img src="icons/plugin_link.png" title="plugin_link.png" alt="plugin link "/><em>plugin_link.png</em></td>
+
+		<td><img src="icons/printer.png" title="printer.png" alt="printer "/><em>printer.png</em></td>
+		<td><img src="icons/printer_add.png" title="printer_add.png" alt="printer add "/><em>printer_add.png</em></td>
+		<td><img src="icons/printer_delete.png" title="printer_delete.png" alt="printer delete "/><em>printer_delete.png</em></td>
+		<td><img src="icons/printer_empty.png" title="printer_empty.png" alt="printer empty "/><em>printer_empty.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/printer_error.png" title="printer_error.png" alt="printer error "/><em>printer_error.png</em></td>
+
+		<td><img src="icons/rainbow.png" title="rainbow.png" alt="rainbow "/><em>rainbow.png</em></td>
+		<td><img src="icons/report.png" title="report.png" alt="report "/><em>report.png</em></td>
+		<td><img src="icons/report_add.png" title="report_add.png" alt="report add "/><em>report_add.png</em></td>
+		<td><img src="icons/report_delete.png" title="report_delete.png" alt="report delete "/><em>report_delete.png</em></td>
+		<td><img src="icons/report_disk.png" title="report_disk.png" alt="report disk "/><em>report_disk.png</em></td>
+		<td><img src="icons/report_edit.png" title="report_edit.png" alt="report edit "/><em>report_edit.png</em></td>
+
+		<td><img src="icons/report_go.png" title="report_go.png" alt="report go "/><em>report_go.png</em></td>
+		<td><img src="icons/report_key.png" title="report_key.png" alt="report key "/><em>report_key.png</em></td>
+		<td><img src="icons/report_link.png" title="report_link.png" alt="report link "/><em>report_link.png</em></td>
+		<td><img src="icons/report_magnify.png" title="report_magnify.png" alt="report magnify "/><em>report_magnify.png</em></td>
+		<td><img src="icons/report_picture.png" title="report_picture.png" alt="report picture "/><em>report_picture.png</em></td>
+	</tr>
+
+	<tr>
+		<td><img src="icons/report_user.png" title="report_user.png" alt="report user "/><em>report_user.png</em></td>
+		<td><img src="icons/report_word.png" title="report_word.png" alt="report word "/><em>report_word.png</em></td>
+		<td><img src="icons/resultset_first.png" title="resultset_first.png" alt="resultset first "/><em>resultset_first.png</em></td>
+		<td><img src="icons/resultset_last.png" title="resultset_last.png" alt="resultset last "/><em>resultset_last.png</em></td>
+		<td><img src="icons/resultset_next.png" title="resultset_next.png" alt="resultset next "/><em>resultset_next.png</em></td>
+
+		<td><img src="icons/resultset_previous.png" title="resultset_previous.png" alt="resultset previous "/><em>resultset_previous.png</em></td>
+		<td><img src="icons/rosette.png" title="rosette.png" alt="rosette "/><em>rosette.png</em></td>
+		<td><img src="icons/rss.png" title="rss.png" alt="rss "/><em>rss.png</em></td>
+		<td><img src="icons/rss_add.png" title="rss_add.png" alt="rss add "/><em>rss_add.png</em></td>
+		<td><img src="icons/rss_delete.png" title="rss_delete.png" alt="rss delete "/><em>rss_delete.png</em></td>
+		<td><img src="icons/rss_go.png" title="rss_go.png" alt="rss go "/><em>rss_go.png</em></td>
+
+		<td><img src="icons/rss_valid.png" title="rss_valid.png" alt="rss valid "/><em>rss_valid.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/ruby.png" title="ruby.png" alt="ruby "/><em>ruby.png</em></td>
+		<td><img src="icons/ruby_add.png" title="ruby_add.png" alt="ruby add "/><em>ruby_add.png</em></td>
+		<td><img src="icons/ruby_delete.png" title="ruby_delete.png" alt="ruby delete "/><em>ruby_delete.png</em></td>
+		<td><img src="icons/ruby_gear.png" title="ruby_gear.png" alt="ruby gear "/><em>ruby_gear.png</em></td>
+
+		<td><img src="icons/ruby_get.png" title="ruby_get.png" alt="ruby get "/><em>ruby_get.png</em></td>
+		<td><img src="icons/ruby_go.png" title="ruby_go.png" alt="ruby go "/><em>ruby_go.png</em></td>
+		<td><img src="icons/ruby_key.png" title="ruby_key.png" alt="ruby key "/><em>ruby_key.png</em></td>
+		<td><img src="icons/ruby_link.png" title="ruby_link.png" alt="ruby link "/><em>ruby_link.png</em></td>
+		<td><img src="icons/ruby_put.png" title="ruby_put.png" alt="ruby put "/><em>ruby_put.png</em></td>
+		<td><img src="icons/script.png" title="script.png" alt="script "/><em>script.png</em></td>
+
+		<td><img src="icons/script_add.png" title="script_add.png" alt="script add "/><em>script_add.png</em></td>
+		<td><img src="icons/script_code.png" title="script_code.png" alt="script code "/><em>script_code.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/script_code_red.png" title="script_code_red.png" alt="script code red "/><em>script_code_red.png</em></td>
+		<td><img src="icons/script_delete.png" title="script_delete.png" alt="script delete "/><em>script_delete.png</em></td>
+		<td><img src="icons/script_edit.png" title="script_edit.png" alt="script edit "/><em>script_edit.png</em></td>
+
+		<td><img src="icons/script_error.png" title="script_error.png" alt="script error "/><em>script_error.png</em></td>
+		<td><img src="icons/script_gear.png" title="script_gear.png" alt="script gear "/><em>script_gear.png</em></td>
+		<td><img src="icons/script_go.png" title="script_go.png" alt="script go "/><em>script_go.png</em></td>
+		<td><img src="icons/script_key.png" title="script_key.png" alt="script key "/><em>script_key.png</em></td>
+		<td><img src="icons/script_lightning.png" title="script_lightning.png" alt="script lightning "/><em>script_lightning.png</em></td>
+		<td><img src="icons/script_link.png" title="script_link.png" alt="script link "/><em>script_link.png</em></td>
+
+		<td><img src="icons/script_palette.png" title="script_palette.png" alt="script palette "/><em>script_palette.png</em></td>
+		<td><img src="icons/script_save.png" title="script_save.png" alt="script save "/><em>script_save.png</em></td>
+		<td><img src="icons/server.png" title="server.png" alt="server "/><em>server.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/server_add.png" title="server_add.png" alt="server add "/><em>server_add.png</em></td>
+		<td><img src="icons/server_chart.png" title="server_chart.png" alt="server chart "/><em>server_chart.png</em></td>
+
+		<td><img src="icons/server_compressed.png" title="server_compressed.png" alt="server compressed "/><em>server_compressed.png</em></td>
+		<td><img src="icons/server_connect.png" title="server_connect.png" alt="server connect "/><em>server_connect.png</em></td>
+		<td><img src="icons/server_database.png" title="server_database.png" alt="server database "/><em>server_database.png</em></td>
+		<td><img src="icons/server_delete.png" title="server_delete.png" alt="server delete "/><em>server_delete.png</em></td>
+		<td><img src="icons/server_edit.png" title="server_edit.png" alt="server edit "/><em>server_edit.png</em></td>
+		<td><img src="icons/server_error.png" title="server_error.png" alt="server error "/><em>server_error.png</em></td>
+
+		<td><img src="icons/server_go.png" title="server_go.png" alt="server go "/><em>server_go.png</em></td>
+		<td><img src="icons/server_key.png" title="server_key.png" alt="server key "/><em>server_key.png</em></td>
+		<td><img src="icons/server_lightning.png" title="server_lightning.png" alt="server lightning "/><em>server_lightning.png</em></td>
+		<td><img src="icons/server_link.png" title="server_link.png" alt="server link "/><em>server_link.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/server_uncompressed.png" title="server_uncompressed.png" alt="server uncompressed "/><em>server_uncompressed.png</em></td>
+
+		<td><img src="icons/shading.png" title="shading.png" alt="shading "/><em>shading.png</em></td>
+		<td><img src="icons/shape_align_bottom.png" title="shape_align_bottom.png" alt="shape align bottom "/><em>shape_align_bottom.png</em></td>
+		<td><img src="icons/shape_align_center.png" title="shape_align_center.png" alt="shape align center "/><em>shape_align_center.png</em></td>
+		<td><img src="icons/shape_align_left.png" title="shape_align_left.png" alt="shape align left "/><em>shape_align_left.png</em></td>
+		<td><img src="icons/shape_align_middle.png" title="shape_align_middle.png" alt="shape align middle "/><em>shape_align_middle.png</em></td>
+		<td><img src="icons/shape_align_right.png" title="shape_align_right.png" alt="shape align right "/><em>shape_align_right.png</em></td>
+
+		<td><img src="icons/shape_align_top.png" title="shape_align_top.png" alt="shape align top "/><em>shape_align_top.png</em></td>
+		<td><img src="icons/shape_flip_horizontal.png" title="shape_flip_horizontal.png" alt="shape flip horizontal "/><em>shape_flip_horizontal.png</em></td>
+		<td><img src="icons/shape_flip_vertical.png" title="shape_flip_vertical.png" alt="shape flip vertical "/><em>shape_flip_vertical.png</em></td>
+		<td><img src="icons/shape_group.png" title="shape_group.png" alt="shape group "/><em>shape_group.png</em></td>
+		<td><img src="icons/shape_handles.png" title="shape_handles.png" alt="shape handles "/><em>shape_handles.png</em></td>
+	</tr>
+
+	<tr>
+		<td><img src="icons/shape_move_back.png" title="shape_move_back.png" alt="shape move back "/><em>shape_move_back.png</em></td>
+		<td><img src="icons/shape_move_backwards.png" title="shape_move_backwards.png" alt="shape move backwards "/><em>shape_move_backwards.png</em></td>
+		<td><img src="icons/shape_move_forwards.png" title="shape_move_forwards.png" alt="shape move forwards "/><em>shape_move_forwards.png</em></td>
+		<td><img src="icons/shape_move_front.png" title="shape_move_front.png" alt="shape move front "/><em>shape_move_front.png</em></td>
+		<td><img src="icons/shape_rotate_anticlockwise.png" title="shape_rotate_anticlockwise.png" alt="shape rotate anticlockwise "/><em>shape_rotate_anticlockwise.png</em></td>
+
+		<td><img src="icons/shape_rotate_clockwise.png" title="shape_rotate_clockwise.png" alt="shape rotate clockwise "/><em>shape_rotate_clockwise.png</em></td>
+		<td><img src="icons/shape_square.png" title="shape_square.png" alt="shape square "/><em>shape_square.png</em></td>
+		<td><img src="icons/shape_square_add.png" title="shape_square_add.png" alt="shape square add "/><em>shape_square_add.png</em></td>
+		<td><img src="icons/shape_square_delete.png" title="shape_square_delete.png" alt="shape square delete "/><em>shape_square_delete.png</em></td>
+		<td><img src="icons/shape_square_edit.png" title="shape_square_edit.png" alt="shape square edit "/><em>shape_square_edit.png</em></td>
+		<td><img src="icons/shape_square_error.png" title="shape_square_error.png" alt="shape square error "/><em>shape_square_error.png</em></td>
+
+		<td><img src="icons/shape_square_go.png" title="shape_square_go.png" alt="shape square go "/><em>shape_square_go.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/shape_square_key.png" title="shape_square_key.png" alt="shape square key "/><em>shape_square_key.png</em></td>
+		<td><img src="icons/shape_square_link.png" title="shape_square_link.png" alt="shape square link "/><em>shape_square_link.png</em></td>
+		<td><img src="icons/shape_ungroup.png" title="shape_ungroup.png" alt="shape ungroup "/><em>shape_ungroup.png</em></td>
+		<td><img src="icons/shield.png" title="shield.png" alt="shield "/><em>shield.png</em></td>
+
+		<td><img src="icons/shield_add.png" title="shield_add.png" alt="shield add "/><em>shield_add.png</em></td>
+		<td><img src="icons/shield_delete.png" title="shield_delete.png" alt="shield delete "/><em>shield_delete.png</em></td>
+		<td><img src="icons/shield_go.png" title="shield_go.png" alt="shield go "/><em>shield_go.png</em></td>
+		<td><img src="icons/sitemap.png" title="sitemap.png" alt="sitemap "/><em>sitemap.png</em></td>
+		<td><img src="icons/sitemap_color.png" title="sitemap_color.png" alt="sitemap color "/><em>sitemap_color.png</em></td>
+		<td><img src="icons/sound.png" title="sound.png" alt="sound "/><em>sound.png</em></td>
+
+		<td><img src="icons/sound_add.png" title="sound_add.png" alt="sound add "/><em>sound_add.png</em></td>
+		<td><img src="icons/sound_delete.png" title="sound_delete.png" alt="sound delete "/><em>sound_delete.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/sound_low.png" title="sound_low.png" alt="sound low "/><em>sound_low.png</em></td>
+		<td><img src="icons/sound_mute.png" title="sound_mute.png" alt="sound mute "/><em>sound_mute.png</em></td>
+		<td><img src="icons/sound_none.png" title="sound_none.png" alt="sound none "/><em>sound_none.png</em></td>
+
+		<td><img src="icons/spellcheck.png" title="spellcheck.png" alt="spellcheck "/><em>spellcheck.png</em></td>
+		<td><img src="icons/sport_8ball.png" title="sport_8ball.png" alt="sport 8ball "/><em>sport_8ball.png</em></td>
+		<td><img src="icons/sport_basketball.png" title="sport_basketball.png" alt="sport basketball "/><em>sport_basketball.png</em></td>
+		<td><img src="icons/sport_football.png" title="sport_football.png" alt="sport football "/><em>sport_football.png</em></td>
+		<td><img src="icons/sport_golf.png" title="sport_golf.png" alt="sport golf "/><em>sport_golf.png</em></td>
+		<td><img src="icons/sport_raquet.png" title="sport_raquet.png" alt="sport raquet "/><em>sport_raquet.png</em></td>
+
+		<td><img src="icons/sport_shuttlecock.png" title="sport_shuttlecock.png" alt="sport shuttlecock "/><em>sport_shuttlecock.png</em></td>
+		<td><img src="icons/sport_soccer.png" title="sport_soccer.png" alt="sport soccer "/><em>sport_soccer.png</em></td>
+		<td><img src="icons/sport_tennis.png" title="sport_tennis.png" alt="sport tennis "/><em>sport_tennis.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/star.png" title="star.png" alt="star "/><em>star.png</em></td>
+		<td><img src="icons/status_away.png" title="status_away.png" alt="status away "/><em>status_away.png</em></td>
+
+		<td><img src="icons/status_busy.png" title="status_busy.png" alt="status busy "/><em>status_busy.png</em></td>
+		<td><img src="icons/status_offline.png" title="status_offline.png" alt="status offline "/><em>status_offline.png</em></td>
+		<td><img src="icons/status_online.png" title="status_online.png" alt="status online "/><em>status_online.png</em></td>
+		<td><img src="icons/stop.png" title="stop.png" alt="stop "/><em>stop.png</em></td>
+		<td><img src="icons/style.png" title="style.png" alt="style "/><em>style.png</em></td>
+		<td><img src="icons/style_add.png" title="style_add.png" alt="style add "/><em>style_add.png</em></td>
+
+		<td><img src="icons/style_delete.png" title="style_delete.png" alt="style delete "/><em>style_delete.png</em></td>
+		<td><img src="icons/style_edit.png" title="style_edit.png" alt="style edit "/><em>style_edit.png</em></td>
+		<td><img src="icons/style_go.png" title="style_go.png" alt="style go "/><em>style_go.png</em></td>
+		<td><img src="icons/sum.png" title="sum.png" alt="sum "/><em>sum.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/tab.png" title="tab.png" alt="tab "/><em>tab.png</em></td>
+
+		<td><img src="icons/tab_add.png" title="tab_add.png" alt="tab add "/><em>tab_add.png</em></td>
+		<td><img src="icons/tab_delete.png" title="tab_delete.png" alt="tab delete "/><em>tab_delete.png</em></td>
+		<td><img src="icons/tab_edit.png" title="tab_edit.png" alt="tab edit "/><em>tab_edit.png</em></td>
+		<td><img src="icons/tab_go.png" title="tab_go.png" alt="tab go "/><em>tab_go.png</em></td>
+		<td><img src="icons/table.png" title="table.png" alt="table "/><em>table.png</em></td>
+		<td><img src="icons/table_add.png" title="table_add.png" alt="table add "/><em>table_add.png</em></td>
+
+		<td><img src="icons/table_delete.png" title="table_delete.png" alt="table delete "/><em>table_delete.png</em></td>
+		<td><img src="icons/table_edit.png" title="table_edit.png" alt="table edit "/><em>table_edit.png</em></td>
+		<td><img src="icons/table_error.png" title="table_error.png" alt="table error "/><em>table_error.png</em></td>
+		<td><img src="icons/table_gear.png" title="table_gear.png" alt="table gear "/><em>table_gear.png</em></td>
+		<td><img src="icons/table_go.png" title="table_go.png" alt="table go "/><em>table_go.png</em></td>
+	</tr>
+
+	<tr>
+		<td><img src="icons/table_key.png" title="table_key.png" alt="table key "/><em>table_key.png</em></td>
+		<td><img src="icons/table_lightning.png" title="table_lightning.png" alt="table lightning "/><em>table_lightning.png</em></td>
+		<td><img src="icons/table_link.png" title="table_link.png" alt="table link "/><em>table_link.png</em></td>
+		<td><img src="icons/table_multiple.png" title="table_multiple.png" alt="table multiple "/><em>table_multiple.png</em></td>
+		<td><img src="icons/table_refresh.png" title="table_refresh.png" alt="table refresh "/><em>table_refresh.png</em></td>
+
+		<td><img src="icons/table_relationship.png" title="table_relationship.png" alt="table relationship "/><em>table_relationship.png</em></td>
+		<td><img src="icons/table_row_delete.png" title="table_row_delete.png" alt="table row delete "/><em>table_row_delete.png</em></td>
+		<td><img src="icons/table_row_insert.png" title="table_row_insert.png" alt="table row insert "/><em>table_row_insert.png</em></td>
+		<td><img src="icons/table_save.png" title="table_save.png" alt="table save "/><em>table_save.png</em></td>
+		<td><img src="icons/table_sort.png" title="table_sort.png" alt="table sort "/><em>table_sort.png</em></td>
+		<td><img src="icons/tag.png" title="tag.png" alt="tag "/><em>tag.png</em></td>
+
+		<td><img src="icons/tag_blue.png" title="tag_blue.png" alt="tag blue "/><em>tag_blue.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/tag_blue_add.png" title="tag_blue_add.png" alt="tag blue add "/><em>tag_blue_add.png</em></td>
+		<td><img src="icons/tag_blue_delete.png" title="tag_blue_delete.png" alt="tag blue delete "/><em>tag_blue_delete.png</em></td>
+		<td><img src="icons/tag_blue_edit.png" title="tag_blue_edit.png" alt="tag blue edit "/><em>tag_blue_edit.png</em></td>
+		<td><img src="icons/tag_green.png" title="tag_green.png" alt="tag green "/><em>tag_green.png</em></td>
+
+		<td><img src="icons/tag_orange.png" title="tag_orange.png" alt="tag orange "/><em>tag_orange.png</em></td>
+		<td><img src="icons/tag_pink.png" title="tag_pink.png" alt="tag pink "/><em>tag_pink.png</em></td>
+		<td><img src="icons/tag_purple.png" title="tag_purple.png" alt="tag purple "/><em>tag_purple.png</em></td>
+		<td><img src="icons/tag_red.png" title="tag_red.png" alt="tag red "/><em>tag_red.png</em></td>
+		<td><img src="icons/tag_yellow.png" title="tag_yellow.png" alt="tag yellow "/><em>tag_yellow.png</em></td>
+		<td><img src="icons/telephone.png" title="telephone.png" alt="telephone "/><em>telephone.png</em></td>
+
+		<td><img src="icons/telephone_add.png" title="telephone_add.png" alt="telephone add "/><em>telephone_add.png</em></td>
+		<td><img src="icons/telephone_delete.png" title="telephone_delete.png" alt="telephone delete "/><em>telephone_delete.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/telephone_edit.png" title="telephone_edit.png" alt="telephone edit "/><em>telephone_edit.png</em></td>
+		<td><img src="icons/telephone_error.png" title="telephone_error.png" alt="telephone error "/><em>telephone_error.png</em></td>
+		<td><img src="icons/telephone_go.png" title="telephone_go.png" alt="telephone go "/><em>telephone_go.png</em></td>
+
+		<td><img src="icons/telephone_key.png" title="telephone_key.png" alt="telephone key "/><em>telephone_key.png</em></td>
+		<td><img src="icons/telephone_link.png" title="telephone_link.png" alt="telephone link "/><em>telephone_link.png</em></td>
+		<td><img src="icons/television.png" title="television.png" alt="television "/><em>television.png</em></td>
+		<td><img src="icons/television_add.png" title="television_add.png" alt="television add "/><em>television_add.png</em></td>
+		<td><img src="icons/television_delete.png" title="television_delete.png" alt="television delete "/><em>television_delete.png</em></td>
+		<td><img src="icons/text_align_center.png" title="text_align_center.png" alt="text align center "/><em>text_align_center.png</em></td>
+
+		<td><img src="icons/text_align_justify.png" title="text_align_justify.png" alt="text align justify "/><em>text_align_justify.png</em></td>
+		<td><img src="icons/text_align_left.png" title="text_align_left.png" alt="text align left "/><em>text_align_left.png</em></td>
+		<td><img src="icons/text_align_right.png" title="text_align_right.png" alt="text align right "/><em>text_align_right.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/text_allcaps.png" title="text_allcaps.png" alt="text allcaps "/><em>text_allcaps.png</em></td>
+		<td><img src="icons/text_bold.png" title="text_bold.png" alt="text bold "/><em>text_bold.png</em></td>
+
+		<td><img src="icons/text_columns.png" title="text_columns.png" alt="text columns "/><em>text_columns.png</em></td>
+		<td><img src="icons/text_dropcaps.png" title="text_dropcaps.png" alt="text dropcaps "/><em>text_dropcaps.png</em></td>
+		<td><img src="icons/text_heading_1.png" title="text_heading_1.png" alt="text heading 1 "/><em>text_heading_1.png</em></td>
+		<td><img src="icons/text_heading_2.png" title="text_heading_2.png" alt="text heading 2 "/><em>text_heading_2.png</em></td>
+		<td><img src="icons/text_heading_3.png" title="text_heading_3.png" alt="text heading 3 "/><em>text_heading_3.png</em></td>
+		<td><img src="icons/text_heading_4.png" title="text_heading_4.png" alt="text heading 4 "/><em>text_heading_4.png</em></td>
+
+		<td><img src="icons/text_heading_5.png" title="text_heading_5.png" alt="text heading 5 "/><em>text_heading_5.png</em></td>
+		<td><img src="icons/text_heading_6.png" title="text_heading_6.png" alt="text heading 6 "/><em>text_heading_6.png</em></td>
+		<td><img src="icons/text_horizontalrule.png" title="text_horizontalrule.png" alt="text horizontalrule "/><em>text_horizontalrule.png</em></td>
+		<td><img src="icons/text_indent.png" title="text_indent.png" alt="text indent "/><em>text_indent.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/text_indent_remove.png" title="text_indent_remove.png" alt="text indent remove "/><em>text_indent_remove.png</em></td>
+
+		<td><img src="icons/text_italic.png" title="text_italic.png" alt="text italic "/><em>text_italic.png</em></td>
+		<td><img src="icons/text_kerning.png" title="text_kerning.png" alt="text kerning "/><em>text_kerning.png</em></td>
+		<td><img src="icons/text_letter_omega.png" title="text_letter_omega.png" alt="text letter omega "/><em>text_letter_omega.png</em></td>
+		<td><img src="icons/text_letterspacing.png" title="text_letterspacing.png" alt="text letterspacing "/><em>text_letterspacing.png</em></td>
+		<td><img src="icons/text_linespacing.png" title="text_linespacing.png" alt="text linespacing "/><em>text_linespacing.png</em></td>
+		<td><img src="icons/text_list_bullets.png" title="text_list_bullets.png" alt="text list bullets "/><em>text_list_bullets.png</em></td>
+
+		<td><img src="icons/text_list_numbers.png" title="text_list_numbers.png" alt="text list numbers "/><em>text_list_numbers.png</em></td>
+		<td><img src="icons/text_lowercase.png" title="text_lowercase.png" alt="text lowercase "/><em>text_lowercase.png</em></td>
+		<td><img src="icons/text_padding_bottom.png" title="text_padding_bottom.png" alt="text padding bottom "/><em>text_padding_bottom.png</em></td>
+		<td><img src="icons/text_padding_left.png" title="text_padding_left.png" alt="text padding left "/><em>text_padding_left.png</em></td>
+		<td><img src="icons/text_padding_right.png" title="text_padding_right.png" alt="text padding right "/><em>text_padding_right.png</em></td>
+	</tr>
+
+	<tr>
+		<td><img src="icons/text_padding_top.png" title="text_padding_top.png" alt="text padding top "/><em>text_padding_top.png</em></td>
+		<td><img src="icons/text_replace.png" title="text_replace.png" alt="text replace "/><em>text_replace.png</em></td>
+		<td><img src="icons/text_signature.png" title="text_signature.png" alt="text signature "/><em>text_signature.png</em></td>
+		<td><img src="icons/text_smallcaps.png" title="text_smallcaps.png" alt="text smallcaps "/><em>text_smallcaps.png</em></td>
+		<td><img src="icons/text_strikethrough.png" title="text_strikethrough.png" alt="text strikethrough "/><em>text_strikethrough.png</em></td>
+
+		<td><img src="icons/text_subscript.png" title="text_subscript.png" alt="text subscript "/><em>text_subscript.png</em></td>
+		<td><img src="icons/text_superscript.png" title="text_superscript.png" alt="text superscript "/><em>text_superscript.png</em></td>
+		<td><img src="icons/text_underline.png" title="text_underline.png" alt="text underline "/><em>text_underline.png</em></td>
+		<td><img src="icons/text_uppercase.png" title="text_uppercase.png" alt="text uppercase "/><em>text_uppercase.png</em></td>
+		<td><img src="icons/textfield.png" title="textfield.png" alt="textfield "/><em>textfield.png</em></td>
+		<td><img src="icons/textfield_add.png" title="textfield_add.png" alt="textfield add "/><em>textfield_add.png</em></td>
+
+		<td><img src="icons/textfield_delete.png" title="textfield_delete.png" alt="textfield delete "/><em>textfield_delete.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/textfield_key.png" title="textfield_key.png" alt="textfield key "/><em>textfield_key.png</em></td>
+		<td><img src="icons/textfield_rename.png" title="textfield_rename.png" alt="textfield rename "/><em>textfield_rename.png</em></td>
+		<td><img src="icons/thumb_down.png" title="thumb_down.png" alt="thumb down "/><em>thumb_down.png</em></td>
+		<td><img src="icons/thumb_up.png" title="thumb_up.png" alt="thumb up "/><em>thumb_up.png</em></td>
+
+		<td><img src="icons/tick.png" title="tick.png" alt="tick "/><em>tick.png</em></td>
+		<td><img src="icons/time.png" title="time.png" alt="time "/><em>time.png</em></td>
+		<td><img src="icons/time_add.png" title="time_add.png" alt="time add "/><em>time_add.png</em></td>
+		<td><img src="icons/time_delete.png" title="time_delete.png" alt="time delete "/><em>time_delete.png</em></td>
+		<td><img src="icons/time_go.png" title="time_go.png" alt="time go "/><em>time_go.png</em></td>
+		<td><img src="icons/timeline_marker.png" title="timeline_marker.png" alt="timeline marker "/><em>timeline_marker.png</em></td>
+
+		<td><img src="icons/transmit.png" title="transmit.png" alt="transmit "/><em>transmit.png</em></td>
+		<td><img src="icons/transmit_add.png" title="transmit_add.png" alt="transmit add "/><em>transmit_add.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/transmit_blue.png" title="transmit_blue.png" alt="transmit blue "/><em>transmit_blue.png</em></td>
+		<td><img src="icons/transmit_delete.png" title="transmit_delete.png" alt="transmit delete "/><em>transmit_delete.png</em></td>
+		<td><img src="icons/transmit_edit.png" title="transmit_edit.png" alt="transmit edit "/><em>transmit_edit.png</em></td>
+
+		<td><img src="icons/transmit_error.png" title="transmit_error.png" alt="transmit error "/><em>transmit_error.png</em></td>
+		<td><img src="icons/transmit_go.png" title="transmit_go.png" alt="transmit go "/><em>transmit_go.png</em></td>
+		<td><img src="icons/tux.png" title="tux.png" alt="tux "/><em>tux.png</em></td>
+		<td><img src="icons/user.png" title="user.png" alt="user "/><em>user.png</em></td>
+		<td><img src="icons/user_add.png" title="user_add.png" alt="user add "/><em>user_add.png</em></td>
+		<td><img src="icons/user_comment.png" title="user_comment.png" alt="user comment "/><em>user_comment.png</em></td>
+
+		<td><img src="icons/user_delete.png" title="user_delete.png" alt="user delete "/><em>user_delete.png</em></td>
+		<td><img src="icons/user_edit.png" title="user_edit.png" alt="user edit "/><em>user_edit.png</em></td>
+		<td><img src="icons/user_female.png" title="user_female.png" alt="user female "/><em>user_female.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/user_go.png" title="user_go.png" alt="user go "/><em>user_go.png</em></td>
+		<td><img src="icons/user_gray.png" title="user_gray.png" alt="user gray "/><em>user_gray.png</em></td>
+
+		<td><img src="icons/user_green.png" title="user_green.png" alt="user green "/><em>user_green.png</em></td>
+		<td><img src="icons/user_orange.png" title="user_orange.png" alt="user orange "/><em>user_orange.png</em></td>
+		<td><img src="icons/user_red.png" title="user_red.png" alt="user red "/><em>user_red.png</em></td>
+		<td><img src="icons/user_suit.png" title="user_suit.png" alt="user suit "/><em>user_suit.png</em></td>
+		<td><img src="icons/vcard.png" title="vcard.png" alt="vcard "/><em>vcard.png</em></td>
+		<td><img src="icons/vcard_add.png" title="vcard_add.png" alt="vcard add "/><em>vcard_add.png</em></td>
+
+		<td><img src="icons/vcard_delete.png" title="vcard_delete.png" alt="vcard delete "/><em>vcard_delete.png</em></td>
+		<td><img src="icons/vcard_edit.png" title="vcard_edit.png" alt="vcard edit "/><em>vcard_edit.png</em></td>
+		<td><img src="icons/vector.png" title="vector.png" alt="vector "/><em>vector.png</em></td>
+		<td><img src="icons/vector_add.png" title="vector_add.png" alt="vector add "/><em>vector_add.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/vector_delete.png" title="vector_delete.png" alt="vector delete "/><em>vector_delete.png</em></td>
+
+		<td><img src="icons/wand.png" title="wand.png" alt="wand "/><em>wand.png</em></td>
+		<td><img src="icons/weather_clouds.png" title="weather_clouds.png" alt="weather clouds "/><em>weather_clouds.png</em></td>
+		<td><img src="icons/weather_cloudy.png" title="weather_cloudy.png" alt="weather cloudy "/><em>weather_cloudy.png</em></td>
+		<td><img src="icons/weather_lightning.png" title="weather_lightning.png" alt="weather lightning "/><em>weather_lightning.png</em></td>
+		<td><img src="icons/weather_rain.png" title="weather_rain.png" alt="weather rain "/><em>weather_rain.png</em></td>
+		<td><img src="icons/weather_snow.png" title="weather_snow.png" alt="weather snow "/><em>weather_snow.png</em></td>
+
+		<td><img src="icons/weather_sun.png" title="weather_sun.png" alt="weather sun "/><em>weather_sun.png</em></td>
+		<td><img src="icons/webcam.png" title="webcam.png" alt="webcam "/><em>webcam.png</em></td>
+		<td><img src="icons/webcam_add.png" title="webcam_add.png" alt="webcam add "/><em>webcam_add.png</em></td>
+		<td><img src="icons/webcam_delete.png" title="webcam_delete.png" alt="webcam delete "/><em>webcam_delete.png</em></td>
+		<td><img src="icons/webcam_error.png" title="webcam_error.png" alt="webcam error "/><em>webcam_error.png</em></td>
+	</tr>
+
+	<tr>
+		<td><img src="icons/world.png" title="world.png" alt="world "/><em>world.png</em></td>
+		<td><img src="icons/world_add.png" title="world_add.png" alt="world add "/><em>world_add.png</em></td>
+		<td><img src="icons/world_delete.png" title="world_delete.png" alt="world delete "/><em>world_delete.png</em></td>
+		<td><img src="icons/world_edit.png" title="world_edit.png" alt="world edit "/><em>world_edit.png</em></td>
+		<td><img src="icons/world_go.png" title="world_go.png" alt="world go "/><em>world_go.png</em></td>
+
+		<td><img src="icons/world_link.png" title="world_link.png" alt="world link "/><em>world_link.png</em></td>
+		<td><img src="icons/wrench.png" title="wrench.png" alt="wrench "/><em>wrench.png</em></td>
+		<td><img src="icons/wrench_orange.png" title="wrench_orange.png" alt="wrench orange "/><em>wrench_orange.png</em></td>
+		<td><img src="icons/xhtml.png" title="xhtml.png" alt="xhtml "/><em>xhtml.png</em></td>
+		<td><img src="icons/xhtml_add.png" title="xhtml_add.png" alt="xhtml add "/><em>xhtml_add.png</em></td>
+		<td><img src="icons/xhtml_delete.png" title="xhtml_delete.png" alt="xhtml delete "/><em>xhtml_delete.png</em></td>
+
+		<td><img src="icons/xhtml_go.png" title="xhtml_go.png" alt="xhtml go "/><em>xhtml_go.png</em></td>
+	</tr>
+	<tr>
+		<td><img src="icons/xhtml_valid.png" title="xhtml_valid.png" alt="xhtml valid "/><em>xhtml_valid.png</em></td>
+		<td><img src="icons/zoom.png" title="zoom.png" alt="zoom "/><em>zoom.png</em></td>
+		<td><img src="icons/zoom_in.png" title="zoom_in.png" alt="zoom in "/><em>zoom_in.png</em></td>
+		<td><img src="icons/zoom_out.png" title="zoom_out.png" alt="zoom out "/><em>zoom_out.png</em></td>
+
+		<td>&nbsp;</td>
+		<td>&nbsp;</td>
+		<td>&nbsp;</td>
+		<td>&nbsp;</td>
+		<td>&nbsp;</td>
+		<td>&nbsp;</td>
+		<td>&nbsp;</td>
+		<td>&nbsp;</td>
+	</tr></table>
+						</p>
+							
+					</div><!-- /content_inner -->
+					<!-- A break! -->
+					<br class="clear" />
+	 
+			</div><!-- /content_outer -->
+		
+		</div><!-- /container_inner -->
+	</div><!-- /container_outer -->
+
+	
+	</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/readme.txt b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/readme.txt
new file mode 100644
index 0000000..400a64d
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/readme.txt
@@ -0,0 +1,22 @@
+Silk icon set 1.3
+
+_________________________________________
+Mark James
+http://www.famfamfam.com/lab/icons/silk/
+_________________________________________
+
+This work is licensed under a
+Creative Commons Attribution 2.5 License.
+[ http://creativecommons.org/licenses/by/2.5/ ]
+
+This means you may use it for any purpose,
+and make any changes you like.
+All I ask is that you include a link back
+to this page in your credits.
+
+Are you using this icon set? Send me an email
+(including a link or picture if available) to
+mjames@gmail.com
+
+Any other questions about this icon set please
+contact mjames@gmail.com
\ No newline at end of file
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/shape_move_forwards.png b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/shape_move_forwards.png
new file mode 100644
index 0000000..cfe4493
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/shape_move_forwards.png
Binary files differ
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/shape_move_front.png b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/shape_move_front.png
new file mode 100644
index 0000000..b4a4e3b
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/shape_move_front.png
Binary files differ
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/shape_square.png b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/shape_square.png
new file mode 100644
index 0000000..33af046
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/famfamfam_icons/shape_square.png
Binary files differ
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/i18n/de.json b/org.eclipse.mdm.application/src/main/webapp/src/assets/i18n/de.json
new file mode 100644
index 0000000..52b4e18
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/i18n/de.json
@@ -0,0 +1,490 @@
+{
+  "administration": {
+    "admin-modules": {
+      "scope": "Geltungsbereich",
+      "modules": "Module",
+      "source": "Quelle",
+      "system": "System",
+      "user": "Benutzer",
+      "extsystems": "Externe Systeme",
+      "preferences": "Präferenzen"
+    },
+    "edit-preference": {
+      "btn-cancel": "Abbrechen",
+      "btn-save": "Speichern",
+      "err-cannot-load-data-source": "Datenquelle kann nicht geladen werden.",
+      "err-cannot-load-scope": "Geltungsbereich kann nicht geladen werden.",
+      "lbl-key": "Schlüssel",
+      "lbl-scope": "Geltungsbereich",
+      "lbl-source": "Quelle",
+      "lbl-value": "Wert",
+      "title-preferences-editor": "Einstellungseditor",
+      "tooltip-close": "Schließen"
+    },
+    "preference": {
+      "btn-add-preference": "Einstellung hinzufügen",
+      "btn-tooltip-delete-preference": "Entfernen",
+      "btn-tooltip-edit-preference": "Bearbeiten",
+      "err-cannot-save-preference": "Einstellung kann nicht gespeichert werden.",
+      "err-cannot-update-preference": "Einstellung kann nicht aktualisiert werden."
+    },
+    "extsystem": {
+      "loading": "Lade Daten...",
+      "loading-short": "Lade",
+      "dropdown-please-select": "Bitte auswählen",
+      "select-system": "Datenquelle auswählen",
+      "selected-system": "Gewählte Datenquelle",
+      "name": "Name",
+      "description": "Beschreibung",
+      "ext-system-attributes": "Externes System Attribute",
+      "mdm-attributes": "MDM Attribute",
+      "btn-add": "Neu hinzufügen",
+      "btn-edit": "Bearbeiten",
+      "btn-del": "Entfernen",
+      "btn-save": "Speichern",
+      "btn-cancel": "Abbrechen",
+      "btn-back": "Zurück",
+      "component-type": "Komponenten-Typ",
+      "component-name": "Komponenten-Name",
+      "attribute-name": "Attribut-Name",
+      "dialog-ext-system-title": "Externes System",
+      "dialog-ext-system-attr-title": "Externes System Attribute",
+      "dialog-ext-system-mdm-attr-title": "MDM Attribute",
+      "dialog-ext-system-delete-title": "Externes System löschen",
+      "dialog-ext-system-delete-text": "Bitte bestätigen Sie das Löschen des Externen Systems",
+      "err-cannot-update-ext-system": "Externes System kann nicht gespeichert werden",
+      "err-cannot-save-ext-system": "Externes System kann nicht aktualisiert werden",
+      "err-cannot-save-ext-system-attr": "Externes System Attribut kann nicht gespeichert werden",
+      "err-cannot-save-ext-mdm-attr": "MDM Attribut kann nicht gespeichert werden",
+      "err-cannot-load-comp-types": "Komponententypen konnten nicht geladen werden",
+      "loading-attributes": "Lade Attribute...",
+      "sensor": "Sensor",
+      "test-equipment": "Messgerät",
+      "test-sequence": "Testablauf",
+      "unit-under-test": "Prüfling"
+    }
+  },
+	"app": {
+		"about": "Über",
+		"language": "Sprache",
+		"logout": "Logout",
+    "roles": "Rollen"
+	},
+	"basket": {
+		"mdm-basket": {
+			"btn-load": "Laden",
+			"btn-shopping-basket": "Warenkorb",
+			"close": "Schließen",
+			"err-cannot-add-items-to-shopping-basket": "Items können nicht zum Warenkorb hinzugefügt werden.",
+			"err-cannot-add-selection": "Auswahl kann nicht hinzugefügt werden.",
+			"err-cannot-load-shopping-basket": "Warenkorb kann nicht geladen werden.",
+			"err-cannot-load-sources": "Quellen können nicht geladen werden",
+			"err-cannot-remove-selection": "Auswahl kann nicht entfernt werden.",
+			"err-cannot-select-view": "Ansicht kann nicht ausgewählt werden.",
+			"err-save-shopping-basket": "Ein Fehler ist aufgetreten. Der Warenkorb wurde nicht gespeichert.",
+			"existing-shopping-baskets": "Vorhandene Warenkörbe",
+			"item-save-shopping-basket": "ein Warenkorb",
+			"load-shopping-basket": "Warenkorb laden",
+			"no-saved-shopping-baskets-available": "Keine gespeicherten Warenkörbe vorhanden.",
+			"remove-selection": "Selektion entfernen",
+			"save-basket-as": "Warenkorb speichern als",
+			"shopping-basket": "Warenkorb",
+			"shopping-basket-name": "Warenkorb-Name",
+			"tooltip-clear-shopping-basket": "Warenkorb leeren",
+			"tooltip-close": "Schließen",
+			"tooltip-download-shopping-basket": "Warenkorb herunterladen",
+			"tooltip-no-name-set": "Kein Name ausgewählt",
+			"tooltip-open-shopping-basket": "Warenkorb öffnen",
+			"tooltip-save-shopping-basket": "Warenkorb speichern",
+			"tooltip-upload-shopping-basket": "Warenkorb hochladen",
+			"msg-atfx-only-supports-types": "Der ATFX Export unterstützt nur Elemente vom Typ: {{types}}.",
+			"msg-only-not-exportable-types-selected": "Aktuell sind nur Elemente vom Typ {{types}} selektiert!",
+			"msg-not-exportable-types-continue": "Einige Elemente sind vom Typ {{types}} und werden nicht exportiert. Sollen die übrigen Elemente exportiert werden?"
+		}
+	},
+	"core": {
+		"mdm-error-handler": {
+			"strings-error-message": "Applikationsfehler$Es ist ein Applikationsfehler aufgetreten. Für eine detailierte Fehlermeldung öffnen Sie bitte die Entwicklerkonsole Ihres Browsers."
+		},
+		"overwrite-dialog": {
+			"btn-cancel": "Abbrechen",
+			"btn-overwrite": "Überschreiben",
+			"label-with-this-name-already-exists": "Es existiert bereits {{label}} mit diesem Namen!"
+		}
+	},
+	"details": {
+		"detail-view": {
+			"err-cannot-load-preference-for-attributes-to-ignore": "Einstellung für zu ignorierende Attribute kann nicht geladen werden.",
+			"err-faulty-preference-for-attributes-to-ignore": "Einstellung für die zu ignorierenden Attribute ist fehlerhaft."
+		},
+		"mdm-detail-descriptive-data": {
+			"err-cannot-load-context": "Kontext kann nicht geladen werden.",
+			"err-cannot-load-data": "Daten können nicht geladen werden.",
+			"err-cannot-load-scope": "Bereich kann nicht geladen werden.",
+			"status-loading": "Lädt...",
+      "status-saving": "Speichert...",
+			"status-no-descriptive-data-available": "Keine beschriebenden Daten verfügbar.",
+			"status-no-nodes-available": "Keine Knoten verfügbar.",
+			"tblhdr-measured": "Gemessen",
+			"tblhdr-name": "Name",
+      "tblhdr-ordered": "Beauftragt",
+      "btn-edit": "Bearbeiten",
+      "btn-cancel": "Abbrechen",
+      "btn-save": "Speichern",
+      "input-dateformat": "dd.mm.yy",
+      "transform-dateformat": "dd.MM.yyyy HH:mm"
+		},
+		"mdm-detail-view": {
+			"cannot-update-node": "Knoten kann nicht aktualisiert werden."
+		},
+		"mdm-detail-panel": {
+			"btn-into-shopping-basket": "In den Warenkorb",
+			"cannot-update-node": "Knoten kann nicht aktualisiert werden.",
+			"tblhdr-attribute": "Attribut",
+			"tblhdr-unit": "Einheit",
+			"tblhdr-value": "Wert"
+		},
+		"mdm-detail": {
+			"general": "General",
+			"sensors": "Sensoren",
+			"test-equipment": "Messgerät",
+			"test-sequence": "Testablauf",
+			"unit-under-test": "Prüfling"
+		},
+		"sensor": {
+			"err-cannot-load-data": "Daten können nicht geladen werden.",
+			"err-cannot-load-descriptive-data": "Beschreibende Daten können nicht geladen werden.",
+			"err-cannot-load-scope": "Bereich kann nicht geladen werden.",
+			"status-loading": "Lädt...",
+			"status-no-descriptive-data-available": "Keine beschreibenden Daten verfügbar.",
+			"status-no-nodes-available": "Keine Knoten verfügbar.",
+			"tblhdr-measured": "Gemessen",
+			"tblhdr-name": "Name",
+			"tblhdr-ordered": "Beauftragt"
+		},
+    "attribute-editor": {
+      "cal-sunday": "Sonntag",
+      "cal-monday": "Montag",
+      "cal-tuesday": "Dienstag",
+      "cal-wednesday": "Mittwoch",
+      "cal-thursday": "Donnerstag",
+      "cal-friday": "Freitag",
+      "cal-saturday": "Samstag",
+      "cal-sun": "Son",
+      "cal-mon": "Mon",
+      "cal-tue": "Die",
+      "cal-wed": "Mit",
+      "cal-thu": "Don",
+      "cal-fri": "Fre",
+      "cal-sat": "Sam",
+      "cal-su": "So",
+      "cal-mo": "Mo",
+      "cal-tu": "Di",
+      "cal-we": "Mi",
+      "cal-th": "Do",
+      "cal-fr": "Fr",
+      "cal-sa": "Sa",
+      "cal-today": "Heute",
+      "cal-clear": "Löschen",
+      "cal-week": "Wo",
+      "cal-january": "Januar",
+      "cal-february": "Februar",
+      "cal-march": "März",
+      "cal-april": "April",
+      "cal-may": "Mai",
+      "cal-june": "Juni",
+      "cal-july": "Juli",
+      "cal-august": "August",
+      "cal-september": "September",
+      "cal-october": "Oktober",
+      "cal-november": "November",
+      "cal-december": "Dezember",
+      "cal-jan": "Jan",
+      "cal-feb": "Feb",
+      "cal-mar": "Mär",
+      "cal-apr": "Apr",
+      "cal-jun": "Jun",
+      "cal-jul": "Jul",
+      "cal-aug": "Aug",
+      "cal-sep": "Sep",
+      "cal-oct": "Okt",
+      "cal-nov": "Nov",
+      "cal-dec": "Dez",
+      "cal-format": "dd.mm.yy"
+    }
+	},
+	"filerelease": {
+		"filerelease": {
+			"format-pak2atfx": "ATFX",
+			"format-pak2raw": "Original-Daten",
+			"state-release-approved": "genehmigt",
+			"state-release-declined": "abgelehnt",
+			"state-release-expired": "abgelaufen",
+			"state-release-in-process": "in Bearbeitung",
+			"state-release-ordered": "beauftragt",
+			"state-release-processing-error": "Systemfehler",
+			"state-release-released": "freigegeben"
+		},
+		"mdm-filerelease-create": {
+			"btn-release-request": "Freigabeanfrage",
+			"btn-send": "Senden",
+			"err-cannot-create-release": "Release kann nicht erzeugt werden.",
+			"lbl-format": "Format",
+			"lbl-reason": "Begründung",
+			"lbl-validity-days": "Gültigkeit (Tage)",
+			"title-release": "Freigabe"
+		},
+		"mdm-filerelease-display": {
+			"lbl-error-message": "Fehlerbericht",
+			"lbl-expires-on": "Freigegeben bis",
+			"lbl-reason-for-declining": "Begründung für Ablehnung",
+			"lbl-reason-for-release": "Begründung für Freigabe",
+			"lbl-requested-by": "Antragsteller",
+			"lbl-state": "Status",
+			"lbl-test-name": "Versuchsname",
+			"lbl-test-responsible-person": "Messungsverantwortlicher",
+			"lbl-validity": "Freigabedauer",
+			"tlbl-format": "Format"
+		},
+		"mdm-filerelease": {
+			"btn-approve": "Genehmigen",
+			"btn-cancel": "Abbrechen",
+			"btn-cancel-request": "Anfrage zurückziehen/entfernen",
+			"btn-decline": "Ablehnen",
+			"days": "Tage",
+			"err-cannot-read-outgoing-release": "Ausgehendes Release kann nicht gelesen werden.",
+			"err-error-approving-release": "Fehler beim Bestätigen des Releases.",
+			"err-error-declining-release": "Fehler beim Zurückweisen des Releases.",
+			"incoming-release-requests": "Freigabeantragseingang",
+			"outgoing-release-requests": "Freigabeantragsausgang",
+			"reason": "Begründung",
+			"release": "Freigabe",
+			"tblhdr-download": "Download",
+			"tblhdr-format": "Format",
+			"tblhdr-release-expires-on": "Freigegeben bis",
+			"tblhdr-release-validity": "Freigabedauer",
+			"tblhdr-request-submitted-by": "Antragsteller",
+			"tblhdr-status": "Status",
+			"tblhdr-test-name": "Versuchsname",
+			"tblhdr-test-responsible-person": "Messungsverantwortlicher"
+		}
+	},
+	"modules": {
+		"mdm-modules": {
+			"details": "Details",
+			"mdm-search": "MDM Suche",
+			"file-explorer": "Dokumente"
+		}
+	},
+	"navigator-view": {
+		"mdm-navigator-view": {
+			"err-cannot-update-node-provider": "Nodeprovider kann nicht aktualisiert werden.",
+			"navigator": "Navigator",
+			"select-node-provider": "Baumdarstellung auswählen",
+			"tooltip-scroll-up": "Zum Seitenanfang"
+		}
+	},
+	"navigator": {
+		"mdm-navigator": {
+			"add-to-shopping-basket": "In Warenkorb legen",
+			"err-cannot-load-nodes": "Knoten können nicht geladen werden.",
+			"err-cannot-open-node": "Knoten kann nicht geöffnet werden.",
+			"err-cannot-open-node-in-navigation-tree": "Knoten kann nicht im Navigationsbaum geöffnet werden.",
+			"err-cannot-update-navigation-tree": "Navigationsbaum kann nicht aktualisiert werden.",
+			"loading-subordinate-items": "Unterpunkte werden geladen...",
+			"msg-item-type-not-supported": "'Dieser Knotentyp wird von der aktuellen Ansicht nicht angezeigt!"
+		},
+		"navigator": {
+			"err-cannot-set-item": "Item konnte nicht gesetzt werden."
+		},
+		"nodeprovider": {
+			"err-cannot-load-node-provider-from-settings": "Nodeprovider kann nicht aus den Einstellungen geladen werden.",
+			"err-unsupported-type": "Typ {{ type }} wird nicht unterstützt! Es sollte Typ {{ typeToUse }} verwendet werden."
+		},
+		"attribute-value": {
+			"msg-no-files-attached": "Keine Dateien angehangen",
+			"msg-one-file-attached": "1 Datei angehangen",
+			"msg-x-files-attached": "{{numberOfFiles}} Dateien angehangen"
+		}
+	},
+	"search": {
+		"edit-searchfields": {
+			"btn-apply-changes": "Änderungen übernehmen",
+			"enter-search-text": "Suchtext eingeben",
+			"err-cannot-update-selected-node": "Ausgewählter Knoten kann nicht aktualisiert werden.",
+			"lbl-selected-search-attributes": "Ausgewählte Suchattribute",
+			"no-search-attributes-selected": "Keine Suchattribute ausgewählt.",
+			"remove": "Entfernen",
+			"search-field-already-selected": "Das Suchfeld wurde bereits ausgewählt!",
+			"title-search-field-editor": "Suchfeld Editor",
+			"tooltip-close": "Schließen"
+		},
+		"filter": {
+			"new-filter": "Neuer Filter",
+			"no-filter-selected": "Kein Filter ausgewählt"
+		},
+		"mdm-search": {
+			"a-filter": "ein Filter",
+			"add-to-shopping-basket": "In Warenkorb legen",
+			"btn-save": "Speichern",
+			"btn-search": "Suche",
+			"enter-search-text": "Suchtext eingeben",
+			"err-cannot-delete-search-filter": "Filter kann nicht gelöscht werden",
+			"err-cannot-delete-search-filter-none-selected": "Der Vorgang konnte nicht durchgeführt werden, da kein gespeicherter Filter zum Löschen ausgewählt wurde.",
+			"err-cannot-display-search-field-editor": "Suchfeldeditor kann nicht angezeigt werden.",
+			"err-cannot-load-data-sources": "Datenquellen können nicht geladen werden.",
+			"err-cannot-load-search-filter": "Suchfilter kann nicht geladen werden.",
+			"err-cannot-process-search-query": "Suchanfrage kann nicht bearbeitet werden.",
+			"err-cannot-save-search-filter": "Suchfilter kann nicht gespeichert werden",
+			"err-cannot-update-view": "Ansicht kann nicht aktualisiert werden.",
+			"err-too-many-search-results": "Es werden die ersten {{ numresults }} Suchergebnisse aus {{ source }} angezeigt. Bitte schränken Sie die Suchanfrage weiter ein.",
+			"errheading-cannot-delete-search-filter-none-selected": "Kein Filter ausgewählt.",
+			"errheading-too-many-search-results": "Zu viele Suchergebnisse",
+			"global-search-attributes": "Globale Suchattribute",
+			"lbl-advanced-search": "Erweiterte Suche",
+			"lbl-result-type": "Ergebnistyp",
+			"lbl-search-filter": "Suchfilter",
+			"lbl-source": "Quelle",
+			"no-search-attributes-selected": "Keine Suchattribute ausgewählt.",
+			"results": "Ergebnisse",
+			"search-attributes-from": "Suchattribute aus",
+			"search-filter-name": "Filtername",
+			"select-search-filter": "Suchfilter auswählen",
+			"title-save-search-filter-as": "Suchfilter speichern unter",
+			"tooltip-add-selection-to-shopping-basket": "Auswahl zum Warenkorb hinzufügen",
+			"tooltip-clear-search-results": "Suchergebnisliste leeren",
+			"tooltip-create-new-search-filter": "Neuen Suchfilter anlegen",
+			"tooltip-delete-search-filter": "Suchfilter löschen",
+			"tooltip-disable-advanced-search": "Erweiterte Suche deaktivieren",
+			"tooltip-edit-search-filter": "Suchfilter bearbeiten",
+			"tooltip-enable-advanced-search": "Erweiterte Suche aktivieren",
+			"tooltip-global-search-attributes": "Globale Suchattribute sind Attribute, die in allen ausgewählten Datenquellen vorhanden sind. Global Suchattribute werden nur einmal dargestellt und die definierte Bedingung wird in allen Datenquellen angewendet.",
+			"tooltip-no-name-set": "Name nicht gesetzt!",
+			"tooltip-reset-search-conditions": "Suchkriterien zurücksetzen",
+			"tooltip-save-search-filter": "Suchfilter speichern",
+			"tooltip-search-text": "Mögliche Operatoren:\n+ steht für einen UND Operator\n| steht für einen ODER Operator\n- negiert einen einzelnen Term\n\" fasst einen Menge von Termen zu einer Phrase zusammen\n* am Ende eines Suchterms beschreibt eine Präfixsuche\n( und ) beschreibt die Operatorpräferenz\n~N nach einem Wort beschreibt den Editierabstand (Unschärfe)\n~N nach einer Phrase beschreibt den Wortabstand\nWenn nach einem der Spezialsymbole gesucht werden soll, müssen diese mit \\ escaped werden.",
+			"tooltip-select-sources": "Quellen auswählen"
+		},
+		"search-condition": {
+			"err-cannot-initialize-autocompletion": "Autotvervollständigung kann nicht initialisiert werden.",
+			"tooltip-select-search-operator": "Suchoperator auswählen"
+		},
+		"search-datepicker": {
+			"placeholder-dateformat": "TT.MM.JJJJ HH:MM",
+			"tooltip-select-date": "Datum auswählen"
+		},
+		"search": {
+			"err-cannot-load-preference-for-attributes-to-ignore": "Einstellung für zu ignorierende Attribute kann nicht geladen werden.",
+			"err-faulty-preference-for-attributes-to-ignore": "Einstellung für zu ignorierende Attribute ist fehlerhaft."
+		}
+	},
+	"tableview": {
+		"editview": {
+			"attribute-already-selected": "Das Attribut wurde bereits ausgewählt!",
+			"btn-apply-changes": "Änderungen anwenden",
+			"enter-search-text": "Suchtext eingeben",
+			"err-cannot-load-nodes": "Knoten können nicht geladen werden.",
+			"err-cannot-load-search-attributes": "Suchattribute können nicht geladen werden.",
+			"err-cannot-select-node": "Knoten kann nicht ausgewählt werden.",
+			"lbl-selected-attributes": "Ausgewählte Attribute",
+			"no-attributes-selected": "Keine Attribute ausgewählt.",
+			"title-view-editor": "Ansichtseditor"
+		},
+		"tableview": {
+			"err-cannot-calculate-node": "Knoten konnte nicht berechnet werden.",
+			"err-cannot-save-view": "Ansicht konnte nicht gespeichert werden.",
+			"loading-search-results": "Suchergebnisse werden geladen...",
+			"no-records-found": "Keine Datensätze gefunden.",
+			"reset-selection": "Selektion zurücksetzen",
+			"show-in-tree": "Im Baum zeigen",
+			"tooltip-add-to-shopping-basket": "Zum Warenkorb hinzufügen",
+			"tooltip-open-in": "Öffnen in",
+			"tooltip-remove-from-shopping-basket": "Aus dem Warenkorb entfernen"
+		},
+		"view": {
+			"a-view": "eine Ansicht",
+			"btn-save": "Speichern",
+			"err-cannot-delete-view": "Die Ansicht kann nicht gelöscht werden.",
+			"err-cannot-display-view-editor": "Ansichtseditor kann nicht angezeigt werden.",
+			"err-cannot-load-views": "Ansichten können nicht geladen werden.",
+			"err-cannot-modify-system-settings": "Systemeinstellungen können nicht aus der Anwendung geändert werden. Sollten sie entsprechende Zugriffsrechte besitzen, können Sie diese Einstellungen über den Administrationsbereich bearbeiten.",
+			"err-cannot-save-view": "Ansicht konnte nicht gespeichert werden.",
+			"err-cannot-select-view": "Ansicht kann nicht ausgewählt werden.",
+			"err-cannot-update-views": "Ansichten konnten nicht aktualisiert werden.",
+			"err-deleting-view": "Es ist ein Fehler beim Löschen der Ansicht aufgetreten.",
+			"err-saving-view": "'Es ist ein Fehler beim Speichern der Ansicht aufgetreten.",
+			"existing-view-names": "Vorhandene Ansichtsnamen",
+			"new-view": "Neue Ansicht",
+			"title-save-view-as": "Ansicht speichern unter",
+			"tooltip-create-new-view": "Neue Ansicht erstellen",
+			"tooltip-delete-view": "Ansicht löschen",
+			"tooltip-edit-view": "Ansicht bearbeiten",
+			"tooltip-no-name-set": "Name nicht gesetzt!",
+			"tooltip-save-view": "Ansicht speichern",
+			"tooltip-select-view": "Ansicht auswählen"
+		}
+	},
+	"chartviewer": {
+		"request-options": {},
+		"xy-chart-data-selection-panel": {
+			"select-channel-placeholder": "Kanal wählen",
+			"no-x-channel-dialog-header": "Information",
+			"no-x-channel-dialog-message": "Die aktuelle Kanalgruppe hat keine Kanäle die als X-Achse bzw. XY-Achse definiert sind. Wenn Sie auch als Y-Achse definierte Kanäle zulassen möchten, deaktivieren Sie bitte den Filter in der Werkzeugleiste."
+		},
+		"xy-chart-viewer": {},
+		"xy-chart-viewer-nav-card": {
+			"no-node-selected": "Kein Knoten ausgewählt"
+		},
+		"xy-chart-viewer-toolbar": {
+			"hide-data-selection-panel": "Datenauswahlpanel verbergen",
+			"show-data-selection-panel": "Datenauswahlpanel anzeigen",
+			"activate-xy-mode": "Kanal Auswahloptionen nach Achsentyp filtern",
+			"deactivate-xy-mode": "Alle Kanäle als Auswahloptionen anzeigen",
+			"hide-chart-legend": "Legende des Diagramms verbergen",
+			"show-chart-legend": "Legende des Diagramms anzeigen",
+			"line-width": "Linienstärke",
+			"show-lines": "Verbindungslinien anzeigen",
+			"hide-lines": "Verbindungslinien verbergen",
+			"fill-area": "Fläche unter dem Graph füllen",
+			"clear-area": "Fläche unter dem Graph leeren",
+			"show-datapoints": "Datenpunkte markieren",
+			"hide-datapoints": "Datenpunkte verbergen",
+			"tension": "Tension: 0 = Linear, 0.4 = Bezierkurve"
+		}
+	},
+	"file-explorer": {
+		"file-explorer": {
+			"btn-add-files": "Dateien hinzufügen",
+			"btn-delete-file": "Datei löschen",
+			"btn-download-file": "Datei herunterladen",
+			"btn-preview-file": "Vorschau",
+			"btn-refresh": "Aktualisieren",
+			"btn-remove-all-files-from-selection": "Dateiauswahl leeren",
+			"btn-remove-file-from-selection": "Datei aus Auswahl entfernen",
+			"btn-upload-file-selection": "Ausgewählte Dateien hochladen",
+			"btn-upload-file": "Datei hochladen",
+			"btn-upload-files": "Dateien hochladen",
+
+			"hdr-description": "Beschreibung",
+			"hdr-filename": "Dateiname",
+			"hdr-size": "Größe",
+			"hdr-type": "Typ",
+			"hdr-file-upload-wizzard": "File upload wizzard for ",
+
+			"msg-no-files-attached": "Keine Dateien angehangen.",
+			"msg-confirm-delete-file-from-db": "Sind Sie sicher, dass Sie die ausgewählte Datei von der Datenbank löschen möchten?",
+
+			"ttl-attached-to": "Dateien angehangen an: ",
+			"ttl-confirmation": "Bestätigung"
+		},
+		"file-explorer-nav-card": {
+			"status-node-is-no-files-attachable": "An {{type}}s können keine Dateien angehangen werden.",
+			"status-no-node-selected": "Kein Knoten ausgewählt."
+		},
+		"file-link-editor-dialog": {
+			"btn-cancel": "Abbrechen",
+			"btn-save-changes": "Speichern",
+			"btn-change-file": "Datei ändern"
+		}
+	}
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/assets/i18n/en.json b/org.eclipse.mdm.application/src/main/webapp/src/assets/i18n/en.json
new file mode 100644
index 0000000..1b1f927
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/assets/i18n/en.json
@@ -0,0 +1,489 @@
+{
+	"administration": {
+    "admin-modules": {
+      "scope": "Scope",
+      "modules": "Module",
+      "source": "Source",
+      "system": "System",
+      "user": "User",
+      "extsystems": "External Systems",
+      "preferences": "Preferences"
+    },
+		"edit-preference": {
+			"btn-cancel": "Cancel",
+			"btn-save": "Save",
+			"err-cannot-load-data-source": "Cannot load data source.",
+			"err-cannot-load-scope": "Cannot load scope.",
+			"lbl-key": "Key",
+			"lbl-scope": "Scope",
+			"lbl-source": "Source",
+			"lbl-value": "Value",
+			"title-preferences-editor": "Preferences Editor",
+			"tooltip-close": "Close"
+		},
+    "preference": {
+      "btn-add-preference": "Add preference",
+      "btn-tooltip-delete-preference": "Delete",
+      "btn-tooltip-edit-preference": "Edit",
+      "err-cannot-save-preference": "Cannot save preference.",
+      "err-cannot-update-preference": "Cannot update preference."
+    },
+    "extsystem": {
+      "loading": "Loading data...",
+      "loading-short": "Loading",
+      "dropdown-please-select": "Please select...",
+      "select-system": "Select environment",
+      "selected-system": "Selected environment",
+      "name": "Name",
+      "description": "Description",
+      "ext-system-attributes": "Ext. system attributes",
+      "mdm-attributes": "MDM attributes",
+      "btn-add": "Add new",
+      "btn-edit": "Edit",
+      "btn-del": "Remove",
+      "btn-save": "Save",
+      "btn-cancel": "Cancel",
+      "btn-back": "Back",
+      "component-type": "Component type",
+      "component-name": "Component name",
+      "attribute-name": "Attribute name",
+      "dialog-ext-system-title": "External system",
+      "dialog-ext-system-attr-title": "External system attribute",
+      "dialog-ext-system-mdm-attr-title": "MDM attribute",
+      "dialog-ext-system-delete-title": "External system deletion",
+      "dialog-ext-system-delete-text": "Please confirm the deletion of the external system",
+      "err-cannot-update-ext-system": "External system cannot be saved",
+      "err-cannot-save-ext-system": "External system cannot be refreshed",
+      "err-cannot-save-ext-system-attr": "External system attribute cannot be saved",
+      "err-cannot-save-ext-mdm-attr": "MDM attribute cannot be saved",
+      "err-cannot-load-comp-types": "Cannot load component types",
+      "loading-attributes": "Loading attributes...",
+      "sensor": "Sensor",
+      "test-equipment": "Test equipment",
+      "test-sequence": "Test sequence",
+      "unit-under-test": "Unit under test"
+    }
+	},
+	"app": {
+		"about": "About",
+		"language": "Language",
+		"logout": "Logout",
+    "roles": "Roles"
+	},
+	"basket": {
+		"mdm-basket": {
+			"btn-load": "Load",
+			"btn-shopping-basket": "Shopping basket",
+			"close": "Close",
+			"err-cannot-add-items-to-shopping-basket": "Cannot add items to shopping basket.",
+			"err-cannot-add-selection": "Cannot add selection.",
+			"err-cannot-load-shopping-basket": "Cannot load shopping basket.",
+			"err-cannot-load-sources": "Cannot load sources.",
+			"err-cannot-remove-selection": "Cannot remove selection.",
+			"err-cannot-select-view": "Cannot select view.",
+			"err-save-shopping-basket": "An error has occurred. The shopping basket has not been saved.",
+			"existing-shopping-baskets": "Existing shopping baskets",
+			"item-save-shopping-basket": "a shopping basket",
+			"load-shopping-basket": "Load shopping basket",
+			"no-saved-shopping-baskets-available": "No saved shopping baskets available",
+			"save-basket-as": "Save shopping basket as",
+			"shopping-basket": "Shopping basket",
+			"shopping-basket-name": "Shopping basket name",
+			"remove-selection": "Remove selection",
+			"tooltip-clear-shopping-basket": "Clear shopping basket",
+			"tooltip-close": "Close",
+			"tooltip-download-shopping-basket": "Download shopping basket",
+			"tooltip-no-name-set": "No name set",
+			"tooltip-open-shopping-basket": "Open shopping basket",
+			"tooltip-save-shopping-basket": "Save shopping basket",
+			"tooltip-upload-shopping-basket": "Upload shopping basket",
+			"msg-atfx-only-supports-types": "ATFX export only supports export of types: {{types}}.",
+			"msg-only-not-exportable-types-selected": "Currently only items of type {{types}} are selected!",
+			"msg-not-exportable-types-continue": "Some items are of type {{types}} and will not be exported. Continue exporting supported types?"
+		}
+	},
+	"core": {
+		"mdm-error-handler": {
+			"strings-error-message": "Application Error$An application error has occurred. For a detailed error message please open your browser's developer console."
+		},
+		"overwrite-dialog": {
+			"btn-cancel": "Cancel",
+			"btn-overwrite": "Overwrite",
+			"label-with-this-name-already-exists": "{{label}} with this name already exists!"
+		}
+	},
+	"details": {
+		"detail-view": {
+			"err-cannot-load-preference-for-attributes-to-ignore": "Cannot load preference for attributes to ignore.",
+			"err-faulty-preference-for-attributes-to-ignore": "Faulty preference for attributes to ignore."
+		},
+    "mdm-detail-descriptive-data": {
+      "err-cannot-load-context": "Cannot load context.",
+      "err-cannot-load-data": "Cannot load data.",
+      "err-cannot-load-scope": "Cannot load scope.",
+      "status-loading": "Loading...",
+      "status-saving": "Saving...",
+      "status-no-descriptive-data-available": "No descriptive data available.",
+      "status-no-nodes-available": "No nodes available.",
+      "tblhdr-measured": "Measured",
+      "tblhdr-name": "Name",
+      "tblhdr-ordered": "Ordered",
+      "btn-edit": "Edit",
+      "btn-cancel": "Cancel",
+      "btn-save": "Save",
+      "input-dateformat": "mm/dd/yy",
+      "transform-dateformat": "MM/dd/yyyy HH:mm"
+    },
+		"mdm-detail-view": {
+			"cannot-update-node": "Cannot update node."
+		},
+		"mdm-detail-panel": {
+			"btn-into-shopping-basket": "Into shopping basket",
+			"cannot-update-node": "Cannot update node.",
+			"tblhdr-attribute": "Attribute",
+			"tblhdr-unit": "Unit",
+			"tblhdr-value": "Value"
+		},
+		"mdm-detail": {
+			"general": "General",
+			"sensors": "Sensors",
+			"test-equipment": "Test equipment",
+			"test-sequence": "Test sequence",
+			"unit-under-test": "Unit under test"
+		},
+		"sensor": {
+			"err-cannot-load-data": "Cannot load data.",
+			"err-cannot-load-descriptive-data": "Cannot load descriptive data.",
+			"err-cannot-load-scope": "Cannot load scope.",
+			"status-loading": "Loading...",
+			"status-no-descriptive-data-available": "No descriptive data available.",
+			"status-no-nodes-available": "No nodes available.",
+			"tblhdr-measured": "Measured",
+			"tblhdr-name": "Name",
+			"tblhdr-ordered": "Ordered"
+		},
+    "attribute-editor": {
+      "cal-sunday": "Sunday",
+      "cal-monday": "Monday",
+      "cal-tuesday": "Tuesday",
+      "cal-wednesday": "Wednesday",
+      "cal-thursday": "Thursday",
+      "cal-friday": "Friday",
+      "cal-saturday": "Saturday",
+      "cal-sun": "Sun",
+      "cal-mon": "Mon",
+      "cal-tue": "Tue",
+      "cal-wed": "Wed",
+      "cal-thu": "Thu",
+      "cal-fri": "Fri",
+      "cal-sat": "Sat",
+      "cal-su": "Su",
+      "cal-mo": "Mo",
+      "cal-tu": "Tu",
+      "cal-we": "We",
+      "cal-th": "Th",
+      "cal-fr": "Fr",
+      "cal-sa": "Sa",
+      "cal-today": "Today",
+      "cal-clear": "Clear",
+      "cal-week": "We",
+      "cal-january": "January",
+      "cal-february": "February",
+      "cal-march": "March",
+      "cal-april": "April",
+      "cal-may": "May",
+      "cal-june": "June",
+      "cal-july": "July",
+      "cal-august": "August",
+      "cal-september": "September",
+      "cal-october": "October",
+      "cal-november": "November",
+      "cal-december": "December",
+      "cal-jan": "Jan",
+      "cal-feb": "Feb",
+      "cal-mar": "Mar",
+      "cal-apr": "Apr",
+      "cal-jun": "Jun",
+      "cal-jul": "Jul",
+      "cal-aug": "Aug",
+      "cal-sep": "Sep",
+      "cal-oct": "Oct",
+      "cal-nov": "Nov",
+      "cal-dec": "Dec",
+      "cal-format": "mm-dd-yy"
+    }
+	},
+	"filerelease": {
+		"filerelease": {
+			"format-pak2atfx": "ATFX",
+			"format-pak2raw": "Original data",
+			"state-release-approved": "approved",
+			"state-release-declined": "declined",
+			"state-release-expired": "expired",
+			"state-release-in-process": "in process",
+			"state-release-ordered": "ordered",
+			"state-release-processing-error": "processing error",
+			"state-release-released": "released"
+		},
+		"mdm-filerelease-create": {
+			"btn-release-request": "Release request",
+			"btn-send": "Send",
+			"err-cannot-create-release": "Cannot create release.",
+			"lbl-format": "Format",
+			"lbl-reason": "Reason",
+			"lbl-validity-days": "Validity (days)",
+			"title-release": "Release"
+		},
+		"mdm-filerelease-display": {
+			"lbl-error-message": "Error message",
+			"lbl-expires-on": "Expires on",
+			"lbl-reason-for-declining": "Reson for declining",
+			"lbl-reason-for-release": "Reason for release",
+			"lbl-requested-by": "Requested by",
+			"lbl-state": "Status",
+			"lbl-test-name": "Test name",
+			"lbl-test-responsible-person": "Responsible person for test",
+			"lbl-validity": "Validity",
+			"tlbl-format": "Format"
+		},
+		"mdm-filerelease": {
+			"btn-approve": "Approve",
+			"btn-cancel": "Cancel",
+			"btn-cancel-request": "Cancel request",
+			"btn-decline": "Decline",
+			"days": "days",
+			"err-cannot-read-outgoing-release": "Cannot read outgoing release.",
+			"err-error-approving-release": "Error approving release.",
+			"err-error-declining-release": "Error declining release.",
+			"incoming-release-requests": "Incoming release requests",
+			"outgoing-release-requests": "Outgoing release requests",
+			"reason": "Reason",
+			"release": "Release",
+			"tblhdr-download": "Download",
+			"tblhdr-format": "Format",
+			"tblhdr-release-expires-on": "Expires on",
+			"tblhdr-release-validity": "Validity",
+			"tblhdr-request-submitted-by": "Submitted by",
+			"tblhdr-status": "Status",
+			"tblhdr-test-name": "Test name",
+			"tblhdr-test-responsible-person": "Responsible person for test"
+		}
+	},
+	"modules": {
+		"mdm-modules": {
+			"details": "Details",
+			"mdm-search": "MDM Search",
+			"file-explorer": "Files"
+		}
+	},
+	"navigator-view": {
+		"mdm-navigator-view": {
+			"err-cannot-update-node-provider": "Cannot update node provider.",
+			"navigator": "Navigator",
+			"select-node-provider": "Select tree view",
+			"tooltip-scroll-up": "Top of page"
+		}
+	},
+	"navigator": {
+		"mdm-navigator": {
+			"add-to-shopping-basket": "Add to shopping basket",
+			"err-cannot-load-nodes": "Cannot load nodes.",
+			"err-cannot-open-node": "Cannot open node.",
+			"err-cannot-open-node-in-navigation-tree": "Cannot open node in navigation tree.",
+			"err-cannot-update-navigation-tree": "Cannot update navigation tree.",
+			"loading-subordinate-items": "Loading subordinate items...",
+			"msg-item-type-not-supported": "This node type is not supported by the current view!"
+		},
+		"navigator": {
+			"err-cannot-set-item": "Cannot set item."
+		},
+		"nodeprovider": {
+			"err-cannot-load-node-provider-from-settings": "Cannot load node provider from settings",
+			"err-unsupported-type": "Type {{ type }} is not supported. Type {{ typeToUse }} should be used instead."
+		},
+		"attribute-value": {
+			"msg-no-files-attached": "No files attached",
+			"msg-one-file-attached": "1 file attached",
+			"msg-x-files-attached": "{{numberOfFiles}} files attached"
+		}
+	},
+	"search": {
+		"edit-searchfields": {
+			"btn-apply-changes": "Apply changes",
+			"enter-search-text": "Enter search text",
+			"err-cannot-update-selected-node": "Cannot update the selected node.",
+			"lbl-selected-search-attributes": "Selected search attributes",
+			"no-search-attributes-selected": "No search attributes selected.",
+			"remove": "Remove",
+			"search-field-already-selected": "The search field has already been selected!",
+			"title-search-field-editor": "Search field editor",
+			"tooltip-close": "Close"
+		},
+		"filter": {
+			"new-filter": "New filter",
+			"no-filter-selected": "No filter selected"
+		},
+		"mdm-search": {
+			"a-filter": "a filter",
+			"add-to-shopping-basket": "Add to shopping basket",
+			"btn-save": "Save",
+			"btn-search": "Search",
+			"enter-search-text": "Enter search text",
+			"err-cannot-delete-search-filter": "Cannot delete search filter.",
+			"err-cannot-delete-search-filter-none-selected": "Action could not be executed as no saved filter was selected for deletion.",
+			"err-cannot-display-search-field-editor": "Cannot display search filed editor.",
+			"err-cannot-load-data-sources": "Cannot load data sources.",
+			"err-cannot-load-search-filter": "Cannot load search filter.",
+			"err-cannot-process-search-query": "Cannot process search query.",
+			"err-cannot-save-search-filter": "Cannot save search filter.",
+			"err-cannot-update-view": "Cannot update view.",
+			"err-too-many-search-results": "The first {{ numresults }} search results from {{ source }} are shown. Please qualify the search query further.",
+			"errheading-cannot-delete-search-filter-none-selected": "No filter selected",
+			"errheading-too-many-search-results": "Too many search results",
+			"global-search-attributes": "Global search attributes",
+			"lbl-advanced-search": "Advanced search",
+			"lbl-result-type": "Result type",
+			"lbl-search-filter": "Search filter",
+			"lbl-source": "Source",
+			"no-search-attributes-selected": "No search attributes selected.",
+			"results": "Results",
+			"search-attributes-from": "Search attributes from",
+			"search-filter-name": "Filter name",
+			"title-save-search-filter-as": "Save search filter as",
+			"select-search-filter": "Select search filter",
+			"tooltip-add-selection-to-shopping-basket": "Add selection to shopping basket",
+			"tooltip-clear-search-results": "Clear search results",
+			"tooltip-create-new-search-filter": "Create new search filter",
+			"tooltip-delete-search-filter": "Delete search filter",
+			"tooltip-disable-advanced-search": "Disable advanced search",
+			"tooltip-edit-search-filter": "Edit search filter",
+			"tooltip-enable-advanced-search": "Enable advanced search",
+			"tooltip-global-search-attributes": "Global search attributes are attributes present in all data sources selected. Global search attributes are displayed only once and the condition defined in them is applied to all data sources.",
+			"tooltip-no-name-set": "No name set!",
+			"tooltip-reset-search-conditions": "Reset search conditions",
+			"tooltip-save-search-filter": "Save search filter",
+			"tooltip-search-text": "Operators available:\n+ represents an AND operator\n| represents an OR operator\n- negates a single term\n\" combines a set of terms into a phrase\n* at the end of a search term describes a prefix search\n( and ) describe the operator preference\n~N after a word describes the edit distance (fuzziness)\n~N after a phrase describes the word distance\nIf one of the special symbols is to be included in a search, they must be escaped with \\.",
+			"tooltip-select-sources": "Select sources"
+		},
+		"search-condition": {
+			"err-cannot-initialize-autocompletion": "Cannot initialize autocompletion.",
+			"tooltip-select-search-operator": "Select search operator"
+		},
+		"search-datepicker": {
+			"placeholder-dateformat": "DD.MM.YYYY HH:MM",
+			"tooltip-select-date": "Select date"
+		},
+		"search": {
+			"err-cannot-load-preference-for-attributes-to-ignore": "Cannot load preference for attributes to ignore.",
+			"err-faulty-preference-for-attributes-to-ignore": "Faulty preference for attributes to ignore."
+		}
+	},
+	"tableview": {
+		"editview": {
+			"attribute-already-selected": "The attribute has already been selected!",
+			"btn-apply-changes": "Apply changes",
+			"enter-search-text": "Enter search text",
+			"err-cannot-load-nodes": "Cannot load nodes.",
+			"err-cannot-load-search-attributes": "Cannot load search attributes.",
+			"err-cannot-select-node": "Cannot select node.",
+			"lbl-selected-attributes": "Selected attributes",
+			"no-attributes-selected": "No attributes selected.",
+			"title-view-editor": "View editor"
+		},
+		"tableview": {
+			"err-cannot-calculate-node": "Cannot calculate node.",
+			"err-cannot-save-view": "Cannot save view.",
+			"loading-search-results": "Loading search results...",
+			"no-records-found": "No records found.",
+			"reset-selection": "Reset selection",
+			"show-in-tree": "Show in tree",
+			"tooltip-add-to-shopping-basket": "Add to shopping basket",
+			"tooltip-open-in": "Open in",
+			"tooltip-remove-from-shopping-basket": "Remove from shopping basket"
+		},
+		"view": {
+			"a-view": "a view",
+			"btn-save": "Save",
+			"err-cannot-delete-view": "Cannot delete view.",
+			"err-cannot-display-view-editor": "Cannot display view editor.",
+			"err-cannot-load-views": "Cannot load views.",
+			"err-cannot-modify-system-settings": "System settings cannot be modified from inside the application. Should you have appropriate access rights, you can modify these settings in the administration section.",
+			"err-cannot-save-view": "Cannot save view.",
+			"err-cannot-select-view": "Cannot select view.",
+			"err-cannot-update-views": "Cannot update views.",
+			"err-deleting-view": "An error has occurred when deleting the view.",
+			"err-saving-view": "An error has occurred when saving the view.",
+			"existing-view-names": "Existing view names",
+			"new-view": "New view",
+			"title-save-view-as": "Save view as",
+			"tooltip-create-new-view": "Create new view",
+			"tooltip-delete-view": "Delete view",
+			"tooltip-edit-view": "Edit view",
+			"tooltip-no-name-set": "No name set!",
+			"tooltip-save-view": "Save view",
+			"tooltip-select-view": "Select view"
+		}
+	},
+	"chartviewer": {
+		"request-options": {},
+		"xy-chart-data-selection-panel": {
+			"select-channel-placeholder": "Select Channel",
+			"no-x-channel-dialog-header": "Information",
+			"no-x-channel-dialog-message": "The current ChannelGroup has no Channels defined as X-axis or XY-axis. If you want to also allow Channels marked as Y-axis, toggle the corresponding filter in the toolbar."
+		},
+		"xy-chart-viewer": {},
+		"xy-chart-viewer-nav-card": {
+			"no-node-selected": "No node selected"
+		},
+		"xy-chart-viewer-toolbar": {
+			"hide-data-selection-panel": "Hide data selection panel",
+			"show-data-selection-panel": "Show data selection panel",
+			"activate-xy-mode": "Filter channel options by axis-type",
+			"deactivate-xy-mode": "Provide all channel options",
+			"hide-chart-legend": "Hide chart legend",
+			"show-chart-legend": "Show chart legend",
+			"line-width": "Line width",
+			"show-lines": "Draw lines",
+			"hide-lines": "Hide lines",
+			"fill-area": "Fill area underneath the graph",
+			"clear-area": "Clear area underneath the graph",
+			"show-datapoints": "Mark datapoints",
+			"hide-datapoints": "Hide datapoints",
+			"tension": "Line tension: 0 = linear, 0.4 = Bezier curve"
+		}
+	},
+	"file-explorer": {
+		"file-explorer": {
+			"btn-add-files": "Add files",
+			"btn-delete-file": "Delete file",
+			"btn-download-file": "Download file",
+			"btn-preview-file": "Preview",
+			"btn-refresh": "Update",
+			"btn-remove-all-files-from-selection": "Clean file selection",
+			"btn-remove-file-from-selection": "Remove file from selection",
+			"btn-upload-file-selection": "Upload selected files",
+			"btn-upload-file": "Upload file",
+			"btn-upload-files": "Upload files",
+
+			"hdr-description": "Description",
+			"hdr-filename": "Filename",
+			"hdr-size": "Size",
+			"hdr-type": "Type",
+			"hdr-file-upload-wizzard": "File upload wizzard for ",
+			"msg-no-files-attached": "No files attached.",
+			"msg-confirm-delete-file-from-db": "Are you sure you want to delete the selected file from database?",
+
+			"ttl-attached-to": "Files attached to: ",
+			"ttl-confirmation": "Confirmation"
+		},
+		"file-explorer-nav-card": {
+			"status-node-is-no-files-attachable": "It is not possible to attach files to {{type}}s.",
+			"status-no-node-selected": "No node selected."
+		},
+		"file-link-editor-dialog": {
+			"btn-cancel": "Cancel",
+			"btn-save-changes": "Save",
+			"btn-change-file": "Change file"
+		}
+	}
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/environments/environment.prod.ts b/org.eclipse.mdm.application/src/main/webapp/src/environments/environment.prod.ts
new file mode 100644
index 0000000..e6c59ef
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/environments/environment.prod.ts
@@ -0,0 +1,22 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+export const environment = {
+  production: true,
+  /* Set the api URL to the base of the Angular app.
+   * If the Java backend and the Angular frontend are deployed at different
+   * location, replace apiUrl with the URL of your backend
+   */
+  apiUrl: document.getElementsByTagName('base')[0].href
+};
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/environments/environment.ts b/org.eclipse.mdm.application/src/main/webapp/src/environments/environment.ts
new file mode 100644
index 0000000..fc0432b
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/environments/environment.ts
@@ -0,0 +1,24 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+// The file contents for the current environment will overwrite these during build.
+// The build system defaults to the dev environment which uses `environment.ts`, but if you do
+// `ng build --env=prod` then `environment.prod.ts` will be used instead.
+// The list of which env maps to which file can be found in `angular-cli.json`.
+
+export const environment = {
+  production: false,
+  apiUrl: '/org.eclipse.mdm.nucleus/'
+};
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/error.jsp b/org.eclipse.mdm.application/src/main/webapp/src/error.jsp
new file mode 100644
index 0000000..f6058f2
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/error.jsp
@@ -0,0 +1,50 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta name="description" content="">
+<meta name="author" content="">
+
+<title>Login failed</title>
+
+
+<link rel='stylesheet' href='http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css'>
+<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/login.css">
+
+</head>
+
+<body>
+	<div class="bform">
+		<div class="bform2">
+			<div class="container">
+
+				<h2 class="form-signin-heading">Login Error</h2>
+				<h2>Invalid user name or password.</h2>
+
+				<p>
+					Please enter a user name or password that is authorized to access
+					this application. Click here to <a href="${pageContext.request.contextPath}/index.html">Try Again</a>.
+				</p>
+
+			</div>
+		</div>
+	</div>
+
+</body>
+</html>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/favicon.ico b/org.eclipse.mdm.application/src/main/webapp/src/favicon.ico
new file mode 100644
index 0000000..8081c7c
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/favicon.ico
Binary files differ
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/index.html b/org.eclipse.mdm.application/src/main/webapp/src/index.html
new file mode 100644
index 0000000..e4a1238
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/index.html
@@ -0,0 +1,28 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+
+<!DOCTYPE html>
+<html>
+  <head>
+    <base href="/" />
+    <title>openMDM5 Web</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta charset="utf-8">
+    <link rel="shortcut icon" href="/favicon.ico" />
+  </head>
+  <body>
+    <app-root>Loading...</app-root>
+  </body>
+</html>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/karma.conf.js b/org.eclipse.mdm.application/src/main/webapp/src/karma.conf.js
new file mode 100644
index 0000000..ed96e34
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/karma.conf.js
@@ -0,0 +1,59 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+// Karma configuration file, see link for more information
+// https://karma-runner.github.io/0.13/config/configuration-file.html
+
+module.exports = function (config) {
+  config.set({
+    basePath: '',
+    frameworks: ['jasmine', '@angular-devkit/build-angular'],
+    plugins: [
+      require('karma-jasmine'),
+      require('karma-chrome-launcher'),
+      require('karma-phantomjs-launcher'),
+      require('karma-jasmine-html-reporter'),
+      require('karma-coverage-istanbul-reporter'),
+      require('karma-mocha-reporter'),
+      require('@angular-devkit/build-angular/plugins/karma')
+    ],
+    client:{
+      clearContext: false // leave Jasmine Spec Runner output visible in browser
+    },
+    files: [
+      
+    ],
+    preprocessors: {
+      
+    },
+    mime: {
+      'text/x-typescript': ['ts','tsx']
+    },
+    coverageIstanbulReporter: {
+      dir: require('path').join(__dirname, 'coverage'), reports: [ 'html', 'lcovonly' ],
+      fixWebpackSourcePaths: true
+    },
+    
+    reporters: config.angularCli && config.angularCli.codeCoverage
+              ? ['progress', 'coverage-istanbul']
+              : ['progress', 'kjhtml'],
+    port: 9876,
+    colors: true,
+    logLevel: config.LOG_INFO,
+    autoWatch: true,
+    browsers: ['Chrome', 'PhantomJS'],
+    singleRun: false
+  });
+};
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/login.css b/org.eclipse.mdm.application/src/main/webapp/src/login.css
new file mode 100644
index 0000000..f245c4b
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/login.css
@@ -0,0 +1,60 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+body {
+  padding-top: 40px;
+  padding-bottom: 40px;
+  background-color: #eee;
+}
+
+.form-signin {
+  max-width: 330px;
+  padding: 15px;
+  margin: 0 auto;
+}
+
+.form-signin .form-signin-heading, .form-signin .checkbox {
+  margin-bottom: 10px;
+}
+
+.form-signin .checkbox {
+  font-weight: normal;
+}
+
+.form-signin .form-control {
+  position: relative;
+  height: auto;
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  padding: 10px;
+  font-size: 16px;
+}
+
+.form-signin .form-control:focus {
+  z-index: 2;
+}
+
+.form-signin input[type="email"] {
+  margin-bottom: -1px;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.form-signin input[type="password"] {
+  margin-bottom: 10px;
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/login.jsp b/org.eclipse.mdm.application/src/main/webapp/src/login.jsp
new file mode 100644
index 0000000..e862bf9
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/login.jsp
@@ -0,0 +1,53 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta name="description" content="">
+<meta name="author" content="">
+
+<title>MDM Web Login</title>
+
+<link rel='stylesheet' href='http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css'>
+<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/login.css">
+
+
+</head>
+
+<body>
+	<div class="bform">
+		<div class="bform2">
+			<div class="container">
+
+				<form class="form-signin" method=post action="j_security_check">
+					<h2 class="form-signin-heading">MDM Web Login</h2>
+					<input type="text" class="form-control" name="j_username"
+						placeholder="Username" required autofocus> <input
+						type="password" class="form-control" name="j_password"
+						placeholder="Password" required>
+
+					<button class="btn btn-lg btn-primary btn-block" type="submit">Login</button>
+				</form>
+
+			</div>
+		</div>
+	</div>
+
+</body>
+</html>
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/main.ts b/org.eclipse.mdm.application/src/main/webapp/src/main.ts
new file mode 100644
index 0000000..7f55a51
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/main.ts
@@ -0,0 +1,26 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
+import { enableProdMode } from '@angular/core';
+import { environment } from './environments/environment';
+import { AppModule } from './app/app.module';
+
+if (environment.production) {
+  enableProdMode();
+}
+
+platformBrowserDynamic().bootstrapModule(AppModule)
+  .catch(err => console.log(err));
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/polyfills.ts b/org.eclipse.mdm.application/src/main/webapp/src/polyfills.ts
new file mode 100644
index 0000000..903a24c
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/polyfills.ts
@@ -0,0 +1,55 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+// This file includes polyfills needed by Angular and is loaded before the app.
+// You can add your own extra polyfills to this file.
+import 'reflect-metadata';
+
+import 'core-js/es6/symbol';
+import 'core-js/es6/object';
+import 'core-js/es6/function';
+import 'core-js/es6/parse-int';
+import 'core-js/es6/parse-float';
+import 'core-js/es6/number';
+import 'core-js/es6/math';
+import 'core-js/es6/string';
+import 'core-js/es6/date';
+import 'core-js/es6/array';
+import 'core-js/es6/regexp';
+import 'core-js/es6/map';
+import 'core-js/es6/set';
+import 'core-js/es6/reflect';
+
+
+import 'zone.js/dist/zone';
+import 'rxjs/Rx';
+// If you need to support the browsers/features below, uncomment the import
+// and run `npm install import-name-here';
+// Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html
+
+// Needed for: IE9
+// import 'classlist.js';
+
+// Animations
+// Needed for: All but Chrome and Firefox, Not supported in IE9
+// import 'web-animations-js';
+
+// Date, currency, decimal and percent pipes
+// Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10
+// import 'intl';
+
+// NgClass on SVG elements
+// Needed for: IE10, IE11
+// import 'classlist.js';
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/styles.css b/org.eclipse.mdm.application/src/main/webapp/src/styles.css
new file mode 100644
index 0000000..d95fce8
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/styles.css
@@ -0,0 +1,230 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+/* You can add global styles to this file, and also import other style files */
+
+body {
+  margin: 3em 1em 0 1em;
+}
+
+.card-header {
+  padding: .6rem .1rem;
+}
+
+.navbar {
+  font-size: 1em;
+  margin-bottom: 0.5em;
+  padding: 0rem 1rem;
+}
+
+.navbar-brand {
+  font-size: 1em;
+}
+
+.table > thead > tr > th, .table > tbody > tr > td {
+  padding: 2px 4px;
+}
+
+body .mdmtree .ui-tree {
+  display: inline-block;
+  width: 100%;
+  height: 100%;
+}
+body .mdmtree .ui-treenode {
+  padding: 0 !important;
+}
+body .mdmtree .ui-treenode .ui-treenode-content {
+  height: 1.5em;
+  outline: none;
+}
+body .mdmtree .ui-treenode .ui-treenode-content .ui-treenode-label {
+  padding: 0 !important;
+}
+body .mdmtree .ui-treenode .ui-treenode-content .ui-treenode-icon {
+  margin: .2em 0; width: 15px;
+}
+body .mdmtree .ui-treenode .ui-treenode-content .ui-tree-toggler {
+  width: 1em;
+  font-size: 1em;
+}
+
+.icon {
+  background-repeat: no-repeat;
+  background-position: left center;
+  padding-left: 18px;
+  height: 1em;
+  margin: 0;
+}
+.environment {
+  background-image: url("assets/famfamfam_icons/database.png");
+}
+.project {
+  background-image: url("assets/famfamfam_icons/house.png");
+}
+.pool {
+  background-image: url("assets/famfamfam_icons/paste_plain.png");
+}
+.test {
+  background-image: url("assets/famfamfam_icons/brick_add.png");
+}
+.teststep {
+  background-image: url("assets/famfamfam_icons/brick.png");
+}
+.measurement {
+  background-image: url("assets/famfamfam_icons/chart_curve.png");
+}
+.channelgroup {
+  background-image: url("assets/famfamfam_icons/calendar.png");
+}
+.channel {
+  background-image: url("assets/famfamfam_icons/chart_curve_go.png");
+}
+.quantity {
+  background-image: url("assets/famfamfam_icons/chart_curve_go.png");
+}
+.unit {
+  background-image: url("assets/famfamfam_icons/chart_curve_go.png");
+}
+
+.ui-datatable .ui-datatable-data > tr > td {
+  padding: .25em .5em !important;
+}
+
+.ui-datatable .ui-datatable-thead > tr > th {
+  padding: .50em .5em !important;
+}
+
+.greyed * {
+  color: #ccc !important;
+  border-color: #e3e3e3 !important;
+}
+
+div .thinheader {
+  margin-top: -5px;
+  margin-bottom: -5px;
+}
+
+.btn-mdm {
+  font-size: 14px;
+  margin: 0 3px;
+  color: #6c757d;
+  background-color: transparent;
+  background-image: none;
+  border-color: #6c757d;
+}
+
+.btn-mdm-no-margin {
+  font-size: 14px;
+  color: #6c757d;
+  background-color: transparent;
+  background-image: none;
+  border-color: #6c757d;
+}
+
+.btn-mdm:hover {
+  color: #fff;
+  background-color: #6c757d;
+  border-color: #6c757d;
+}
+
+label {
+    display: inline-block;
+    max-width: 100%;
+    margin-bottom: 0px;
+    margin-left: 3px;
+    margin-right: 3px;
+    font-weight: bold;
+}
+
+mdm-tableview {
+	width:100%;
+}
+
+.mdm-link-list > li.active > a {
+  background-color: #e7e7e7;
+  color: #333;
+}
+
+.mdm-link-list > li > a:hover {
+  cursor: pointer;
+  color: black;
+}
+
+.mdm-link-list > li > a {
+  cursor: pointer;
+  color: #888;
+}
+
+/**
+  Define style sheets for the MDM detail component viewer
+  All units in EM as they are scalable
+*/
+.mdm-details-attributes .ui-treetable-table thead > tr > th {
+  position: relative;
+}
+.mdm-details-attributes .ui-treetable-table thead > tr > th .inlinebuttons {
+  position: absolute;
+  right: 0.25em;
+  top: 0.25em;
+}
+.mdm-details-attributes .ui-treetable-table thead > tr > th .inlinebuttons button {
+  margin-left: 0.1em;
+}
+.mdm-details-attributes .ui-treetable-table tbody > tr > td {
+  position: relative;
+}
+.mdm-details-attributes .ui-treetable-table tbody > tr > td .inlinecontent {
+  position: absolute;
+  right: 0.25em;
+  top: 0.25em;
+}
+.mdm-details-attributes .ui-treetable-table tbody td {
+  line-height: 1;
+  padding: 0.15em 0.15em !important;
+}
+.mdm-details-attributes .ui-treetable-table tbody .mdm-component-row {
+  background-color: #e3e3e3;
+}
+
+.mainnavigation {
+  display: block;
+  position: relative;
+}
+.mainnavigation #leftsidenav .navbar {
+  margin-bottom: 0.5em !important;
+}
+.mainnavigation .split {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  overflow-y: auto;
+  overflow-x: hidden;
+  height: 100%;
+}
+.mainnavigation .gutter {
+  background-color: #eee;
+  background-repeat: no-repeat;
+  background-position: 50%;
+  margin-left: 2px;
+  width: 8px !important;
+}
+.mainnavigation .gutter.gutter-horizontal {
+  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==');
+}
+.mainnavigation .split,
+.mainnavigation .gutter.gutter-horizontal {
+  display: inline-block;
+  vertical-align: top;
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/test.ts b/org.eclipse.mdm.application/src/main/webapp/src/test.ts
new file mode 100644
index 0000000..a3f71d5
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/test.ts
@@ -0,0 +1,48 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+// This file is required by karma.conf.js and loads recursively all the .spec and framework files
+
+import 'zone.js/dist/long-stack-trace-zone';
+import 'zone.js/dist/proxy.js';
+import 'zone.js/dist/sync-test';
+import 'zone.js/dist/jasmine-patch';
+import 'zone.js/dist/async-test';
+import 'zone.js/dist/fake-async-test';
+import 'rxjs/Rx';
+import { getTestBed } from '@angular/core/testing';
+import {
+  BrowserDynamicTestingModule,
+  platformBrowserDynamicTesting
+} from '@angular/platform-browser-dynamic/testing';
+
+// Unfortunately there's no typing for the `__karma__` variable. Just declare it as any.
+declare var __karma__: any;
+declare var require: any;
+
+// Prevent Karma from running prematurely.
+__karma__.loaded = function () {};
+
+// First, initialize the Angular testing environment.
+getTestBed().initTestEnvironment(
+  BrowserDynamicTestingModule,
+  platformBrowserDynamicTesting()
+);
+// Then we find all the tests.
+const context = require.context('./', true, /\.spec\.ts$/);
+// And load the modules.
+context.keys().map(context);
+// Finally, start Karma to run the tests.
+__karma__.start();
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/tsconfig.app.json b/org.eclipse.mdm.application/src/main/webapp/src/tsconfig.app.json
new file mode 100644
index 0000000..190fd30
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/tsconfig.app.json
@@ -0,0 +1,11 @@
+{
+  "extends": "../tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../out-tsc/app",
+    "types": []
+  },
+  "exclude": [
+    "test.ts",
+    "**/*.spec.ts"
+  ]
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/src/tsconfig.spec.json b/org.eclipse.mdm.application/src/main/webapp/src/tsconfig.spec.json
new file mode 100644
index 0000000..de77336
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/src/tsconfig.spec.json
@@ -0,0 +1,18 @@
+{
+  "extends": "../tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../out-tsc/spec",
+    "types": [
+      "jasmine",
+      "node"
+    ]
+  },
+  "files": [
+    "test.ts",
+    "polyfills.ts"
+  ],
+  "include": [
+    "**/*.spec.ts",
+    "**/*.d.ts"
+  ]
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/tsconfig.json b/org.eclipse.mdm.application/src/main/webapp/tsconfig.json
new file mode 100644
index 0000000..d8a9675
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/tsconfig.json
@@ -0,0 +1,30 @@
+{
+  "compileOnSave": false,
+  "compilerOptions": {
+    "baseUrl": "./",
+    "outDir": "./dist/out-tsc",
+    "sourceMap": true,
+    "declaration": false,
+    "module": "es2015",
+    "moduleResolution": "node",
+    "emitDecoratorMetadata": true,
+    "experimentalDecorators": true,
+    "importHelpers": true,
+    "paths": {
+      "@file-explorer/*": ["src/app/file-explorer/*"],
+      "@core/*": ["src/app/core/*"],
+      "@details/*": ["src/app/details/*"],
+      "@navigator/*": ["src/app/navigator/*"],
+      "@basket/*": ["src/app/basket/*"],
+      "@localization/*": ["src/app/localization/*"]
+    },
+    "target": "es5",
+    "typeRoots": [
+      "node_modules/@types"
+    ],
+    "lib": [
+      "es2018",
+      "dom"
+    ]
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/tslint.json b/org.eclipse.mdm.application/src/main/webapp/tslint.json
new file mode 100644
index 0000000..086e897
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/tslint.json
@@ -0,0 +1,121 @@
+{
+  "rulesDirectory": [
+    "node_modules/codelyzer"
+  ],
+  "rules": {
+    "callable-types": true,
+    "class-name": true,
+    "comment-format": [
+      true,
+      "check-space"
+    ],
+    "curly": true,
+    "eofline": true,
+    "forin": true,
+    "import-blacklist": [true],
+    "import-spacing": true,
+    "indent": [
+      true,
+      "spaces",
+      2
+    ],
+    "interface-over-type-literal": true,
+    "label-position": true,
+    "max-line-length": [
+      true,
+      140
+    ],
+    "member-access": false,
+    "member-ordering": [
+      true,
+      {
+        "order": [
+          "static-field",
+          "instance-field",
+          "static-method",
+          "instance-method"
+        ]
+      }
+    ],
+    "no-arg": true,
+    "no-bitwise": true,
+    "no-console": [
+      true,
+      "debug",
+      "info",
+      "time",
+      "timeEnd",
+      "trace"
+    ],
+    "no-construct": true,
+    "no-debugger": true,
+    "no-duplicate-variable": true,
+    "no-empty": false,
+    "no-empty-interface": true,
+    "no-eval": true,
+    "no-inferrable-types": true,
+    "no-shadowed-variable": true,
+    "no-string-literal": false,
+    "no-string-throw": true,
+    "no-switch-case-fall-through": true,
+    "no-trailing-whitespace": true,
+    "no-unused-expression": true,
+    "no-use-before-declare": true,
+    "no-var-keyword": true,
+    "object-literal-sort-keys": false,
+    "one-line": [
+      true,
+      "check-open-brace",
+      "check-catch",
+      "check-else",
+      "check-whitespace"
+    ],
+    "prefer-const": false,
+    "quotemark": [
+      true,
+      "single"
+    ],
+    "radix": true,
+    "semicolon": [
+      true,
+      "always"
+    ],
+    "triple-equals": [
+      true,
+      "allow-null-check",
+      "allow-undefined-check"
+    ],
+    "typedef-whitespace": [
+      true,
+      {
+        "call-signature": "nospace",
+        "index-signature": "nospace",
+        "parameter": "nospace",
+        "property-declaration": "nospace",
+        "variable-declaration": "nospace"
+      }
+    ],
+    "unified-signatures": true,
+    "variable-name": false,
+    "whitespace": [
+      true,
+      "check-branch",
+      "check-decl",
+      "check-operator",
+      "check-separator",
+      "check-type"
+    ],
+
+    "directive-selector": [false, "attribute", "app", "camelCase"],
+    "component-selector": [false, "element", "app", "kebab-case"],
+    "use-input-property-decorator": true,
+    "use-output-property-decorator": true,
+    "use-host-property-decorator": true,
+    "no-input-rename": true,
+    "no-output-rename": true,
+    "use-life-cycle-interface": true,
+    "use-pipe-transform-interface": true,
+    "component-class-suffix": true,
+    "directive-class-suffix": true
+  }
+}
diff --git a/org.eclipse.mdm.application/src/main/webconfig/glassfish-web.xml b/org.eclipse.mdm.application/src/main/webconfig/glassfish-web.xml
new file mode 100644
index 0000000..764fd88
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webconfig/glassfish-web.xml
@@ -0,0 +1,36 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+
+<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD
+GlassFish Application Server 3.1 Servlet 3.0//EN"
+"http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
+<glassfish-web-app>
+    <context-root>/org.eclipse.mdm.nucleus</context-root>
+
+    <security-role-mapping>
+        <role-name>Admin</role-name>
+        <group-name>Admin</group-name>
+    </security-role-mapping>
+
+    <security-role-mapping>
+        <role-name>DescriptiveDataAuthor</role-name>
+        <group-name>DescriptiveDataAuthor</group-name>
+    </security-role-mapping>
+
+    <security-role-mapping>
+        <role-name>Guest</role-name>
+        <group-name>Guest</group-name>
+    </security-role-mapping>
+</glassfish-web-app>
diff --git a/org.eclipse.mdm.application/src/main/webconfig/web.xml b/org.eclipse.mdm.application/src/main/webconfig/web.xml
new file mode 100644
index 0000000..1f9d321
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webconfig/web.xml
@@ -0,0 +1,79 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="3.0">
+
+	<security-constraint>
+		<web-resource-collection>
+			<web-resource-name>MDM WEB (protected)</web-resource-name>
+			<url-pattern>/*</url-pattern>
+		</web-resource-collection>
+		<auth-constraint>
+			<role-name>Admin</role-name>
+			<role-name>DescriptiveDataAuthor</role-name>
+			<role-name>Guest</role-name>
+		</auth-constraint>
+	</security-constraint>
+
+
+	<security-constraint>
+		<web-resource-collection>
+			<web-resource-name>MDM WEB (unprotected)</web-resource-name>
+			<url-pattern>/login.css</url-pattern>
+			<url-pattern>/favicon.ico</url-pattern>
+		</web-resource-collection>
+	</security-constraint>
+
+	<filter>
+		<filter-name>MDMRequestFilter</filter-name>
+		<filter-class>org.eclipse.mdm.application.MDMRequestFilter
+		</filter-class>
+		<init-param>
+			<param-name>passThroughPrefixes</param-name>
+			<param-value>/mdm</param-value>
+		</init-param>
+	</filter>
+
+	<filter-mapping>
+		<filter-name>MDMRequestFilter</filter-name>
+		<url-pattern>/*</url-pattern>
+		<dispatcher>REQUEST</dispatcher>
+	</filter-mapping>
+
+	<security-role>
+		<role-name>Admin</role-name>
+	</security-role>
+
+	<security-role>
+		<role-name>User</role-name>
+	</security-role>
+	
+	<security-role>
+		<role-name>Guest</role-name>
+	</security-role>
+
+	<login-config>
+		<auth-method>FORM</auth-method>
+		<realm-name>MDMRealm</realm-name>
+		<form-login-config>
+			<form-login-page>/login.jsp</form-login-page>
+			<form-error-page>/error.jsp</form-error-page>
+		</form-login-config>
+	</login-config>
+
+	<session-config>
+		<session-timeout>20</session-timeout>
+	</session-config>
+
+</web-app>
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/build.gradle b/org.eclipse.mdm.businessobjects/build.gradle
new file mode 100644
index 0000000..f4de9e0
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/build.gradle
@@ -0,0 +1,69 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+plugins {
+  id "com.google.protobuf" version "0.8.8"
+}
+
+description = 'business object service'
+
+apply plugin: 'antlr'
+
+dependencies {
+	compile project(':org.eclipse.mdm.connector')
+	compile 'com.fasterxml.jackson.core:jackson-databind:2.5.1'
+	compile 'io.vavr:vavr:0.9.1'
+	compile 'org.glassfish.jersey.media:jersey-media-multipart:2.23.2'
+	
+	compile 'com.google.protobuf:protobuf-java:3.2.0'
+	compile 'com.google.protobuf:protobuf-java-util:3.2.0'
+
+	testCompile 'org.assertj:assertj-core:3.6.2'
+	testCompile 'io.rest-assured:rest-assured:3.0.5'
+	testCompile 'org.glassfish.jersey.test-framework.providers:jersey-test-framework-provider-grizzly2:2.23.2'
+	testCompile 'org.glassfish.jersey.media:jersey-media-json-jackson:2.23.2'
+
+	testImplementation "org.eclipse.mdm:org.eclipse.mdm.api.odsadapter:${version}"
+	testImplementation "com.google.code.gson:gson:2.7"
+
+	antlr "org.antlr:antlr4:4.5.3"
+}
+
+generateGrammarSource { arguments += ["-visitor"] }
+
+test {
+	exclude 'org/eclipse/mdm/businessobjects/boundary/integrationtest/*'
+}
+
+compileJava.dependsOn(generateGrammarSource)
+
+jar {
+	metaInf { from '../NOTICE.txt' }
+	metaInf { from '../LICENSE.txt' }
+}
+
+protobuf {
+	protoc {
+		artifact = 'com.google.protobuf:protoc:3.0.0'
+	}
+}
+
+sourceSets {
+	main {
+		java {
+			srcDirs 'build/generated/source/proto/main/java'
+		}
+	}
+}
+
diff --git a/org.eclipse.mdm.businessobjects/src/main/antlr/org/eclipse/mdm/businessobjects/filter/FilterGrammar.g4 b/org.eclipse.mdm.businessobjects/src/main/antlr/org/eclipse/mdm/businessobjects/filter/FilterGrammar.g4
new file mode 100644
index 0000000..017ef69
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/antlr/org/eclipse/mdm/businessobjects/filter/FilterGrammar.g4
@@ -0,0 +1,159 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+grammar FilterGrammar;
+
+@header {
+package org.eclipse.mdm.businessobjects.filter;
+}
+
+parse
+ : expression EOF
+ ;
+
+expression
+ : LPAREN expression RPAREN                       #parenExpression
+ | NOT expression                                 #notExpression
+ | left=attribute op=unary_comparator             #unaryComparatorExpression
+ | left=attribute op=comparator right=value       #comparatorExpression
+ | left=attribute op=list_comparator right=values #listComparatorExpression
+ | left=expression op=and right=expression        #andExpression
+ | left=expression op=or right=expression         #orExpression
+ ;
+
+attribute
+ : ATTRIBUTE_IDENTIFIER
+;
+value
+ : STRINGLITERAL 
+ | DECIMAL
+ | LONG
+ | BOOL
+;
+
+values
+ : LPAREN value ( ',' value ) * RPAREN
+;
+
+comparator
+ : EQUAL 
+ | NOT_EQUAL 
+ | LESS_THAN 
+ | LESS_THAN_OR_EQUAL 
+ | GREATER_THAN 
+ | GREATER_THAN_OR_EQUAL 
+ | LIKE
+ | NOT_LIKE
+ | CASE_INSENSITIVE_EQUAL
+ | CASE_INSENSITIVE_NOT_EQUAL
+ | CASE_INSENSITIVE_LESS_THAN
+ | CASE_INSENSITIVE_LESS_THAN_OR_EQUAL
+ | CASE_INSENSITIVE_GREATER_THAN
+ | CASE_INSENSITIVE_GREATER_THAN_OR_EQUAL
+ | CASE_INSENSITIVE_LIKE
+ | CASE_INSENSITIVE_NOT_LIKE
+ ;
+ 
+list_comparator
+ : IN_SET
+ | NOT_IN_SET
+ | CASE_INSENSITIVE_IN_SET
+ | CASE_INSENSITIVE_NOT_IN_SET
+ | BETWEEN
+ ;
+ 
+unary_comparator
+ : IS_NULL
+ | IS_NOT_NULL
+ ;
+  
+and: AND ;
+
+or: OR ;
+
+binary: AND | OR ;
+
+AND                  : A N D ;
+OR                   : O R ;
+NOT                  : N O T ;
+
+EQUAL                                  : E Q ;
+NOT_EQUAL                              : N E ;
+LESS_THAN                              : L T ;
+LESS_THAN_OR_EQUAL                     : L E ;
+GREATER_THAN                           : G T ;
+GREATER_THAN_OR_EQUAL                  : G E ;
+IN_SET                                 : I N ; 
+NOT_IN_SET                             : N O T '_' I N;
+LIKE                                   : L K ;
+NOT_LIKE                               : N O T '_' L K;
+CASE_INSENSITIVE_EQUAL                 : C I '_' E Q;
+CASE_INSENSITIVE_NOT_EQUAL             : C I '_' N E;
+CASE_INSENSITIVE_LESS_THAN             : C I '_' L T;
+CASE_INSENSITIVE_LESS_THAN_OR_EQUAL    : C I '_' L E;
+CASE_INSENSITIVE_GREATER_THAN          : C I '_' G T;
+CASE_INSENSITIVE_GREATER_THAN_OR_EQUAL : C I '_' G E;
+CASE_INSENSITIVE_IN_SET                : C I '_' I N;
+CASE_INSENSITIVE_NOT_IN_SET            : C I '_' N O T '_' I N ;
+CASE_INSENSITIVE_LIKE                  : C I '_' L K;
+CASE_INSENSITIVE_NOT_LIKE              : C I '_' N O T '_' L K ;
+IS_NULL                                : I S '_' N U L L ;
+IS_NOT_NULL                            : I S '_' N O T '_' N U L L;
+BETWEEN                                : B W ;
+
+LPAREN               : '(' ;
+RPAREN               : ')' ;
+DECIMAL              : '-'? DIGIT+ '.' DIGIT+ ;
+LONG                 : '-'? DIGIT+ ;
+BOOL                 : T R U E | F A L S E ;
+IDENTIFIER           : [a-zA-Z_] [a-zA-Z_0-9]* ;
+ATTRIBUTE_IDENTIFIER : IDENTIFIER '.' IDENTIFIER ;
+STRINGLITERAL        : SINGLE_QUOTE ( ~'\'' | ESCAPED_SINGLE_QUOTE )* SINGLE_QUOTE 
+                     | DOUBLE_QUOTE ( ~'\"' | ESCAPED_DOUBLE_QUOTE )* DOUBLE_QUOTE ;
+WS                   : [ \r\t\u000C\n]+ -> skip ;
+
+fragment DIGIT : [0-9] ;
+fragment ESCAPED_SINGLE_QUOTE : '\\\'' ;
+fragment ESCAPED_DOUBLE_QUOTE : '\\\"' ;
+fragment SINGLE_QUOTE         : '\'' ;
+fragment DOUBLE_QUOTE         : '\"' ;
+
+/* case insensitive lexer matching */
+fragment A          : ('a'|'A');
+fragment B          : ('b'|'B');
+fragment C          : ('c'|'C');
+fragment D          : ('d'|'D');
+fragment E          : ('e'|'E');
+fragment F          : ('f'|'F');
+fragment G          : ('g'|'G');
+fragment H          : ('h'|'H');
+fragment I          : ('i'|'I');
+fragment J          : ('j'|'J');
+fragment K          : ('k'|'K');
+fragment L          : ('l'|'L');
+fragment M          : ('m'|'M');
+fragment N          : ('n'|'N');
+fragment O          : ('o'|'O');
+fragment P          : ('p'|'P');
+fragment Q          : ('q'|'Q');
+fragment R          : ('r'|'R');
+fragment S          : ('s'|'S');
+fragment T          : ('t'|'T');
+fragment U          : ('u'|'U');
+fragment V          : ('v'|'V');
+fragment W          : ('w'|'W');
+fragment X          : ('x'|'X');
+fragment Y          : ('y'|'Y');
+fragment Z          : ('z'|'Z');
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/CatalogAttributeResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/CatalogAttributeResource.java
new file mode 100644
index 0000000..6a3063a
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/CatalogAttributeResource.java
@@ -0,0 +1,221 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_DATATYPE;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_CONTEXTTYPE;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID2;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.L;
+import static org.eclipse.mdm.businessobjects.service.EntityService.SL;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.dflt.model.CatalogAttribute;
+import org.eclipse.mdm.api.dflt.model.CatalogComponent;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.vavr.collection.List;
+
+/**
+ * {@link CatalogAttribute} resource handling REST requests
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+@Tag(name = "Catalog")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/catcomps/{" + REQUESTPARAM_CONTEXTTYPE + "}/{" + REQUESTPARAM_ID
+		+ "}/catattrs")
+public class CatalogAttributeResource {
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * Returns the found {@link CatalogAttribute}.
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param contextType {@link ContextType} of the {@link CatalogAttribute} to
+	 *                    load
+	 * @param id          id of the {@link CatalogAttribute}
+	 * @return the found {@link CatalogAttribute} as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID2 + "}")
+	public Response find(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String catCompId,
+			@PathParam(REQUESTPARAM_ID2) String id) {
+		return entityService
+				.find(V(sourceName), CatalogAttribute.class, V(id),
+						ServiceUtils.getContextTypeSupplier(contextTypeParam), SL(catCompId))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) {@link CatalogAttribute}s.
+	 * 
+	 * @param sourceName       name of the source (MDM {@link Environment} name)
+	 * @param contextTypeParam {@link ContextType} of the {@link CatalogAttribute}
+	 *                         to load
+	 * @param filter           filter string to filter the {@link CatalogAttribute}
+	 *                         result
+	 * @return the (filtered) {@link CatalogAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response findAll(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String catCompId,
+			@QueryParam("filter") String filter) {
+		return entityService
+				.find(V(sourceName), CatalogComponent.class, V(catCompId),
+						ServiceUtils.getContextTypeSupplier(contextTypeParam))
+				.map(catComp -> List.ofAll(catComp.getCatalogAttributes()))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link CatalogAttributeValue}.
+	 * 
+	 * @param sourceName       name of the source (MDM {@link Environment} name)
+	 * @param contextTypeParam {@link ContextType} of the {@link CatalogAttribute}
+	 *                         to load
+	 * @param catCompId        the identifier of the {@link CatalogComponent} to
+	 *                         create an attribute for.
+	 * @param body             the body of the request containing the attributes to
+	 *                         update The {@link CatalogAttribute} to create.
+	 * @return the created {@link CatalogAttribute} as {@link Response}.
+	 */
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String catCompId,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.create(V(sourceName), CatalogAttribute.class,
+						L(requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME),
+								entityService.getEnumerationValueSupplier(
+										requestBody.getStringValueSupplier(ENTITYATTRIBUTE_DATATYPE)),
+								entityService.find(V(sourceName), CatalogComponent.class, V(catCompId),
+										ServiceUtils.getContextTypeSupplier(contextTypeParam))))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link CatalogAttribute} with all parameters set in the given
+	 * JSON body of the request
+	 * 
+	 * @param sourceName       name of the source (MDM {@link Environment} name)
+	 * @param contextTypeParam {@link ContextType} of the {@link CatalogAttribute}
+	 *                         to load
+	 * @param id               the identifier of the {@link CatalogAttribute} to
+	 *                         update.
+	 * @param catCompId        the identifier of the parent
+	 *                         {@link CatalogComponent}.
+	 * @param body             the body of the request containing the attributes to
+	 *                         update
+	 * @return the updated {@link CatalogAttribute}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID2 + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID2) String id,
+			@PathParam(REQUESTPARAM_ID) String catCompId, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName),
+						entityService.find(V(sourceName), CatalogAttribute.class, V(id),
+								ServiceUtils.getContextTypeSupplier(contextTypeParam), SL(catCompId)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link CatalogAttribute}.
+	 * 
+	 * @param id The identifier of the {@link CatalogAttribute} to delete.
+	 * @return the deleted {@link CatalogAttribute }s as {@link Response}
+	 */
+	@DELETE
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID2 + "}")
+	public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String catCompId,
+			@PathParam(REQUESTPARAM_ID2) String id) {
+		return entityService
+				.delete(V(sourceName),
+						entityService.find(V(sourceName), CatalogAttribute.class, V(id),
+								ServiceUtils.getContextTypeSupplier(contextTypeParam), SL(catCompId)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the search attributes for the {@link CatalogAttribute} type.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the {@link SearchAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildSearchAttributesResponse(V(sourceName), CatalogAttribute.class, entityService);
+	}
+
+	/**
+	 * Returns a map of localization for the entity type and the attributes.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the I18N as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildLocalizationResponse(V(sourceName), CatalogAttribute.class, entityService);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/CatalogComponentResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/CatalogComponentResource.java
new file mode 100644
index 0000000..e166554
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/CatalogComponentResource.java
@@ -0,0 +1,195 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_CONTEXTTYPE;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.L;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.dflt.model.CatalogComponent;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+/**
+ * {@link CatalogComponent} resource handling REST requests
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+@Tag(name = "Catalog")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/catcomps/{" + REQUESTPARAM_CONTEXTTYPE + "}")
+public class CatalogComponentResource {
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * Returns the found {@link CatalogComponent}.
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param contextType {@link ContextType} of the {@link CatalogComponent} to
+	 *                    load
+	 * @param id          id of the {@link CatalogComponent}
+	 * @return the found {@link CatalogComponent} as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response find(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService
+				.find(V(sourceName), CatalogComponent.class, V(id),
+						ServiceUtils.getContextTypeSupplier(contextTypeParam))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) {@link CatalogComponent}s.
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param contextType {@link ContextType} of the {@link CatalogComponent} to
+	 *                    load
+	 * @param filter      filter string to filter the {@link CatalogComponent}
+	 *                    result
+	 * @return the (filtered) {@link CatalogComponent}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response findAll(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @QueryParam("filter") String filter) {
+		return entityService
+				.findAll(V(sourceName), CatalogComponent.class, filter,
+						ServiceUtils.getContextTypeSupplier(contextTypeParam))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link CatalogComponentValue}.
+	 * 
+	 * @param body The {@link CatalogComponent} to create.
+	 * @return the created {@link CatalogComponent} as {@link Response}.
+	 */
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.create(V(sourceName), CatalogComponent.class,
+						L(ServiceUtils.getContextTypeSupplier(contextTypeParam),
+								requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link CatalogComponent} with all parameters set in the given
+	 * JSON body of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link CatalogComponent} to delete.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link CatalogComponent}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String id,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName),
+						entityService.find(V(sourceName), CatalogComponent.class, V(id),
+								ServiceUtils.getContextTypeSupplier(contextTypeParam)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link CatalogComponent}.
+	 * 
+	 * @param id The identifier of the {@link CatalogComponent} to delete.
+	 * @return the deleted {@link CatalogComponent }s as {@link Response}
+	 */
+	@DELETE
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService
+				.delete(V(sourceName),
+						entityService.find(V(sourceName), CatalogComponent.class, V(id),
+								ServiceUtils.getContextTypeSupplier(contextTypeParam)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the search attributes for the {@link CatalogComponent} type.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the {@link SearchAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildSearchAttributesResponse(V(sourceName), CatalogComponent.class, entityService);
+	}
+
+	/**
+	 * Returns a map of localization for the entity type and the attributes.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the I18N as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildLocalizationResponse(V(sourceName), CatalogComponent.class, entityService);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/CatalogSensorAttributeResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/CatalogSensorAttributeResource.java
new file mode 100644
index 0000000..414b80b
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/CatalogSensorAttributeResource.java
@@ -0,0 +1,214 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_DATATYPE;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID2;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID3;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.L;
+import static org.eclipse.mdm.businessobjects.service.EntityService.SL;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.dflt.model.CatalogAttribute;
+import org.eclipse.mdm.api.dflt.model.CatalogComponent;
+import org.eclipse.mdm.api.dflt.model.CatalogSensor;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.vavr.collection.List;
+
+/**
+ * {@link CatalogAttribute} resource handling REST requests
+ * 
+ * @author Philipp Schweinbenz, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+@Tag(name = "Catalog")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/catcomps/testequipment/{" + REQUESTPARAM_ID + "}/catsensors/{"
+		+ REQUESTPARAM_ID2 + "}/catsensorattrs")
+public class CatalogSensorAttributeResource {
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * Returns the found {@link CatalogAttribute}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param catCompId  id of the {@link CatalogComponent}
+	 * @param sensorId   id of the {@link CatalogSensor}
+	 * @param id         id of the {@link CatalogAttribute}
+	 * @return the found {@link CatalogAttribute} as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID3 + "}")
+	public Response find(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String catCompId, @PathParam(REQUESTPARAM_ID2) String sensorId,
+			@PathParam(REQUESTPARAM_ID3) String id) {
+		return entityService
+				.find(V(sourceName), CatalogAttribute.class, V(id), V(ContextType.TESTEQUIPMENT),
+						SL(catCompId, sensorId))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) {@link CatalogAttribute}s.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param catCompId  id of the {@link CatalogComponent}
+	 * @param sensorId   id of the {@link CatalogSensor}
+	 * @param filter     filter string to filter the {@link CatalogAttribute} result
+	 * @return the (filtered) {@link CatalogAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response findAll(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String catCompId, @PathParam(REQUESTPARAM_ID2) String sensorId,
+			@QueryParam("filter") String filter) {
+		return entityService
+				.find(V(sourceName), CatalogSensor.class, V(sensorId), V(ContextType.TESTEQUIPMENT), SL(catCompId))
+				.map(catSensor -> List.ofAll(catSensor.getCatalogAttributes()))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link CatalogAttributeValue}.
+	 * 
+	 * @param catCompId id of the {@link CatalogComponent}
+	 * @param sensorId  id of the {@link CatalogSensor}
+	 * @param body      The {@link CatalogAttribute} to create.
+	 * @return the created {@link CatalogAttribute} as {@link Response}.
+	 */
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String catCompId, @PathParam(REQUESTPARAM_ID2) String sensorId, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.create(V(sourceName), CatalogAttribute.class,
+						L(requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME),
+								entityService.getEnumerationValueSupplier(
+										requestBody.getStringValueSupplier(ENTITYATTRIBUTE_DATATYPE)),
+								entityService.find(V(sourceName), CatalogSensor.class, V(sensorId),
+										V(ContextType.TESTEQUIPMENT), SL(catCompId))))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link CatalogAttribute} with all parameters set in the given
+	 * JSON body of the request
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param catCompId  id of the {@link CatalogComponent}
+	 * @param sensorId   id of the {@link CatalogSensor}
+	 * @param id         the identifier of the {@link CatalogAttribute} to delete.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link CatalogAttribute}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID3 + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String catCompId, @PathParam(REQUESTPARAM_ID2) String sensorId,
+			@PathParam(REQUESTPARAM_ID3) String id, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName),
+						entityService.find(V(sourceName), CatalogAttribute.class, V(id), V(ContextType.TESTEQUIPMENT),
+								SL(catCompId, sensorId)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link CatalogAttribute}.
+	 * 
+	 * @param catCompId id of the {@link CatalogComponent}
+	 * @param sensorId  id of the {@link CatalogSensor}
+	 * @param id        The identifier of the {@link CatalogAttribute} to delete.
+	 * @return the deleted {@link CatalogAttribute }s as {@link Response}
+	 */
+	@DELETE
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID3 + "}")
+	public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String catCompId, @PathParam(REQUESTPARAM_ID2) String sensorId,
+			@PathParam(REQUESTPARAM_ID3) String id) {
+		return entityService
+				.delete(V(sourceName),
+						entityService.find(V(sourceName), CatalogAttribute.class, V(id), V(ContextType.TESTEQUIPMENT),
+								SL(catCompId, sensorId)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the search attributes for the {@link CatalogAttribute} type.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the {@link SearchAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildSearchAttributesResponse(V(sourceName), CatalogAttribute.class, entityService);
+	}
+
+	/**
+	 * Returns a map of localization for the entity type and the attributes.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the I18N as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildLocalizationResponse(V(sourceName), CatalogAttribute.class, entityService);
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/CatalogSensorResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/CatalogSensorResource.java
new file mode 100644
index 0000000..b1e10f2
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/CatalogSensorResource.java
@@ -0,0 +1,200 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID2;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.L;
+import static org.eclipse.mdm.businessobjects.service.EntityService.SL;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.dflt.model.CatalogComponent;
+import org.eclipse.mdm.api.dflt.model.CatalogSensor;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.vavr.collection.List;
+
+/**
+ * {@link CatalogSensor} resource handling REST requests
+ * 
+ * @author Philipp Schweinbenz, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+@Tag(name = "Catalog")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/catcomps/testequipment/{" + REQUESTPARAM_ID + "}/catsensors")
+public class CatalogSensorResource {
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * Returns the found {@link CatalogSensor}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param catCompId  id of the {@link CatalogComponent}
+	 * @param id         id of the {@link CatalogSensor}
+	 * @return the found {@link CatalogSensor} as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID2 + "}")
+	public Response find(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String catCompId, @PathParam(REQUESTPARAM_ID2) String id) {
+		return entityService
+				.find(V(sourceName), CatalogSensor.class, V(id), V(ContextType.TESTEQUIPMENT), SL(catCompId))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) {@link CatalogSensor}s.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param catCompId  id of the {@link CatalogComponent}
+	 * @param filter     filter string to filter the {@link CatalogSensor} result
+	 * @return the (filtered) {@link CatalogSensor}s as {@link Response}
+	 */
+	// FIXME anehmer on 2017-11-17: returns all CatalogSensors and not only the ones
+	// in the superordinate CatalogComponent
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response findAll(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String catCompId, @QueryParam("filter") String filter) {
+		return entityService.find(V(sourceName), CatalogComponent.class, V(catCompId), V(ContextType.TESTEQUIPMENT))
+				.map(catComp -> List.ofAll(catComp.getCatalogSensors()))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link CatalogSensor}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param catCompId  id of the {@link CatalogComponent}
+	 * @param body       The {@link CatalogSensor} to create.
+	 * @return the created {@link CatalogSensor} as {@link Response}.
+	 */
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String catCompId, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.create(V(sourceName), CatalogSensor.class,
+						L(requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME),
+								entityService.find(V(sourceName), CatalogComponent.class, V(catCompId),
+										V(ContextType.TESTEQUIPMENT))))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link CatalogSensor} with all parameters set in the given JSON
+	 * body of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param catCompId  id of the {@link CatalogComponent}
+	 * @param id         the identifier of the {@link CatalogSensor} to delete.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link CatalogSensor}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID2 + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String catCompId, @PathParam(REQUESTPARAM_ID2) String id, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName),
+						entityService.find(V(sourceName), CatalogSensor.class, V(id), V(ContextType.TESTEQUIPMENT),
+								SL(catCompId)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link CatalogSensor}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param catCompId  id of the {@link CatalogComponent}
+	 * @param id         The identifier of the {@link CatalogSensor} to delete.
+	 * @return the deleted {@link CatalogSensor }s as {@link Response}
+	 */
+	@DELETE
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID2 + "}")
+	public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String catCompId, @PathParam(REQUESTPARAM_ID2) String id) {
+		return entityService
+				.delete(V(sourceName),
+						entityService.find(V(sourceName), CatalogSensor.class, V(id), V(ContextType.TESTEQUIPMENT),
+								SL(catCompId)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the search attributes for the {@link CatalogSensor} type.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the {@link SearchAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildSearchAttributesResponse(V(sourceName), CatalogSensor.class, entityService);
+	}
+
+	/**
+	 * Returns a map of localization for the entity type and the attributes.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the I18N as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildLocalizationResponse(V(sourceName), CatalogSensor.class, entityService);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ChannelGroupResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ChannelGroupResource.java
new file mode 100644
index 0000000..4527875
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ChannelGroupResource.java
@@ -0,0 +1,199 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import java.util.Map;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.dflt.model.ValueList;
+import org.eclipse.mdm.businessobjects.entity.I18NResponse;
+import org.eclipse.mdm.businessobjects.entity.MDMEntityResponse;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.vavr.collection.List;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+/**
+ * {@link ChannelGroup} resource
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Tag(name = "ChannelGroup")
+@Path("/environments/{SOURCENAME}/channelgroups")
+public class ChannelGroupResource {
+
+	private static final Logger LOG = LoggerFactory.getLogger(ChannelGroupResource.class);
+
+	@EJB
+	private ChannelGroupService channelGroupService;
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * delegates the request to the {@link ChannelGroupService}
+	 *
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the {@link ChannelGroup} result
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response getChannelGroups(@PathParam("SOURCENAME") String sourceName, @QueryParam("filter") String filter) {
+
+		try {
+			java.util.List<ChannelGroup> channelGroups = this.channelGroupService.getChannelGroups(sourceName, filter);
+			return ServiceUtils.toResponse(new MDMEntityResponse(ChannelGroup.class, channelGroups), Status.OK);
+
+		} catch (RuntimeException e) {
+			LOG.error(e.getMessage(), e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	/**
+	 * returns a {@link ChannelGroup} identified by the given id.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param channelId  id of the {@link ChannelGroup}
+	 * @return the matching {@link ChannelGroup}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{CHANNELGROUP_ID}")
+	public Response getChannelGroup(@PathParam("SOURCENAME") String sourceName,
+			@PathParam("CHANNELGROUP_ID") String channelGroupId) {
+
+		try {
+			ChannelGroup channelGroup = this.channelGroupService.getChannelGroup(sourceName, channelGroupId);
+			return ServiceUtils.toResponse(new MDMEntityResponse(ChannelGroup.class, channelGroup), Status.OK);
+
+		} catch (RuntimeException e) {
+			LOG.error(e.getMessage(), e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	/**
+	 * delegates the request to the {@link ChannelGroupService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(@PathParam("SOURCENAME") String sourceName) {
+
+		try {
+			Map<Attribute, String> localizedAttributeMap = this.channelGroupService.localizeAttributes(sourceName);
+			Map<EntityType, String> localizedEntityTypeMap = this.channelGroupService.localizeType(sourceName);
+			return ServiceUtils.toResponse(new I18NResponse(localizedEntityTypeMap, localizedAttributeMap), Status.OK);
+
+		} catch (RuntimeException e) {
+			LOG.error(e.getMessage(), e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	/**
+	 * Returns the created {@link ChannelGroup}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param body       The {@link ChannelGroup} to create.
+	 * @return the created {@link ChannelGroup} as {@link Response}.
+	 */
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, String body) {
+
+		return entityService
+				.create(V(sourceName), ChannelGroup.class,
+						entityService.extractRequestBody(body, sourceName, List.of(Measurement.class)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link ChannelGroup} with all parameters set in the given JSON
+	 * body of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link ChannelGroup} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link ChannelGroup}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, @PathParam(REQUESTPARAM_ID) String id,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName), entityService.find(V(sourceName), ChannelGroup.class, V(id)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link ChannelGroup}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         The identifier of the {@link ChannelGroup} to delete.
+	 * @return the deleted {@link ValueList }s as {@link Response}
+	 */
+	@DELETE
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.delete(V(sourceName), entityService.find(V(sourceName), ChannelGroup.class, V(id)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ChannelGroupService.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ChannelGroupService.java
new file mode 100644
index 0000000..4b0e0b6
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ChannelGroupService.java
@@ -0,0 +1,126 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.businessobjects.control.I18NActivity;
+import org.eclipse.mdm.businessobjects.control.MDMEntityAccessException;
+import org.eclipse.mdm.businessobjects.control.NavigationActivity;
+import org.eclipse.mdm.businessobjects.control.SearchActivity;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+
+/**
+ * ChannelGroupService Bean implementation with available {@link ChannelGroup}
+ * operations
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Stateless
+public class ChannelGroupService {
+
+	@Inject
+	private ConnectorService connectorService;
+
+	@EJB
+	private I18NActivity I18NActivity;
+	@EJB
+	private NavigationActivity navigationActivity;
+	@EJB
+	private SearchActivity searchActivity;
+
+	/**
+	 * returns the matching {@link ChannelGroup}s using the given filter or all
+	 * {@link ChannelGroup}s if no filter is available
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the ChannelGroup result
+	 * @return the found {@link ChannelGroup}s
+	 */
+	public List<ChannelGroup> getChannelGroups(String sourceName, String filter) {
+		try {
+
+			ApplicationContext context = this.connectorService.getContextByName(sourceName);
+			EntityManager em = context.getEntityManager()
+					.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+
+			if (filter == null || filter.trim().length() <= 0) {
+				return em.loadAll(ChannelGroup.class);
+			}
+
+			if (ServiceUtils.isParentFilter(context, filter, ChannelGroup.PARENT_TYPE_MEASUREMENT)) {
+				String id = ServiceUtils.extactIdFromParentFilter(context, filter,
+						ChannelGroup.PARENT_TYPE_MEASUREMENT);
+				return this.navigationActivity.getChannelGroups(sourceName, id);
+			}
+
+			return this.searchActivity.search(context, ChannelGroup.class, filter);
+
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * returns a {@link ChannelGroup identified by the given id
+	 * 
+	 * @param sourceName     name of the source (MDM {@link Environment} name)
+	 * @param channelGroupId id of the {@link ChannelGroup}
+	 * @return the matching {@link ChannelGroup}
+	 */
+	public ChannelGroup getChannelGroup(String sourceName, String channelGroupId) {
+		try {
+			EntityManager em = this.connectorService.getContextByName(sourceName).getEntityManager()
+					.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+			return em.load(ChannelGroup.class, channelGroupId);
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * returns localized {@link ChannelGroup} attributes
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the localized {@link ChannelGroup} attributes
+	 */
+	public Map<Attribute, String> localizeAttributes(String sourceName) {
+		return this.I18NActivity.localizeAttributes(sourceName, ChannelGroup.class);
+	}
+
+	/**
+	 * returns the localized {@link ChannelGroup} type name
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the localized {@link ChannelGroup} type name
+	 */
+	public Map<EntityType, String> localizeType(String sourceName) {
+		return this.I18NActivity.localizeType(sourceName, ChannelGroup.class);
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ChannelResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ChannelResource.java
new file mode 100644
index 0000000..bfb0c9a
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ChannelResource.java
@@ -0,0 +1,220 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import java.util.Map;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.Quantity;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.dflt.model.ValueList;
+import org.eclipse.mdm.businessobjects.entity.I18NResponse;
+import org.eclipse.mdm.businessobjects.entity.MDMEntityResponse;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.vavr.collection.List;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+/**
+ * {@link Channel} resource
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Tag(name = "Channel")
+@Path("/environments/{SOURCENAME}/channels")
+public class ChannelResource {
+
+	private static final Logger LOG = LoggerFactory.getLogger(ChannelResource.class);
+
+	@EJB
+	private ChannelService channelService;
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * delegates the request to the {@link ChannelService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the {@link Channel} result
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Find Channels by filter", description = "Get list of users", responses = {
+			@ApiResponse(description = "The user", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response getChannels(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam("SOURCENAME") String sourceName,
+			@Parameter(description = "Filter expression", required = false) @QueryParam("filter") String filter) {
+
+		try {
+			java.util.List<Channel> channels = this.channelService.getChannels(sourceName, filter);
+			return ServiceUtils.toResponse(new MDMEntityResponse(Channel.class, channels), Status.OK);
+
+		} catch (RuntimeException e) {
+			LOG.error(e.getMessage(), e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	/**
+	 * delegates the request to the {@link ChannelService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param testId     id of the {@link Test}
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{CHANNEL_ID}")
+	@Operation(summary = "Find a Channel by ID", description = "Returns Channels based on ID", responses = {
+			@ApiResponse(description = "The channel", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	public Response getChannel(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam("SOURCENAME") String sourceName,
+			@Parameter(description = "ID of the Channel", required = true) @PathParam("CHANNEL_ID") String channelId) {
+
+		try {
+			Channel channel = this.channelService.getChannel(sourceName, channelId);
+			return ServiceUtils.toResponse(new MDMEntityResponse(Channel.class, channel), Status.OK);
+
+		} catch (RuntimeException e) {
+			LOG.error(e.getMessage(), e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	/**
+	 * delegates the request to the {@link ChannelService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the Channel localizations", description = "Returns Channel localizations", responses = {
+			@ApiResponse(description = "The project localizations", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam("SOURCENAME") String sourceName) {
+
+		try {
+			Map<Attribute, String> localizedAttributeMap = this.channelService.localizeAttributes(sourceName);
+			Map<EntityType, String> localizedEntityTypeMap = this.channelService.localizeType(sourceName);
+			return ServiceUtils.toResponse(new I18NResponse(localizedEntityTypeMap, localizedAttributeMap), Status.OK);
+
+		} catch (RuntimeException e) {
+			LOG.error(e.getMessage(), e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+	
+	/**
+	 * Returns the created {@link Channel}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param body       The {@link Channel} to create.
+	 * @return the created {@link Channel} as {@link Response}.
+	 */
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, String body) {
+
+		return entityService
+				.create(V(sourceName), Channel.class,
+						entityService.extractRequestBody(body, sourceName, List.of(Measurement.class, Quantity.class)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link Channel} with all parameters set in the given JSON body
+	 * of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link Channel} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link Channel}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, @PathParam(REQUESTPARAM_ID) String id,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName), entityService.find(V(sourceName), Channel.class, V(id)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link Channel}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         The identifier of the {@link Channel} to delete.
+	 * @return the deleted {@link ValueList }s as {@link Response}
+	 */
+	@DELETE
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.delete(V(sourceName), entityService.find(V(sourceName), Channel.class, V(id)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ChannelService.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ChannelService.java
new file mode 100644
index 0000000..9ad3dcc
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ChannelService.java
@@ -0,0 +1,122 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.businessobjects.control.I18NActivity;
+import org.eclipse.mdm.businessobjects.control.MDMEntityAccessException;
+import org.eclipse.mdm.businessobjects.control.NavigationActivity;
+import org.eclipse.mdm.businessobjects.control.SearchActivity;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+
+/**
+ * ChannelService Bean implementation with available {@link Channel} operations
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Stateless
+public class ChannelService {
+
+	@Inject
+	private ConnectorService connectorService;
+	@EJB
+	private I18NActivity i18nActivity;
+	@EJB
+	private NavigationActivity navigationActivity;
+	@EJB
+	private SearchActivity searchActivity;
+
+	/**
+	 * returns the matching {@link Channel}s using the given filter or all
+	 * {@link Channel}s if no filter is available
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the Channel result
+	 * @return the found {@link Channel}s
+	 */
+	public List<Channel> getChannels(String sourceName, String filter) {
+		try {
+			ApplicationContext context = this.connectorService.getContextByName(sourceName);
+			EntityManager em = context.getEntityManager()
+					.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+
+			if (filter == null || filter.trim().length() <= 0) {
+				return em.loadAll(Channel.class);
+			}
+
+			if (ServiceUtils.isParentFilter(context, filter, Channel.PARENT_TYPE_CHANNELGROUP)) {
+				String id = ServiceUtils.extactIdFromParentFilter(context, filter, Channel.PARENT_TYPE_CHANNELGROUP);
+				return this.navigationActivity.getChannels(sourceName, id);
+			}
+
+			return this.searchActivity.search(context, Channel.class, filter);
+
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * returns a {@link Channel} identified by the given id.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param channelId  id of the {@link Channel}
+	 * @return the matching {@link Channel}
+	 */
+	public Channel getChannel(String sourceName, String channelId) {
+		try {
+			EntityManager em = this.connectorService.getContextByName(sourceName).getEntityManager()
+					.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+			return em.load(Channel.class, channelId);
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * returns localized {@link Channel} attributes
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the localized {@link Channel} attributes
+	 */
+	public Map<Attribute, String> localizeAttributes(String sourceName) {
+		return this.i18nActivity.localizeAttributes(sourceName, Channel.class);
+	}
+
+	/**
+	 * returns the localized {@link Channel} type name
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the localized {@link Channel} type name
+	 */
+	public Map<EntityType, String> localizeType(String sourceName) {
+		return this.i18nActivity.localizeType(sourceName, Channel.class);
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ClassificationResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ClassificationResource.java
new file mode 100644
index 0000000..ed3bc01
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ClassificationResource.java
@@ -0,0 +1,139 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.dflt.model.Classification;
+import org.eclipse.mdm.api.dflt.model.Domain;
+import org.eclipse.mdm.api.dflt.model.ProjectDomain;
+import org.eclipse.mdm.businessobjects.entity.MDMEntityResponse;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.vavr.Value;
+import io.vavr.collection.List;
+import io.vavr.collection.Seq;
+
+/**
+ * @author Alexander Knoblauch
+ *
+ */
+@Tag(name = "Status")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/classifications")
+public class ClassificationResource {
+
+	@EJB
+	private EntityService entityService;
+
+	@EJB
+	private ClassificationService classificationService;
+
+	@Parameter(description = "Name of the MDM datasource", required = true)
+	@PathParam(REQUESTPARAM_SOURCENAME)
+	private String sourceName;
+
+	/**
+	 * delegates the request to the {@link EntityService}
+	 * 
+	 * @param id id of the {@link Classification}
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Find a Classification by ID", responses = {
+			@ApiResponse(description = "The Classification", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response findClassification(
+			@Parameter(description = "ID of the Classification", required = true) @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.find(V(sourceName), Classification.class, V(id))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created/existing {@link Classification}.
+	 * 
+	 * @param body The {@link Classification} to create.
+	 * @return the created {@link TestStep} as {@link Response}.
+	 */
+	@POST
+	@Operation(summary = "Create a new Classification or return a existing Classification which references the same Status, ProjectDomain and Domain.", responses = {
+			@ApiResponse(description = "The created Classification", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	public Response createOrFind(String body) {
+
+		Seq<Value<?>> extractRequestBody = entityService.extractRequestBody(body, sourceName, io.vavr.collection.List
+				.of(org.eclipse.mdm.api.dflt.model.Status.class, ProjectDomain.class, Domain.class));
+
+		java.util.List<Value<?>> asJavaMutable = extractRequestBody.asJavaMutable();
+
+		org.eclipse.mdm.api.dflt.model.Status status = null;
+		ProjectDomain projectDomain = null;
+		Domain domain = null;
+
+		for (Value<?> v : asJavaMutable) {
+			if (v.get() instanceof org.eclipse.mdm.api.dflt.model.Status) {
+				status = (org.eclipse.mdm.api.dflt.model.Status) v.get();
+			} else if (v.get() instanceof ProjectDomain) {
+				projectDomain = (ProjectDomain) v.get();
+			} else if (v.get() instanceof Domain) {
+				domain = (Domain) v.get();
+			}
+		}
+
+		Classification classification = classificationService.getClassification(sourceName, status, projectDomain,
+				domain);
+
+		Response response = null;
+
+		if (classification == null) {
+			response = entityService
+					.create(V(sourceName), Classification.class,
+							entityService.extractRequestBody(body, sourceName,
+									List.of(Domain.class, ProjectDomain.class,
+											org.eclipse.mdm.api.dflt.model.Status.class)))
+					.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+					.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+		} else {
+			response = ServiceUtils.buildEntityResponse(classification, Status.OK);
+		}
+
+		return response;
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ClassificationService.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ClassificationService.java
new file mode 100644
index 0000000..b26cd3c
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ClassificationService.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.ModelManager;
+import org.eclipse.mdm.api.base.query.ComparisonOperator;
+import org.eclipse.mdm.api.base.query.Condition;
+import org.eclipse.mdm.api.base.query.Filter;
+import org.eclipse.mdm.api.base.query.QueryService;
+import org.eclipse.mdm.api.base.query.Record;
+import org.eclipse.mdm.api.base.query.Result;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.Classification;
+import org.eclipse.mdm.api.dflt.model.Domain;
+import org.eclipse.mdm.api.dflt.model.ProjectDomain;
+import org.eclipse.mdm.api.dflt.model.Status;
+import org.eclipse.mdm.businessobjects.control.MDMEntityAccessException;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+
+/**
+ * @author akn
+ *
+ */
+@Stateless
+public class ClassificationService {
+
+	@Inject
+	private ConnectorService connectorService;
+
+	public Classification getClassification(String sourceName, Status status, ProjectDomain projectDomain,
+			Domain domain) {
+		Optional<QueryService> queryService = connectorService.getContextByName(sourceName).getQueryService();
+		Optional<ModelManager> modelManager = connectorService.getContextByName(sourceName).getModelManager();
+
+		EntityType entityType = modelManager.get().getEntityType(Classification.class);
+		Condition c1 = ComparisonOperator.CASE_INSENSITIVE_EQUAL.create(entityType.getAttribute("ProjectDomain"),
+				projectDomain.getID());
+		Condition c2 = ComparisonOperator.CASE_INSENSITIVE_EQUAL.create(entityType.getAttribute("Domain"),
+				domain.getID());
+		Condition c3 = ComparisonOperator.CASE_INSENSITIVE_EQUAL.create(entityType.getAttribute("Status"),
+				status.getID());
+
+		java.util.List<Result> fetch = queryService.get().createQuery().selectID(entityType)
+				.fetch(Filter.and().addAll(c1, c2, c3));
+
+		java.util.List<String> collect = fetch.stream().map(r -> r.getRecord(entityType)).map(Record::getID)
+				.collect(Collectors.toList());
+
+		EntityManager em = this.connectorService.getContextByName(sourceName).getEntityManager()
+				.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+
+		Classification classification = null;
+		if (!collect.isEmpty()) {
+
+			classification = em.load(Classification.class, collect.get(0));
+		}
+
+		return classification;
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ContextFilesSubresource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ContextFilesSubresource.java
new file mode 100644
index 0000000..c38dd3a
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ContextFilesSubresource.java
@@ -0,0 +1,191 @@
+/*******************************************************************************
+ * Copyright (c) 2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ATTRIBUTENAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_CONTEXTCOMPONENTNAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_CONTEXTTYPE;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_REMOTEPATH;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import java.io.InputStream;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.ContextDescribable;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.FileLink;
+import org.eclipse.mdm.api.base.model.MimeType;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.businessobjects.control.FileLinkActivity;
+import org.eclipse.mdm.businessobjects.entity.FileSize;
+import org.eclipse.mdm.businessobjects.entity.MDMEntityResponse;
+import org.eclipse.mdm.businessobjects.entity.MDMFileLink;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.Serializer;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
+import org.glassfish.jersey.media.multipart.FormDataParam;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.vavr.Tuple;
+
+/**
+ * context files subresource
+ * 
+ * @author Johannes Stamm, peak-Solution GmbH
+ *
+ */
+public class ContextFilesSubresource {
+
+	@EJB
+	private FileLinkActivity fileLinkActivity;
+
+	@EJB
+	private EntityService entityService;
+
+	private Class<? extends ContextDescribable> contextDescribableClass;
+
+	/**
+	 * Set the Entity class of the parent resource. This method has to be called
+	 * right after the resource was initialized by the container. The entity class
+	 * is used to distinguish the type of the parent resource.
+	 * 
+	 * This method is package-private to workaround an issue in WELD complaining
+	 * about: Parameter 1 of type ... is not resolvable to a concrete type.
+	 * 
+	 * @param contextDescribableClass the Entity class of the parent resource
+	 */
+	void setEntityClass(Class<? extends ContextDescribable> contextDescribableClass) {
+		this.contextDescribableClass = contextDescribableClass;
+	}
+
+	/**
+	 * Creates new {@link FileLink} for {@link TestStep}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param body       The {@link FileLink} to create.
+	 * @return
+	 */
+	@POST
+	@Operation(summary = "Creates a new file on a context attribute.", responses = {
+			@ApiResponse(description = "The stored file link.", content = @Content(schema = @Schema(implementation = MDMFileLink.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.MULTIPART_FORM_DATA)
+	public Response createFile(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the parent ContextDescribable", required = true) @PathParam(REQUESTPARAM_ID) String contextDescribableId,
+			@Parameter(description = "ContextType of the Component holding the attribute with the FileLink", required = true) @PathParam(REQUESTPARAM_CONTEXTTYPE) ContextType contextType,
+			@Parameter(description = "Name of the ContextComponent holding the attribute with the FileLink", required = true) @PathParam(REQUESTPARAM_CONTEXTCOMPONENTNAME) String contextComponentName,
+			@Parameter(description = "Name of the Attribute holding the FileLink", required = true) @PathParam(REQUESTPARAM_ATTRIBUTENAME) String attributeName,
+			@Parameter(description = "InputStream containing file data", required = true) @FormDataParam("file") InputStream fileInputStream,
+			@Parameter(description = "Meta data describing file", required = true) @FormDataParam("file") FormDataContentDisposition cdh,
+			@Parameter(description = "File description", required = true) @FormDataParam("description") String description,
+			@Parameter(description = "Mimetype of the file", required = true) @FormDataParam("mimeType") MimeType mimeType) {
+
+		return entityService.find(V(sourceName), contextDescribableClass, V(contextDescribableId))
+				.map(contextDescribable -> fileLinkActivity.createFile(sourceName, contextDescribable,
+						cdh.getFileName(), fileInputStream, description, mimeType, contextType, contextComponentName,
+						attributeName))
+				.map(fileLink -> ServiceUtils.toResponse(Serializer.serializeFileLink(fileLink), Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	@GET
+	@Operation(summary = "Stream the contents of a file link", responses = {
+			@ApiResponse(description = "The content of the file link as a stream. MimeType is set to that of the file link.", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID or remote path supplied") })
+	@Path("/{" + REQUESTPARAM_REMOTEPATH + "}")
+	public Response streamFileLink(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the parent ContextDescribable", required = true) @PathParam(REQUESTPARAM_ID) String contextDescribableId,
+			@Parameter(description = "ContextType of the Component holding the attribute with the FileLink", required = true) @PathParam(REQUESTPARAM_CONTEXTTYPE) ContextType contextType,
+			@Parameter(description = "Name of the ContextComponent holding the attribute with the FileLink", required = true) @PathParam(REQUESTPARAM_CONTEXTCOMPONENTNAME) String contextComponentName,
+			@Parameter(description = "Name of the Attribute holding the FileLink", required = true) @PathParam(REQUESTPARAM_ATTRIBUTENAME) String attributeName,
+			@Parameter(description = "The remote path of the file link whose content is to be retrieved", required = true) @PathParam(REQUESTPARAM_REMOTEPATH) String remotePath) {
+		return entityService.find(V(sourceName), contextDescribableClass, V(contextDescribableId))
+				.map(contextDescribable -> Tuple.of(contextDescribable,
+						fileLinkActivity.findFileLinkInContext(remotePath, sourceName, contextDescribable, contextType,
+								contextComponentName, attributeName)))
+				.map(tuple -> Tuple.of(fileLinkActivity.toStreamingOutput(sourceName, tuple._1, tuple._2),
+						tuple._2.getMimeType().toString()))
+				.map(tuple -> Response.ok(tuple._1, tuple._2).build()).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	@GET
+	@Operation(summary = "Returns the size of a file in bytes.", responses = {
+			@ApiResponse(description = "The file size of the requested remote path.", content = @Content(schema = @Schema(implementation = FileSize.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/size/{" + REQUESTPARAM_REMOTEPATH + "}")
+	public Response loadFileSize(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the parent ContextDescribable", required = true) @PathParam(REQUESTPARAM_ID) String contextDescribableId,
+			@Parameter(description = "The remote path of the file link whose content is to be retrieved", required = true) @PathParam(REQUESTPARAM_REMOTEPATH) String remotePath) {
+
+		return entityService.find(V(sourceName), contextDescribableClass, V(contextDescribableId))
+				.map(contextDescribabale -> fileLinkActivity.loadFileSize(sourceName, contextDescribabale,
+						FileLink.newRemote(remotePath, null, null)))
+				.map(fileSize -> Response.ok(fileSize).build()).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes attached file from {@link ContextDescirbable}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         The identifier of the {@link ContextDescirbable} which
+	 *                   contains the {@link FileLink}
+	 * @param remotePath The remote path of the {@link FileLink} to delete.
+	 * @return
+	 */
+	@DELETE
+	@Operation(summary = "Deletes an attached file from a context attribute.", responses = {
+			@ApiResponse(description = "The deleted file link", content = @Content(schema = @Schema(implementation = MDMFileLink.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_REMOTEPATH + "}")
+	public Response deleteFile(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the parent ContextDescribable", required = true) @PathParam(REQUESTPARAM_ID) String contextDescribableId,
+			@Parameter(description = "ContextType of the Component holding the attribute with the FileLink", required = true) @PathParam(REQUESTPARAM_CONTEXTTYPE) ContextType contextType,
+			@Parameter(description = "Name of the ContextComponent holding the attribute with the FileLink", required = true) @PathParam(REQUESTPARAM_CONTEXTCOMPONENTNAME) String contextComponentName,
+			@Parameter(description = "Name of the Attribute holding the FileLink", required = true) @PathParam(REQUESTPARAM_ATTRIBUTENAME) String attributeName,
+			@Parameter(description = "The remote path of the file link whose content is to be retrieved", required = true) @PathParam(REQUESTPARAM_REMOTEPATH) String remotePath) {
+
+		return entityService.find(V(sourceName), contextDescribableClass, V(contextDescribableId))
+				.map(contextDescribable -> fileLinkActivity.deleteFileLink(sourceName, contextDescribable, contextType,
+						contextComponentName, attributeName, remotePath))
+				.map(fileLink -> ServiceUtils.toResponse(Serializer.serializeFileLink(fileLink), Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/EnvironmentResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/EnvironmentResource.java
new file mode 100644
index 0000000..370e7b1
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/EnvironmentResource.java
@@ -0,0 +1,193 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.businessobjects.entity.I18NResponse;
+import org.eclipse.mdm.businessobjects.entity.MDMEntityResponse;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.vavr.control.Try;
+
+/**
+ * {@link Environment} resource
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Tag(name = "Environment")
+@Path("/environments")
+public class EnvironmentResource {
+
+	private static final Logger LOG = LoggerFactory.getLogger(EnvironmentResource.class);
+
+	@EJB
+	private EnvironmentService environmentService;
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * delegates the request to the {@link EnvironmentService}
+	 *
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the Environments", description = "Returns a list of the Environments", responses = {
+			@ApiResponse(description = "The environments", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response getEnvironments() {
+		try {
+			List<Environment> environments = this.environmentService.getEnvironments();
+			return ServiceUtils.toResponse(new MDMEntityResponse(Environment.class, environments), Status.OK);
+		} catch (RuntimeException e) {
+			LOG.error(e.getMessage(), e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	/**
+	 * delegates the request to the {@link EnvironmentService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get an Environment by name", description = "Returns Environment ", responses = {
+			@ApiResponse(description = "The project", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_SOURCENAME + "}")
+	public Response getEnvironment(
+			@Parameter(description = "Name of the MDM environment", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		try {
+			Environment environment = this.environmentService.getEnvironment(sourceName);
+			return ServiceUtils.toResponse(new MDMEntityResponse(Environment.class, environment), Status.OK);
+		} catch (RuntimeException e) {
+			LOG.error(e.getMessage(), e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	/**
+	 * Updates the {@link Environment} with all parameters set in the given JSON
+	 * body of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link Environment}
+	 */
+	@PUT
+	@Operation(summary = "Update an existing Environment", description = "Updates the Environment with all parameters set in the body of the request.", responses = {
+			@ApiResponse(description = "The Environment", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_SOURCENAME + "}")
+	public Response update(
+			@Parameter(description = "Name of the MDM environment", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName, 
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName), Try.of(() -> this.environmentService.getEnvironment(sourceName)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link EnvironmentService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the Environment localizations", description = "Returns Environment localizations", responses = {
+			@ApiResponse(description = "The Environment localizations", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_SOURCENAME + "}/localizations")
+	public Response localize(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName, 
+			@Parameter(description = "Get all localized attributes?", required = true) @QueryParam("all") boolean all) {
+
+		try {
+
+			if (all) {
+				Map<Attribute, String> localizedAttributeMap = this.environmentService
+						.localizeAllAttributes(sourceName);
+				Map<EntityType, String> localizedEntityTypeMap = this.environmentService.localizeAllTypes(sourceName);
+				return ServiceUtils.toResponse(new I18NResponse(localizedEntityTypeMap, localizedAttributeMap),
+						Status.OK);
+			}
+
+			Map<Attribute, String> localizedAttributeMap = this.environmentService.localizeAttributes(sourceName);
+			Map<EntityType, String> localizedEntityTypeMap = this.environmentService.localizeType(sourceName);
+			return ServiceUtils.toResponse(new I18NResponse(localizedEntityTypeMap, localizedAttributeMap), Status.OK);
+
+		} catch (RuntimeException e) {
+			LOG.error(e.getMessage(), e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	@GET
+	@Operation(summary = "Execute a search query", description = "Returns a list of entities matching the search query.", responses = {
+			@ApiResponse(description = "The Environment localizations", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_SOURCENAME + "}/search")
+	public Response search(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName, 
+			@Parameter(description = "Query string", required = true) @QueryParam("q") String query) {
+		List<Entity> searchResults = environmentService.search(sourceName, query);
+		return ServiceUtils.toResponse(new MDMEntityResponse(Environment.class, searchResults), Status.OK);
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/EnvironmentService.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/EnvironmentService.java
new file mode 100644
index 0000000..42d9538
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/EnvironmentService.java
@@ -0,0 +1,133 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.businessobjects.control.I18NActivity;
+import org.eclipse.mdm.businessobjects.control.MDMEntityAccessException;
+import org.eclipse.mdm.businessobjects.control.SearchActivity;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+
+/**
+ * {@link Environment} Bean implementation with available {@link Environment}
+ * operations
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Stateless
+public class EnvironmentService {
+
+	@Inject
+	private ConnectorService connectorService;
+	@EJB
+	private I18NActivity i18nActivity;
+	@EJB
+	private SearchActivity searchActivity;
+
+	/**
+	 * returns all {@link Environment}s of the connected {@link EntityManager}s
+	 * 
+	 * @return the connected {@link Environment}s
+	 */
+	public List<Environment> getEnvironments() {
+		try {
+			return this.connectorService.getContexts().stream().map(ApplicationContext::getEntityManager)
+					.filter(Optional::isPresent).map(Optional::get).map(em -> em.loadEnvironment())
+					.collect(Collectors.toList());
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+
+	}
+
+	/**
+	 * returns the {@link Environment} identified by the given name
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the {@link Environment} with the given name
+	 */
+	public Environment getEnvironment(String sourceName) {
+		try {
+			EntityManager em = this.connectorService.getContextByName(sourceName).getEntityManager()
+					.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+			return em.loadEnvironment();
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * returns localized {@link Environment} attributes
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the localized {@link Environment} attributes
+	 */
+	public Map<Attribute, String> localizeAttributes(String sourceName) {
+		return this.i18nActivity.localizeAttributes(sourceName, Environment.class);
+	}
+
+	/**
+	 * returns the localized {@link Environment} type name
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the localized {@link Environment} type name
+	 */
+	public Map<EntityType, String> localizeType(String sourceName) {
+		return this.i18nActivity.localizeType(sourceName, Environment.class);
+	}
+
+	/**
+	 * returns all localized attributes
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the localized attributes from the given source
+	 */
+	public Map<Attribute, String> localizeAllAttributes(String sourceName) {
+		return this.i18nActivity.localizeAllAttributes(sourceName);
+	}
+
+	/**
+	 * returns all localized types
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the localized types from the given source
+	 */
+	public Map<EntityType, String> localizeAllTypes(String sourceName) {
+		return this.i18nActivity.localizeAllTypes(sourceName);
+	}
+
+	public List<Entity> search(String sourceName, String query) {
+		ApplicationContext context = this.connectorService.getContextByName(sourceName);
+
+		return this.searchActivity.search(context, query);
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ExtSystemResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ExtSystemResource.java
new file mode 100644
index 0000000..09f518f
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ExtSystemResource.java
@@ -0,0 +1,359 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.vavr.collection.List;
+import io.vavr.control.Try;
+import org.eclipse.mdm.api.base.model.*;
+import org.eclipse.mdm.api.dflt.model.ExtSystem;
+import org.eclipse.mdm.api.dflt.model.ExtSystemAttribute;
+import org.eclipse.mdm.api.dflt.model.MDMAttribute;
+import org.eclipse.mdm.api.dflt.model.ValueList;
+import org.eclipse.mdm.businessobjects.control.FileLinkActivity;
+import org.eclipse.mdm.businessobjects.entity.*;
+import org.eclipse.mdm.businessobjects.service.ContextService;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import javax.ejb.EJB;
+import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+/**
+ * {@link MDMEntity} REST interface for external systems
+ * 
+ * @author Juergen Kleck, Peak Solution GmbH
+ *
+ */
+@Tag(name = "ExtSystem")
+@Path("/administration/{" + REQUESTPARAM_SOURCENAME + "}/externalsystems")
+public class ExtSystemResource {
+
+	@EJB
+	private ExtSystemService extSystemService;
+
+	@EJB
+	private EntityService entityService;
+
+	@EJB
+	private ContextService contextService;
+
+	@EJB
+	private FileLinkActivity fileLinkActivity;
+
+
+	/**
+	 * delegates the request to the {@link ExtSystemService}
+	 *
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the ExtSystem result
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Find ExtSystems by filter", description = "Get list of ExtSystems", responses = {
+			@ApiResponse(description = "The ExtSystems", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response getExtSystems(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+
+		return Try.of(() -> extSystemService.getExtSystems(sourceName)).map(List::ofAll).map(e -> ServiceUtils.buildEntityResponse(e, Status.OK, ExtSystem.class))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link ExtSystemService}
+	 *
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the ExtSystem result
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Find ExtSystems by filter", description = "Get list of ExtSystems", responses = {
+			@ApiResponse(description = "The ExtSystems", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/attributes/{" + REQUESTPARAM_ID + "}")
+	public Response getExtSystemAttributes(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the ExtSystem", required = true) @PathParam(REQUESTPARAM_ID) String id) {
+
+		java.util.List all = new java.util.ArrayList<>();
+		java.util.List extSystems = extSystemService.getExtSystemAttributes(sourceName, id);
+		// the ext. system attributes
+		all.addAll(extSystems);
+		// the mdm attributes
+		extSystems.stream().forEach(e -> all.addAll(((ExtSystemAttribute) e).getAttributes()));
+
+		return ServiceUtils.buildEntityResponse(List.ofAll(all), Status.OK, ExtSystemAttribute.class);
+	}
+
+	/**
+	 * delegates the request to the {@link ExtSystemService}
+	 *
+	 * @param sourceName    name of the source (MDM {@link Environment} name)
+	 * @param id id of the {@link MDMEntity}
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Find a ExtSystem by ID", description = "Returns ExtSystem based on ID", responses = {
+			@ApiResponse(description = "The Project", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response findExtSystem(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the ExtSystem", required = true) @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.find(V(sourceName), ExtSystem.class, V(id))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link MDMEntity}.
+	 *
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param body       The {@link MDMEntity} to create.
+	 * @return the created {@link MDMEntity} as {@link Response}.
+	 */
+	@POST
+	@Operation(summary = "Create a new ExtSystem",  responses = {
+			@ApiResponse(description = "The created ExtSystem", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response createExtSystem(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName, String body) {
+
+		return entityService
+				.create(V(sourceName), ExtSystem.class,
+						entityService.extractRequestBody(body, sourceName, List.of(ExtSystem.class)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link MDMEntity}.
+	 *
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param body       The {@link MDMEntity} to create.
+	 * @return the created {@link MDMEntity} as {@link Response}.
+	 */
+	@POST
+	@Operation(summary = "Create a new ExtSystem",  responses = {
+			@ApiResponse(description = "The created ExtSystem", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/attribute")
+	public Response createExtSystemAttribute(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName, String body) {
+
+		return entityService
+				.create(V(sourceName), ExtSystemAttribute.class,
+						entityService.extractRequestBody(body, sourceName, List.of(ExtSystem.class, ExtSystemAttribute.class)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link MDMEntity}.
+	 *
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param body       The {@link MDMEntity} to create.
+	 * @return the created {@link MDMEntity} as {@link Response}.
+	 */
+	@POST
+	@Operation(summary = "Create a new ExtSystem",  responses = {
+			@ApiResponse(description = "The created ExtSystem", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/mdmattribute")
+	public Response createMDMAttribute(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName, String body) {
+
+		return entityService
+				.create(V(sourceName), MDMAttribute.class,
+						entityService.extractRequestBody(body, sourceName, List.of(ExtSystemAttribute.class, MDMAttribute.class)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link MDMEntity} with all parameters set in the given JSON
+	 * body of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link MDMEntity} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link MDMEntity}
+	 */
+	@PUT
+	@Operation(summary = "Update an existing ExtSystem", description = "Updates the ExtSystem with all parameters set in the body of the request.", responses = {
+			@ApiResponse(description = "The updated ExtSystem", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response updateExtSystem(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName, 
+			@Parameter(description = "ID of the ExtSystem", required = true) @PathParam(REQUESTPARAM_ID) String id,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName), entityService.find(V(sourceName), ExtSystem.class, V(id)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link MDMEntity} with all parameters set in the given JSON
+	 * body of the request.
+	 *
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link MDMEntity} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link MDMEntity}
+	 */
+	@PUT
+	@Operation(summary = "Update an existing ExtSystem", description = "Updates the ExtSystem with all parameters set in the body of the request.", responses = {
+			@ApiResponse(description = "The updated ExtSystem", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/attribute/{" + REQUESTPARAM_ID + "}")
+	public Response updateExtSystemAttribute(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the ExtSystem", required = true) @PathParam(REQUESTPARAM_ID) String id,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName), entityService.find(V(sourceName), ExtSystemAttribute.class, V(id)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link MDMEntity} with all parameters set in the given JSON
+	 * body of the request.
+	 *
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link MDMEntity} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link MDMEntity}
+	 */
+	@PUT
+	@Operation(summary = "Update an existing ExtSystem", description = "Updates the ExtSystem with all parameters set in the body of the request.", responses = {
+			@ApiResponse(description = "The updated ExtSystem", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/mdmattribute/{" + REQUESTPARAM_ID + "}")
+	public Response updateMDMAttribute(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the ExtSystem", required = true) @PathParam(REQUESTPARAM_ID) String id,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName), entityService.find(V(sourceName), MDMAttribute.class, V(id)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link MDMEntity}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         The identifier of the {@link MDMEntity} to delete.
+	 * @return the deleted {@link ValueList }s as {@link Response}
+	 */
+	@DELETE
+	@Operation(summary = "Delete an existing ExtSystem", responses = {
+			@ApiResponse(description = "The deleted ExtSystem", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response deleteExtSystem(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the ExtSystem", required = true) @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.delete(V(sourceName), entityService.find(V(sourceName), ExtSystem.class, V(id)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link MDMEntity}.
+	 *
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         The identifier of the {@link MDMEntity} to delete.
+	 * @return the deleted {@link ValueList }s as {@link Response}
+	 */
+	@DELETE
+	@Operation(summary = "Delete an existing ExtSystem", responses = {
+			@ApiResponse(description = "The deleted ExtSystem", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/attribute/{" + REQUESTPARAM_ID + "}")
+	public Response deleteExtSystemAttribute(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the ExtSystem", required = true) @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.delete(V(sourceName), entityService.find(V(sourceName), ExtSystemAttribute.class, V(id)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link MDMEntity}.
+	 *
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         The identifier of the {@link MDMEntity} to delete.
+	 * @return the deleted {@link ValueList }s as {@link Response}
+	 */
+	@DELETE
+	@Operation(summary = "Delete an existing ExtSystem", responses = {
+			@ApiResponse(description = "The deleted ExtSystem", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/mdmattribute/{" + REQUESTPARAM_ID + "}")
+	public Response deleteMDMAttribute(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the ExtSystem", required = true) @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.delete(V(sourceName), entityService.find(V(sourceName), MDMAttribute.class, V(id)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ExtSystemService.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ExtSystemService.java
new file mode 100644
index 0000000..9049ac9
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ExtSystemService.java
@@ -0,0 +1,105 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import org.eclipse.mdm.api.base.model.*;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.ExtSystem;
+import org.eclipse.mdm.api.dflt.model.ExtSystemAttribute;
+import org.eclipse.mdm.businessobjects.control.*;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+import java.util.*;
+
+/**
+ * ExtSystemService Bean implementation with available
+ * operations
+ * 
+ * @author Juergen Kleck, Peak Solution GmbH
+ *
+ */
+@Stateless
+public class ExtSystemService {
+
+	@Inject
+	private ConnectorService connectorService;
+
+	/**
+	 * returns the matching {@link ExtSystem}s using the given filter or all
+	 * {@link ExtSystem}s if no filter is available
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the found {@link ExtSystem}s
+	 */
+	public List<ExtSystem> getExtSystems(String sourceName) {
+		List<ExtSystem> list = new ArrayList<>();
+		try {
+			Optional<List<ExtSystem>> values = this.connectorService.getContextByName(sourceName).getEntityManager()
+					.map(em -> em.loadAll(ExtSystem.class));
+
+			if(values.isPresent()) {
+				list = values.get();
+			}
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+		return list;
+	}
+
+	/**
+	 * returns a {@link ExtSystem} identified by the given id.
+	 * 
+	 * @param sourceName    name of the source (MDM {@link Environment} name)
+	 * @param extSystemId id of the {@link ExtSystem}
+	 * @return the matching {@link ExtSystem}
+	 */
+	public ExtSystem getExtSystem(String sourceName, String extSystemId) {
+		try {
+			EntityManager em = this.connectorService.getContextByName(sourceName).getEntityManager()
+					.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+			return em.load(ExtSystem.class, extSystemId);
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * returns the matching {@link ExtSystemAttribute}s using the given filter or all
+	 * {@link ExtSystemAttribute}s if no filter is available
+	 *
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the id of the external system
+	 * @return the found {@link ExtSystemAttribute}s
+	 */
+	public List<ExtSystemAttribute> getExtSystemAttributes(String sourceName, String id) {
+		List<ExtSystemAttribute> list = new ArrayList<>();
+		try {
+
+			Optional<List<ExtSystemAttribute>> values = this.connectorService.getContextByName(sourceName).getEntityManager()
+					.map(em -> em.loadChildren(em.load(ExtSystem.class, id), ExtSystemAttribute.class));
+
+			if(values.isPresent()) {
+				list = values.get();
+			}
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+		return list;
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/FilesAttachableSubresource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/FilesAttachableSubresource.java
new file mode 100644
index 0000000..5049624
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/FilesAttachableSubresource.java
@@ -0,0 +1,225 @@
+/*******************************************************************************
+ * Copyright (c) 2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_REMOTEPATH;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import java.io.InputStream;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.FileLink;
+import org.eclipse.mdm.api.base.model.FilesAttachable;
+import org.eclipse.mdm.api.base.model.MimeType;
+import org.eclipse.mdm.businessobjects.control.FileLinkActivity;
+import org.eclipse.mdm.businessobjects.entity.FileSize;
+import org.eclipse.mdm.businessobjects.entity.MDMEntityResponse;
+import org.eclipse.mdm.businessobjects.entity.MDMFileLink;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.Serializer;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
+import org.glassfish.jersey.media.multipart.FormDataParam;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.ArraySchema;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.vavr.Tuple;
+
+/**
+ * Subresource for {@link FilesAttachable}s.
+ * 
+ * @author Johannes Stamm, peak-Solution GmbH
+ *
+ */
+public class FilesAttachableSubresource {
+
+	@EJB
+	private EntityService entityService;
+
+	@EJB
+	private FileLinkActivity fileLinkActivity;
+
+	private Class<? extends FilesAttachable> fileAttachableClass;
+
+	/**
+	 * Set the Entity class of the parent resource. This method has to be called
+	 * right after the resource was initialized by the container. The entity class
+	 * is used to distinguish the type of the parent resource.
+	 * 
+	 * This method is package-private to workaround an issue in WELD complaining
+	 * about: Parameter 1 of type ... is not resolvable to a concrete type.
+	 * 
+	 * @param fileAttachableClass the Entity class of the parent resource
+	 */
+	void setEntityClass(Class<? extends FilesAttachable> fileAttachableClass) {
+		this.fileAttachableClass = fileAttachableClass;
+	}
+
+	/**
+	 * Stream the contents of a file link.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         The identifier of the {@link FilesAttachable} which
+	 *                   contains the {@link FileLink}
+	 * @param remotePath The remote path of the {@link FileLink} to identify, which
+	 *                   {@link FileLink}'s content is requests.
+	 * @return The content of the file as {@link javax.ws.rs.core.StreamingOutput}.
+	 *         The response also has the MimeType set according to
+	 *         {@link FileLink#getMimeType()}.
+	 */
+	@GET
+	@Operation(summary = "Stream the contents of a file link", responses = {
+			@ApiResponse(description = "The content of the file link as a stream. MimeType is set to that of the file link.", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID or remote path supplied") })
+	@Path("/{" + REQUESTPARAM_REMOTEPATH + "}")
+	public Response streamFileLink(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the Test containing the file link", required = true) @PathParam(REQUESTPARAM_ID) String id,
+			@Parameter(description = "The remote path of the file link whose content is to be retrieved", required = true) @PathParam(REQUESTPARAM_REMOTEPATH) String remotePath) {
+
+		return entityService.find(V(sourceName), fileAttachableClass, V(id))
+				.map(filesAttachable -> Tuple.of(filesAttachable,
+						fileLinkActivity.findFileLinkAtFileAttachable(remotePath, filesAttachable)))
+				.map(tuple -> Tuple.of(fileLinkActivity.toStreamingOutput(sourceName, tuple._1, tuple._2),
+						tuple._2.getMimeType().toString()))
+				.map(tuple -> Response.ok(tuple._1, tuple._2).build()).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes attached file from {@link FilesAttachable}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         The identifier of the {@link FilesAttachable} which
+	 *                   contains the {@link FileLink}
+	 * @param remotePath The remote path of the {@link FileLink} to delete.
+	 * @return
+	 */
+	@DELETE
+	@Operation(summary = "Deletes an attached file.", responses = {
+			@ApiResponse(description = "The deleted file link", content = @Content(schema = @Schema(implementation = MDMFileLink.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_REMOTEPATH + "}")
+	public Response deleteFile(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the FilesAttachable containing the file link", required = true) @PathParam(REQUESTPARAM_ID) String id,
+			@Parameter(description = "The remote path of the file link whose content is to be retrieved", required = true) @PathParam(REQUESTPARAM_REMOTEPATH) String remotePath) {
+
+		return entityService.find(V(sourceName), fileAttachableClass, V(id))
+				.map(fileAttachable -> fileLinkActivity.deleteFileLink(sourceName, fileAttachable, remotePath))
+				.map(fileLink -> ServiceUtils.toResponse(Serializer.serializeFileLink(fileLink), Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Creates new {@link FileLink} for {@link FilesAttachable}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param body       The {@link FileLink} to create.
+	 * @return
+	 */
+	@POST
+	@Operation(summary = "Attaches a new file.", responses = {
+			@ApiResponse(description = "The stored file link.", content = @Content(schema = @Schema(implementation = MDMFileLink.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.MULTIPART_FORM_DATA)
+	public Response createFile(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the FilesAttachable containing the file link", required = true) @PathParam(REQUESTPARAM_ID) String id,
+			@Parameter(description = "InputStream containing file data", required = true) @FormDataParam("file") InputStream fileInputStream,
+			@Parameter(description = "Meta data describing file", required = true) @FormDataParam("file") FormDataContentDisposition cdh,
+			@Parameter(description = "File description", required = true) @FormDataParam("description") String description,
+			@Parameter(description = "Mimetype of the file", required = true) @FormDataParam("mimeType") MimeType mimeType) {
+
+		return entityService.find(V(sourceName), fileAttachableClass, V(id))
+				.map(fileAttachable -> fileLinkActivity.createFile(sourceName, fileAttachable, cdh.getFileName(),
+						fileInputStream, description, mimeType))
+				.map(fileLink -> ServiceUtils.toResponse(Serializer.serializeFileLink(fileLink), Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Load the file size of a file link.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         The identifier of the {@link FilesAttachable} which
+	 *                   contains the {@link FileLink}
+	 * @param remotePath The remote path of the {@link FileLink} to identify, which
+	 *                   {@link FileLink}'s content is requests.
+	 * @return The serialized {@link FileLink} with the size.
+	 */
+	@GET
+	@Operation(summary = "Returns the file size of file link.", responses = {
+			@ApiResponse(description = "The file size of the requested file link.", content = @Content(schema = @Schema(implementation = FileSize.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/size/{" + REQUESTPARAM_REMOTEPATH + "}")
+	public Response loadFileSize(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "The identifier of the FilesAttachable containing the file links", required = true) @PathParam(REQUESTPARAM_ID) String id,
+			@Parameter(description = "The remote path of the file link whose size is to be retrieved", required = true) @PathParam(REQUESTPARAM_REMOTEPATH) String remotePath) {
+
+		return entityService.find(V(sourceName), fileAttachableClass, V(id))
+				.map(filesAttachable -> Tuple.of(filesAttachable,
+						fileLinkActivity.findFileLinkAtFileAttachable(remotePath, filesAttachable)))
+				.map(tuple -> fileLinkActivity.loadFileSize(sourceName, tuple._1, tuple._2))
+				.map(fileSize -> ServiceUtils.toResponse(fileSize, Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Load the file sizes for all {@link FileLink}s of the {@link FilesAttachable}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         The identifier of the {@link FilesAttachable} which
+	 *                   contains the {@link FileLink}
+	 * @param remotePath The remote path of the {@link FileLink} to identify, which
+	 *                   {@link FileLink}'s content is requests.
+	 * @return The serialized {@link FileLink} with the size.
+	 */
+	@GET
+	@Operation(summary = "Returns the sizes of all file links attached to a FilesAttachable.", responses = {
+			@ApiResponse(description = "The file size of the requested file link.", content = @Content(array = @ArraySchema(schema = @Schema(implementation = FileSize.class)))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/sizes")
+	public Response loadFileSizes(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the FilesAttachable containing the file link", required = true) @PathParam(REQUESTPARAM_ID) String id) {
+
+		return entityService.find(V(sourceName), fileAttachableClass, V(id))
+				.map(filesAttachable -> fileLinkActivity.loadFileSizes(sourceName, filesAttachable))
+				.map(fileSizes -> ServiceUtils.toResponse(fileSizes, Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/MeasurementResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/MeasurementResource.java
new file mode 100644
index 0000000..a29e890
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/MeasurementResource.java
@@ -0,0 +1,467 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ATTRIBUTENAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_CONTEXTCOMPONENTNAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_CONTEXTTYPE;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.container.ResourceContext;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.dflt.model.ValueList;
+import org.eclipse.mdm.businessobjects.control.FileLinkActivity;
+import org.eclipse.mdm.businessobjects.entity.ContextResponse;
+import org.eclipse.mdm.businessobjects.entity.ContextSensorResponse;
+import org.eclipse.mdm.businessobjects.entity.I18NResponse;
+import org.eclipse.mdm.businessobjects.entity.MDMEntityResponse;
+import org.eclipse.mdm.businessobjects.entity.SearchAttributeResponse;
+import org.eclipse.mdm.businessobjects.service.ContextService;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.vavr.Value;
+import io.vavr.collection.List;
+import io.vavr.collection.Seq;
+import io.vavr.control.Try;
+
+/**
+ * {@link Measurement} resource
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Tag(name = "Measurement")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/measurements")
+public class MeasurementResource {
+
+	@EJB
+	private MeasurementService measurementService;
+
+	@EJB
+	private EntityService entityService;
+
+	@EJB
+	private ContextService contextService;
+
+	@EJB
+	private FileLinkActivity fileLinkActivity;
+
+	@Context
+	private ResourceContext resourceContext;
+
+	/**
+	 * delegates the request to the {@link MeasurementService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the search attributes", description = "Get a list of search attributes", responses = {
+			@ApiResponse(description = "The search attributes", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+
+		return Try.of(() -> measurementService.getSearchAttributes(sourceName))
+				.map(attrs -> ServiceUtils.toResponse(new SearchAttributeResponse(attrs), Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link MeasurementService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the Measurement result
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Find Measurements by filter", description = "Get list of Measurements", responses = {
+			@ApiResponse(description = "The Measurements", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response getMeasurements(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "Filter expression", required = false) @QueryParam("filter") String filter) {
+
+		return Try.of(() -> measurementService.getMeasurements(sourceName, filter)).map(List::ofAll)
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK, Measurement.class))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link MeasurementService}
+	 * 
+	 * @param sourceName    name of the source (MDM {@link Environment} name)
+	 * @param MeasurementId id of the {@link Measurement}
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Find a Measurement by ID", description = "Returns Measurement based on ID", responses = {
+			@ApiResponse(description = "The Project", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response findMeasurement(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the Measurement", required = true) @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.find(V(sourceName), Measurement.class, V(id))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link MeasurementService}
+	 * 
+	 * @param sourceName    name of the source (MDM {@link Environment} name)
+	 * @param MeasurementId id of the {@link Measurement}
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the complete context data for a Mesurement", description = "Returns the complete context", responses = {
+			@ApiResponse(responseCode = "200", description = "The Measurement context data", content = @Content(schema = @Schema(implementation = ContextResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts")
+	public Response findContext(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id) {
+
+		return contextService.getMeasurementContext(V(sourceName), V(id)).map(ServiceUtils::contextMapToJava)
+				.map(ContextResponse::new).map(contextResponse -> ServiceUtils.toResponse(contextResponse, Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the context of {@link Measurement} with all parameters set in the
+	 * given JSON body of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link MeasurementValue} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the context map of the updated {@link Measurement}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts")
+	public Response updateContext(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id, String body) {
+
+		return entityService.find(V(sourceName), Measurement.class, V(id))
+				.map(measurement -> contextService.updateContext(body, measurement)).map(ContextResponse::new)
+				.map(contextResponse -> ServiceUtils.toResponse(contextResponse, Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link MeasurementService}
+	 * 
+	 * @param sourceName    name of the source (MDM {@link Environment} name)
+	 * @param MeasurementId id of the {@link Measurement}
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the UnitUnderTest context data for a Measurment", description = "Returns the complete context", responses = {
+			@ApiResponse(responseCode = "200", description = "The UnitUnderTest context data", content = @Content(schema = @Schema(implementation = ContextResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts/unitundertest")
+	public Response findContextUUT(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id) {
+
+		return contextService.getMeasurementContext(V(sourceName), V(id), ContextType.UNITUNDERTEST)
+				.map(ServiceUtils::contextMapToJava).map(ContextResponse::new)
+				.map(contextResponse -> ServiceUtils.toResponse(contextResponse, Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the context of {@link ContextType} UNITUNDERTEST of
+	 * {@link Measurement} with all parameters set in the given JSON body of the
+	 * request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link MeasurementValue} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the context map of {@link ContextType} UNITUNDERTEST of the updated
+	 *         {@link TestStep}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts/unitundertest")
+	public Response updateContextUUT(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id, String body) {
+
+		return entityService.find(V(sourceName), Measurement.class, V(id))
+				.map(measurement -> contextService.updateContext(body, measurement, ContextType.UNITUNDERTEST))
+				.map(ContextResponse::new).map(contextResponse -> ServiceUtils.toResponse(contextResponse, Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link MeasurementService}
+	 * 
+	 * @param sourceName    name of the source (MDM {@link Environment} name)
+	 * @param MeasurementId id of the {@link Measurement}
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the TestSequence context data for a Measurement", description = "Returns the TestSequence context data", responses = {
+			@ApiResponse(responseCode = "200", description = "The TestSequence context data", content = @Content(schema = @Schema(implementation = ContextResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts/testsequence")
+	public Response findContextTSQ(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id) {
+
+		return contextService.getMeasurementContext(V(sourceName), V(id), ContextType.TESTSEQUENCE)
+				.map(ServiceUtils::contextMapToJava).map(ContextResponse::new)
+				.map(contextResponse -> ServiceUtils.toResponse(contextResponse, Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the context of {@link ContextType} TESTSEQUENCE of
+	 * {@link Measurement} with all parameters set in the given JSON body of the
+	 * request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link MeasurementValue} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the context map of {@link ContextType} TESTSEQUENCE of the updated
+	 *         {@link TestStep}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts/testsequence")
+	public Response updateContextTSQ(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id, String body) {
+
+		return entityService.find(V(sourceName), Measurement.class, V(id))
+				.map(measurement -> contextService.updateContext(body, measurement, ContextType.TESTSEQUENCE))
+				.map(ContextResponse::new).map(contextResponse -> ServiceUtils.toResponse(contextResponse, Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link MeasurementService}
+	 * 
+	 * @param sourceName    name of the source (MDM {@link Environment} name)
+	 * @param MeasurementId id of the {@link Measurement}
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the TestEquipment context data for a Measurement", description = "Returns the TestEquipment context data", responses = {
+			@ApiResponse(responseCode = "200", description = "The TestEquipment context data", content = @Content(schema = @Schema(implementation = ContextResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts/testequipment")
+	public Response findContextTEQ(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id) {
+
+		return contextService.getMeasurementContext(V(sourceName), V(id), ContextType.TESTEQUIPMENT)
+				.map(ServiceUtils::contextMapToJava).map(ContextResponse::new)
+				.map(contextResponse -> ServiceUtils.toResponse(contextResponse, Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the context of {@link ContextType} TESTEQUIPMENT of
+	 * {@link Measurement} with all parameters set in the given JSON body of the
+	 * request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link MeasurementValue} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the context map of {@link ContextType} TESTEQUIPMENT of the updated
+	 *         {@link TestStep}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts/testequipment")
+	public Response updateContextTEQ(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id, String body) {
+
+		return entityService.find(V(sourceName), Measurement.class, V(id))
+				.map(measurement -> contextService.updateContext(body, measurement, ContextType.TESTEQUIPMENT))
+				.map(ContextResponse::new).map(contextResponse -> ServiceUtils.toResponse(contextResponse, Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link MeasurementService}
+	 * 
+	 * @param sourceName    name of the source (MDM {@link Environment} name)
+	 * @param MeasurementId id of the {@link Measurement}
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the Sensor context data", description = "Returns the Sensor context data of TestEquipments", responses = {
+			@ApiResponse(responseCode = "200", description = "The Sensor context data", content = @Content(schema = @Schema(implementation = ContextResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts/testequipment/sensors")
+	public Response getContextTEQSensors(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id) {
+
+		return Try.of(() -> measurementService.getSensors(sourceName, id))
+				.map(sensorMap -> ServiceUtils.toResponse(new ContextSensorResponse(sensorMap), Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link MeasurementService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the Measurement localizations", description = "Returns Measurement localizations", responses = {
+			@ApiResponse(description = "The Measurement localizations", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+
+		return Try
+				.of(() -> new I18NResponse(measurementService.localizeType(sourceName),
+						measurementService.localizeAttributes(sourceName)))
+				.map(resp -> ServiceUtils.toResponse(resp, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link Measurement}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param body       The {@link Measurement} to create.
+	 * @return the created {@link Measurement} as {@link Response}.
+	 */
+	@POST
+	@Operation(summary = "Create a new Measurement", responses = {
+			@ApiResponse(description = "The created Measurement", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			String body) {
+		Seq<Value<?>> args = entityService
+				.extractRequestBody(body, sourceName, io.vavr.collection.List.of(TestStep.class))
+				.append(V(new ContextRoot[] {}));
+		return entityService.create(V(sourceName), Measurement.class, args)
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link Measurement} with all parameters set in the given JSON
+	 * body of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link MeasurementValue} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link Measurement}
+	 */
+	@PUT
+	@Operation(summary = "Update an existing Measurement", description = "Updates the Measurement with all parameters set in the body of the request.", responses = {
+			@ApiResponse(description = "The updated Measurement", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response update(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the Measurement", required = true) @PathParam(REQUESTPARAM_ID) String id,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName), entityService.find(V(sourceName), Measurement.class, V(id)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link Measurement}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         The identifier of the {@link Measurement} to delete.
+	 * @return the deleted {@link ValueList }s as {@link Response}
+	 */
+	@DELETE
+	@Operation(summary = "Delete an existing Measurement", responses = {
+			@ApiResponse(description = "The deleted Measurement", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response delete(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the Measurement", required = true) @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.delete(V(sourceName), entityService.find(V(sourceName), Measurement.class, V(id)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts/{" + REQUESTPARAM_CONTEXTTYPE + "}/{" + REQUESTPARAM_CONTEXTCOMPONENTNAME
+			+ "}/{" + REQUESTPARAM_ATTRIBUTENAME + "}/files")
+	public ContextFilesSubresource getContextFilesSubresource() {
+		ContextFilesSubresource resource = resourceContext.getResource(ContextFilesSubresource.class);
+		resource.setEntityClass(Measurement.class);
+		return resource;
+	}
+
+	@Path("/{" + REQUESTPARAM_ID + "}/files/")
+	public FilesAttachableSubresource getFilesAttachableSubresource() {
+		FilesAttachableSubresource resource = resourceContext.getResource(FilesAttachableSubresource.class);
+		resource.setEntityClass(Measurement.class);
+		return resource;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/MeasurementService.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/MeasurementService.java
new file mode 100644
index 0000000..8829755
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/MeasurementService.java
@@ -0,0 +1,202 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextSensor;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.businessobjects.control.ContextActivity;
+import org.eclipse.mdm.businessobjects.control.I18NActivity;
+import org.eclipse.mdm.businessobjects.control.MDMEntityAccessException;
+import org.eclipse.mdm.businessobjects.control.NavigationActivity;
+import org.eclipse.mdm.businessobjects.control.SearchActivity;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+
+/**
+ * MeasurementService Bean implementation with available {@link Measurement}
+ * operations
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Stateless
+public class MeasurementService {
+
+	@Inject
+	private ConnectorService connectorService;
+	@EJB
+	private I18NActivity i18nActivity;
+	@EJB
+	private NavigationActivity navigationActivity;
+	@EJB
+	private ContextActivity contextActivity;
+	@EJB
+	private SearchActivity searchActivity;
+
+	/**
+	 * returns the matching {@link Measurement}s using the given filter or all
+	 * {@link Measurement}s if no filter is available
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the {@link Measurement} result
+	 * @return the found {@link Measurement}s
+	 */
+	public List<Measurement> getMeasurements(String sourceName, String filter) {
+		try {
+			ApplicationContext context = this.connectorService.getContextByName(sourceName);
+			EntityManager em = context.getEntityManager()
+					.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+
+			if (filter == null || filter.trim().length() <= 0) {
+				return em.loadAll(Measurement.class);
+			}
+
+			if (ServiceUtils.isParentFilter(context, filter, Measurement.PARENT_TYPE_TESTSTEP)) {
+				String id = ServiceUtils.extactIdFromParentFilter(context, filter, Measurement.PARENT_TYPE_TESTSTEP);
+				return this.navigationActivity.getMeasurements(sourceName, id);
+			}
+
+			return this.searchActivity.search(context, Measurement.class, filter);
+
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * Returns the {@link SearchAttribute} for the entity type Measurement in the
+	 * given data source.
+	 * 
+	 * @param sourceName The name of the data source.
+	 * @return the found {@link SearchAttribute}s
+	 */
+	public List<SearchAttribute> getSearchAttributes(String sourceName) {
+		return this.searchActivity.listAvailableAttributes(this.connectorService.getContextByName(sourceName),
+				Measurement.class);
+	}
+
+	/**
+	 * returns a {@link Measurement} identified by the given id.
+	 * 
+	 * @param sourceName    name of the source (MDM {@link Environment} name)
+	 * @param measurementId id of the {@link Measurement}
+	 * @return the matching {@link Measurement}
+	 */
+	public Measurement getMeasurement(String sourceName, String measurementId) {
+		try {
+			EntityManager em = this.connectorService.getContextByName(sourceName).getEntityManager()
+					.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+			return em.load(Measurement.class, measurementId);
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * returns the complete context data (ordered and measured) for a
+	 * {@link Measurement}
+	 * 
+	 * @param sourceName    name of the source (MDM {@link Environment} name)
+	 * @param measurementId id of the {@link Measurement}
+	 * @return a map with the complete context data (ordered and measured)
+	 */
+	public Map<String, Map<ContextType, ContextRoot>> getContext(String sourceName, String measurementId) {
+		return this.contextActivity.getMeasurementContext(sourceName, measurementId);
+	}
+
+	/**
+	 * returns the UnitUnderTest context data (ordered and measured) for a
+	 * {@link Measurement}
+	 * 
+	 * @param sourceName      name of the source (MDM {@link Environment} name)
+	 * @param measurementIdId id of the {@link Measurement}
+	 * @return a map with the UnitUnderTest context data (ordered and measured)
+	 */
+	public Map<String, Map<ContextType, ContextRoot>> getContextUUT(String sourceName, String measurementId) {
+		return this.contextActivity.getMeasurementContext(sourceName, measurementId, ContextType.UNITUNDERTEST);
+	}
+
+	/**
+	 * returns the TestSequence context data (ordered and measured) for a
+	 * {@link Measurement}
+	 * 
+	 * @param sourceName    name of the source (MDM {@link Environment} name)
+	 * @param measurementId id of the {@link Measurement}
+	 * @return a map with the TestSequence context data (ordered and measured)
+	 */
+	public Map<String, Map<ContextType, ContextRoot>> getContextTSQ(String sourceName, String measurementId) {
+		return this.contextActivity.getMeasurementContext(sourceName, measurementId, ContextType.TESTSEQUENCE);
+	}
+
+	/**
+	 * returns the TestEquipment context data (ordered and measured) for a
+	 * {@link Measurement}
+	 * 
+	 * @param sourceName    name of the source (MDM {@link Environment} name)
+	 * @param measurementId id of the {@link Measurement}
+	 * @return a map with the TestEquipment context data (ordered and measured)
+	 */
+	public Map<String, Map<ContextType, ContextRoot>> getContextTEQ(String sourceName, String measurementId) {
+		return this.contextActivity.getMeasurementContext(sourceName, measurementId, ContextType.TESTEQUIPMENT);
+	}
+
+	/**
+	 * returns all sensor context data of TestEquipment sensor configuration
+	 * 
+	 * @param sourceName    name of the source (MDM {@link Environment} name)
+	 * @param measurementId id of the {@link Measurement}
+	 * @return a map with the TestEquipment sensor context data (ordered and
+	 *         measured)
+	 */
+	public Map<String, List<ContextSensor>> getSensors(String sourceName, String measurementId) {
+		return this.contextActivity.getMeasurementSensorContext(sourceName, measurementId);
+	}
+
+	/**
+	 * returns localized {@link Measurement} attributes
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the localized {@link Measurement} attributes
+	 */
+	public Map<Attribute, String> localizeAttributes(String sourceName) {
+		return this.i18nActivity.localizeAttributes(sourceName, Measurement.class);
+	}
+
+	/**
+	 * returns the localized {@link Measurement} type name
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the localized {@link Measurement} type name
+	 */
+	public Map<EntityType, String> localizeType(String sourceName) {
+		return this.i18nActivity.localizeType(sourceName, Measurement.class);
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/NestedTemplateAttributeResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/NestedTemplateAttributeResource.java
new file mode 100644
index 0000000..24b7765
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/NestedTemplateAttributeResource.java
@@ -0,0 +1,218 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_CONTEXTTYPE;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID2;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID3;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID4;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.L;
+import static org.eclipse.mdm.businessobjects.service.EntityService.SL;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.dflt.model.TemplateAttribute;
+import org.eclipse.mdm.api.dflt.model.TemplateComponent;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.vavr.collection.List;
+
+/**
+ * {@link NestedTemplateAttribute} resource handling REST requests
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+@Tag(name = "Template")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/tplroots/{" + REQUESTPARAM_CONTEXTTYPE + "}/{" + REQUESTPARAM_ID
+		+ "}/tplcomps/{" + REQUESTPARAM_ID2 + "}/tplcomps/{" + REQUESTPARAM_ID3 + "}/tplattrs")
+public class NestedTemplateAttributeResource {
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * Returns the found nested {@link TemplateAttribute}.
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param contextType {@link ContextType} of the nested
+	 *                    {@link TemplateAttribute} to load
+	 * @param id          id of the nested {@link TemplateAttribute}
+	 * @return the found nested {@link TemplateAttribute} as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID4 + "}")
+	public Response find(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String tplRootId,
+			@PathParam(REQUESTPARAM_ID2) String parentTplCompId, @PathParam(REQUESTPARAM_ID3) String tplCompId,
+			@PathParam(REQUESTPARAM_ID4) String id) {
+		return entityService.find(V(sourceName), TemplateAttribute.class, V(id),
+				ServiceUtils.getContextTypeSupplier(contextTypeParam), SL(tplRootId, parentTplCompId, tplCompId))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) nested {@link TemplateAttribute}s.
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param contextType {@link ContextType} of the nested
+	 *                    {@link TemplateAttribute} to load
+	 * @param filter      filter string to filter the nested
+	 *                    {@link TemplateAttribute} result
+	 * @return the (filtered) nested {@link TemplateAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response findAll(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String tplRootId,
+			@PathParam(REQUESTPARAM_ID2) String parentTplCompId, @PathParam(REQUESTPARAM_ID3) String tplCompId,
+			@QueryParam("filter") String filter) {
+		return entityService
+				.find(V(sourceName), TemplateComponent.class, V(tplCompId),
+						ServiceUtils.getContextTypeSupplier(contextTypeParam), SL(tplRootId, parentTplCompId))
+				.map(tplComp -> List.ofAll(tplComp.getTemplateAttributes()))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created nested {@link TemplateAttribute}.
+	 * 
+	 * @param body The nested {@link TemplateAttribute} to create.
+	 * @return The created nested {@link TemplateAttribute} as {@link Response}.
+	 */
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String tplRootId,
+			@PathParam(REQUESTPARAM_ID2) String parentTplCompId, @PathParam(REQUESTPARAM_ID3) String tplCompId,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.create(V(sourceName), TemplateAttribute.class, L(
+						requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME),
+						entityService.find(V(sourceName), TemplateComponent.class, V(tplCompId),
+								ServiceUtils.getContextTypeSupplier(contextTypeParam), SL(tplRootId, parentTplCompId))))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link TemplateAttribute} with all parameters set in the given
+	 * JSON body of the request
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the nested {@link TemplateAttribute} to
+	 *                   delete.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated nested {@link TemplateAttribute}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID4 + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String tplRootId,
+			@PathParam(REQUESTPARAM_ID2) String parentTplCompId, @PathParam(REQUESTPARAM_ID3) String tplCompId,
+			@PathParam(REQUESTPARAM_ID4) String id, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName),
+						entityService.find(V(sourceName), TemplateAttribute.class, V(id),
+								ServiceUtils.getContextTypeSupplier(contextTypeParam),
+								SL(tplRootId, parentTplCompId, tplCompId)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link NestedTemplateAttribute}.
+	 * 
+	 * 
+	 * @param id The identifier of the {@link NestedTemplateAttribute} to delete.
+	 * @return the deleted {@link NestedTemplateAttribute }s as {@link Response}
+	 */
+	@DELETE
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID4 + "}")
+	public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String tplRootId,
+			@PathParam(REQUESTPARAM_ID2) String parentTplCompId, @PathParam(REQUESTPARAM_ID3) String tplCompId,
+			@PathParam(REQUESTPARAM_ID4) String id) {
+		return entityService
+				.delete(V(sourceName),
+						entityService.find(V(sourceName), TemplateAttribute.class, V(id),
+								ServiceUtils.getContextTypeSupplier(contextTypeParam),
+								SL(tplRootId, parentTplCompId, tplCompId)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the search attributes for the {@link TemplateAttribute} type.
+	 * 
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the {@link SearchAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildSearchAttributesResponse(V(sourceName), TemplateAttribute.class, entityService);
+	}
+
+	/**
+	 * Returns a map of localization for the entity type and the attributes.
+	 * 
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the I18N as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildLocalizationResponse(V(sourceName), TemplateAttribute.class, entityService);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/NestedTemplateComponentResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/NestedTemplateComponentResource.java
new file mode 100644
index 0000000..d115562
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/NestedTemplateComponentResource.java
@@ -0,0 +1,214 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_CATALOGCOMPONENT_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_CONTEXTTYPE;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID2;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID3;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.L;
+import static org.eclipse.mdm.businessobjects.service.EntityService.SL;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.dflt.model.CatalogComponent;
+import org.eclipse.mdm.api.dflt.model.TemplateComponent;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.vavr.collection.List;
+
+/**
+ * {@link TemplateComponent} resource handling REST requests for nested
+ * {@link TemplateComponent}s
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+@Tag(name = "Template")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/tplroots/{" + REQUESTPARAM_CONTEXTTYPE + "}/{" + REQUESTPARAM_ID
+		+ "}/tplcomps/{" + REQUESTPARAM_ID2 + "}/tplcomps")
+public class NestedTemplateComponentResource {
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * Returns the found nested {@link TemplateComponent}.
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param contextType {@link ContextType} of the {@link TemplateComponent} to
+	 *                    load
+	 * @param id          id of the {@link TemplateComponent}
+	 * @return the found {@link TemplateComponent} as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID3 + "}")
+	public Response find(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String tplRootId,
+			@PathParam(REQUESTPARAM_ID2) String parentTplCompId, @PathParam(REQUESTPARAM_ID3) String id) {
+		return entityService
+				.find(V(sourceName), TemplateComponent.class, V(id),
+						ServiceUtils.getContextTypeSupplier(contextTypeParam), SL(tplRootId, parentTplCompId))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) nested {@link TemplateComponent}s.
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param contextType {@link ContextType} of the {@link TemplateComponent} to
+	 *                    load
+	 * @param filter      filter string to filter the {@link TemplateComponent}
+	 *                    result
+	 * @return the (filtered) {@link TemplateComponent}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response findAll(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String tplRootId,
+			@PathParam(REQUESTPARAM_ID2) String parentTplCompId, @QueryParam("filter") String filter) {
+		return entityService
+				.find(V(sourceName), TemplateComponent.class, V(parentTplCompId),
+						ServiceUtils.getContextTypeSupplier(contextTypeParam), SL(tplRootId))
+				.map(tplComp -> List.ofAll(tplComp.getTemplateComponents()))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link TemplateComponentValue}.
+	 * 
+	 * 
+	 * @param body The {@link TemplateComponent} to create.
+	 * @param id   the identifier of the parent {@link TemplateComponent}.
+	 * @return the created {@link TemplateComponent} as {@link Response}.
+	 */
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String tplRootId,
+			@PathParam(REQUESTPARAM_ID2) String parentTplCompId, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.create(V(sourceName), TemplateComponent.class,
+						L(requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME),
+								entityService.find(V(sourceName), TemplateComponent.class, V(parentTplCompId),
+										ServiceUtils.getContextTypeSupplier(contextTypeParam), SL(tplRootId)),
+								entityService.find(V(sourceName), CatalogComponent.class,
+										requestBody.getStringValueSupplier(ENTITYATTRIBUTE_CATALOGCOMPONENT_ID),
+										ServiceUtils.getContextTypeSupplier(contextTypeParam))))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the nested {@link TemplateComponent} with all parameters set in the
+	 * given JSON body of the request
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link TemplateComponent} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link TemplateComponent}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID3 + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String tplRootId,
+			@PathParam(REQUESTPARAM_ID2) String parentTplCompId, @PathParam(REQUESTPARAM_ID3) String id, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName),
+						entityService.find(V(sourceName), TemplateComponent.class, V(id),
+								ServiceUtils.getContextTypeSupplier(contextTypeParam), SL(tplRootId, parentTplCompId)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted nested {@link TemplateComponent}.
+	 * 
+	 * @param id The identifier of the {@link TemplateComponent} to delete.
+	 * @return the deleted {@link TemplateComponent }s as {@link Response}
+	 */
+	@DELETE
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID3 + "}")
+	public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String tplRootId,
+			@PathParam(REQUESTPARAM_ID2) String parentTplCompId, @PathParam(REQUESTPARAM_ID3) String id) {
+		return entityService
+				.delete(V(sourceName),
+						entityService.find(V(sourceName), TemplateComponent.class, V(id),
+								ServiceUtils.getContextTypeSupplier(contextTypeParam), SL(tplRootId, parentTplCompId)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the search attributes for the nested {@link TemplateComponent} type.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the {@link SearchAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildSearchAttributesResponse(V(sourceName), TemplateComponent.class, entityService);
+	}
+
+	/**
+	 * Returns a map of localization for the entity type and the attributes.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the I18N as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildLocalizationResponse(V(sourceName), TemplateComponent.class, entityService);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/PhysicalDimensionResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/PhysicalDimensionResource.java
new file mode 100755
index 0000000..9a97909
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/PhysicalDimensionResource.java
@@ -0,0 +1,177 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.L;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.PhysicalDimension;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+/**
+ * {@link PhysicalDimension} resource handling REST requests
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+@Tag(name = "PhysicalDimension")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/physicaldimensions")
+public class PhysicalDimensionResource {
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * Returns the found {@link PhysicalDimension}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         id of the {@link PhysicalDimension}
+	 * @return the found {@link PhysicalDimension} as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response find(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.find(V(sourceName), PhysicalDimension.class, V(id))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) {@link PhysicalDimension}s.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the {@link PhysicalDimension}
+	 *                   result
+	 * @return the (filtered) {@link PhysicalDimension}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response findAll(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@QueryParam("filter") String filter) {
+		return entityService.findAll(V(sourceName), PhysicalDimension.class, filter)
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link PhysicalDimension}.
+	 * 
+	 * @param body The {@link PhysicalDimension} to create.
+	 * @return the created {@link PhysicalDimension} as {@link Response}.
+	 */
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.create(V(sourceName), PhysicalDimension.class,
+						L(requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link PhysicalDimension} with all parameters set in the given
+	 * JSON body of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link PhysicalDimension} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link PhysicalDimension}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, @PathParam(REQUESTPARAM_ID) String id,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName), entityService.find(V(sourceName), PhysicalDimension.class, V(id)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link PhysicalDimension}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         The identifier of the {@link PhysicalDimension} to delete.
+	 * @return the deleted {@link PhysicalDimension }s as {@link Response}
+	 */
+	@DELETE
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.delete(V(sourceName), entityService.find(V(sourceName), PhysicalDimension.class, V(id)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the search attributes for the {@link PhysicalDimension} type.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the {@link SearchAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildSearchAttributesResponse(V(sourceName), PhysicalDimension.class, entityService);
+	}
+
+	/**
+	 * Returns a map of localization for the entity type and the attributes.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the I18N as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildLocalizationResponse(V(sourceName), PhysicalDimension.class, entityService);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/PoolResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/PoolResource.java
new file mode 100644
index 0000000..cce56ac
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/PoolResource.java
@@ -0,0 +1,241 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import java.util.Map;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.dflt.model.Pool;
+import org.eclipse.mdm.api.dflt.model.Project;
+import org.eclipse.mdm.api.dflt.model.ValueList;
+import org.eclipse.mdm.businessobjects.entity.I18NResponse;
+import org.eclipse.mdm.businessobjects.entity.MDMEntityResponse;
+import org.eclipse.mdm.businessobjects.entity.SearchAttributeResponse;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.vavr.collection.List;
+import io.vavr.control.Try;
+
+/**
+ * {@link Pool} resource
+ * 
+ * @author Matthias Koller, Peak Solution GmbH
+ *
+ */
+@Tag(name = "Pool")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/pools")
+public class PoolResource {
+
+	private static final Logger LOG = LoggerFactory.getLogger(PoolResource.class);
+
+	@EJB
+	private PoolService poolService;
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * delegates the request to the {@link PoolService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the {@link Pool} result
+	 * @return the result of the delegated request as {@link Response}
+	 */
+
+	@GET
+	@Operation(summary = "Find Pools by filter", description = "Get list of pools", responses = {
+			@ApiResponse(description = "The pools", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response getPools(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "Filter expression", required = false) @QueryParam("filter") String filter) {
+
+		return Try.of(() -> poolService.getPools(sourceName, filter)).map(List::ofAll)
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK, Pool.class))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link PoolService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the search attributes", description = "Get list of search attributes", responses = {
+			@ApiResponse(description = "The search attributes", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+
+		return Try.of(() -> poolService.getSearchAttributes(sourceName))
+				.map(attrs -> ServiceUtils.toResponse(new SearchAttributeResponse(attrs), Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link PoolService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         id of the {@link Pool}
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Find a Pool by ID", description = "Returns Pool based on ID", responses = {
+			@ApiResponse(description = "The project", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response findPool(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the Pool", required = true)  @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.find(V(sourceName), Pool.class, V(id))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link PoolService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the Pool localizations", description = "Returns Pool localizations", responses = {
+			@ApiResponse(description = "The project localizations", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+
+		try {
+			Map<Attribute, String> localizedAttributeMap = this.poolService.localizeAttributes(sourceName);
+			Map<EntityType, String> localizedEntityTypeMap = this.poolService.localizeType(sourceName);
+			return ServiceUtils.toResponse(new I18NResponse(localizedEntityTypeMap, localizedAttributeMap), Status.OK);
+
+		} catch (RuntimeException e) {
+			LOG.error("Cannot load localizations!", e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	/**
+	 * Returns the created {@link Pool}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param body       The {@link Pool} to create.
+	 * @return the created {@link Pool} as {@link Response}.
+	 */
+	@POST
+	@Operation(summary = "Create a new Pool",  responses = {
+			@ApiResponse(description = "The created Pool", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName, 
+			String body) {
+
+		return entityService
+				.create(V(sourceName), Pool.class,
+						entityService.extractRequestBody(body, sourceName, io.vavr.collection.List.of(Project.class)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link Pool} with all parameters set in the given JSON body of
+	 * the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link PoolValue} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link Pool}
+	 */
+	@PUT
+	@Operation(summary = "Update an existing Pool", description = "Updates the Pool with all parameters set in the given body of the request.", responses = {
+			@ApiResponse(description = "The updated Pool", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response update(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName, 
+			@Parameter(description = "ID of the Pool", required = true) @PathParam(REQUESTPARAM_ID) String id,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName), entityService.find(V(sourceName), Pool.class, V(id)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link Pool}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         The identifier of the {@link Pool} to delete.
+	 * @return the deleted {@link ValueList }s as {@link Response}
+	 */
+	@DELETE
+	@Operation(summary = "Delete an existing Pool", responses = {
+			@ApiResponse(description = "The deleted Pool", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response delete(
+			@Parameter(description = "Name of the MDM datasource", required = true)  @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the Pool", required = true)  @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.delete(V(sourceName), entityService.find(V(sourceName), Pool.class, V(id)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/PoolService.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/PoolService.java
new file mode 100644
index 0000000..5ffe9a8
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/PoolService.java
@@ -0,0 +1,159 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.Pool;
+import org.eclipse.mdm.businessobjects.control.I18NActivity;
+import org.eclipse.mdm.businessobjects.control.MDMEntityAccessException;
+import org.eclipse.mdm.businessobjects.control.NavigationActivity;
+import org.eclipse.mdm.businessobjects.control.SearchActivity;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+
+/**
+ * PoolService Bean implementation with available {@link Pool} operations
+ * 
+ * @author Matthias Koller, Peak Solution GmbH
+ *
+ */
+@Stateless
+public class PoolService {
+
+	@Inject
+	private ConnectorService connectorService;
+	@EJB
+	private I18NActivity i18nActivity;
+	@EJB
+	private SearchActivity searchActivity;
+	@EJB
+	private NavigationActivity navigationActivity;
+
+	/**
+	 * Default no-arg constructor for EJB
+	 */
+	public PoolService() {
+		// Default no-arg constructor for EJB
+	}
+
+	/**
+	 * Contructor for unit testing
+	 * 
+	 * @param connectorService   {@link ConnectorService} to use
+	 * @param searchActivity     {@link SearchActivity} to use
+	 * @param navigationActivity {@link NavigationActivity} to use
+	 * @param i18nActivity       {@link I18NActivity} to use
+	 */
+	PoolService(ConnectorService connectorService, SearchActivity searchActivity, NavigationActivity navigationActivity,
+			I18NActivity i18nActivity) {
+		this.connectorService = connectorService;
+		this.searchActivity = searchActivity;
+		this.navigationActivity = navigationActivity;
+		this.i18nActivity = i18nActivity;
+	}
+
+	/**
+	 * returns the matching {@link Pool}s using the given filter or all
+	 * {@link Pool}s if no filter is available
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the {@link Pool} result
+	 * @return the found {@link Pool}s
+	 */
+	public List<Pool> getPools(String sourceName, String filter) {
+
+		try {
+			ApplicationContext context = this.connectorService.getContextByName(sourceName);
+			EntityManager em = context.getEntityManager()
+					.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+
+			if (filter == null || filter.trim().length() <= 0) {
+				return em.loadAll(Pool.class);
+			}
+
+			if (ServiceUtils.isParentFilter(context, filter, Pool.PARENT_TYPE_PROJECT)) {
+				String id = ServiceUtils.extactIdFromParentFilter(context, filter, Pool.PARENT_TYPE_PROJECT);
+				return this.navigationActivity.getPools(sourceName, id);
+			}
+
+			return this.searchActivity.search(context, Pool.class, filter);
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * Returns the {@link SearchAttribute} for the entity type {@link Pool} in the
+	 * given data source.
+	 * 
+	 * @param sourceName The name of the data source.
+	 * @return the found {@link SearchAttribute}s
+	 */
+	public List<SearchAttribute> getSearchAttributes(String sourceName) {
+		return this.searchActivity.listAvailableAttributes(this.connectorService.getContextByName(sourceName),
+				Pool.class);
+	}
+
+	/**
+	 * returns a {@link Pool} identified by the given id.
+	 * 
+	 * @param poolId     id of the {@link Pool}
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param testStepId id of the {@link Pool}
+	 * @return the matching {@link Pool}
+	 */
+	public Pool getPool(String sourceName, String poolId) {
+		try {
+			EntityManager em = this.connectorService.getContextByName(sourceName).getEntityManager()
+					.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+			return em.load(Pool.class, poolId);
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * returns localized {@link Pool} attributes
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the localized {@link Pool} attributes
+	 */
+	public Map<Attribute, String> localizeAttributes(String sourceName) {
+		return this.i18nActivity.localizeAttributes(sourceName, Pool.class);
+	}
+
+	/**
+	 * returns the localized {@link Pool} type name
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the localized {@link Pool} type name
+	 */
+	public Map<EntityType, String> localizeType(String sourceName) {
+		return this.i18nActivity.localizeType(sourceName, Pool.class);
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ProjectDomainResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ProjectDomainResource.java
new file mode 100644
index 0000000..415fdaf
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ProjectDomainResource.java
@@ -0,0 +1,163 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.L;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.dflt.model.ProjectDomain;
+import org.eclipse.mdm.businessobjects.entity.MDMEntityResponse;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+/**
+ * {@link ProjectDomain} resource handling REST requests
+ * 
+ * @author Alexander Knoblauch, Peak Solution GmbH
+ *
+ */
+@Tag(name = "Status")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/projectdomains")
+public class ProjectDomainResource {
+
+	@EJB
+	private EntityService entityService;
+
+	@Parameter(description = "Name of the MDM datasource", required = true)
+	@PathParam(REQUESTPARAM_SOURCENAME)
+	private String sourceName;
+
+	/**
+	 * Returns the found {@link ProjectDomain}.
+	 * 
+	 * @param id id of the {@link ProjectDomain}
+	 * @return the found {@link ProjectDomain} as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Find a ProjectDomain by ID", description = "Returns ProjectDomain based on ID", responses = {
+			@ApiResponse(description = "The ProjectDomain", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response find(
+			@Parameter(description = "ID of the ProjectDomain", required = true) @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.find(V(sourceName), ProjectDomain.class, V(id))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) {@link ProjectDomain}s.
+	 * 
+	 * @param filter filter string to filter the {@link ProjectDomain} result
+	 * @return the (filtered) {@link ValueList}s as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Find ProjectDomain by filter", description = "Get list of ProjectDomains", responses = {
+			@ApiResponse(description = "The ProjectDomains", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	public Response findAll(@Parameter(description = "Filter expression", required = false) String filter) {
+		return entityService.findAll(V(sourceName), ProjectDomain.class, filter)
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link ProjectDomain}.
+	 * 
+	 * @param body The {@link ProjectDomain} to create.
+	 * @return the created {@link ProjectDomain} as {@link Response}.
+	 */
+	@POST
+	@Operation(summary = "Create a new ProjectDomain", responses = {
+			@ApiResponse(description = "The created ProjectDomain", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	public Response create(String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.create(V(sourceName), ProjectDomain.class, L(requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link ProjectDomain} with all parameters set in the given JSON
+	 * body of the request.
+	 * 
+	 * @param id   the identifier of the {@link ProjectDomain} to update.
+	 * @param body the body of the request containing the attributes to update
+	 * @return the updated {@link ProjectDomain}
+	 */
+	@PUT
+	@Operation(summary = "Update an existing ProjectDomain", description = "Updates the ProjectDomain with all parameters set in the body of the request.", responses = {
+			@ApiResponse(description = "The updated ProjectDomain", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response update(
+			@Parameter(description = "ID of the ProjectDomain", required = true) @PathParam(REQUESTPARAM_ID) String id,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName), entityService.find(V(sourceName), ProjectDomain.class, V(id)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link ProjectDomain}.
+	 * 
+	 * @param id The identifier of the {@link ProjectDomain} to delete.
+	 * @return the deleted {@link ProjectDomain }s as {@link Response}
+	 */
+	@DELETE
+	@Operation(summary = "Delete an existing ProjectDomain", responses = {
+			@ApiResponse(description = "The deleted ProjectDomain", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response delete(
+			@Parameter(description = "ID of the ProjectDomain", required = true) @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.delete(V(sourceName), entityService.find(V(sourceName), ProjectDomain.class, V(id)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ProjectResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ProjectResource.java
new file mode 100644
index 0000000..abc18a4
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ProjectResource.java
@@ -0,0 +1,240 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import java.util.Map;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.dflt.model.Project;
+import org.eclipse.mdm.api.dflt.model.ValueList;
+import org.eclipse.mdm.businessobjects.entity.I18NResponse;
+import org.eclipse.mdm.businessobjects.entity.MDMEntityResponse;
+import org.eclipse.mdm.businessobjects.entity.SearchAttributeResponse;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.vavr.collection.List;
+import io.vavr.control.Try;
+
+// TODO: Use entityService (and vavr) in all Methods
+
+/**
+ * {@link Project} resource
+ * 
+ * @author Matthias Koller, Peak Solution GmbH
+ *
+ */
+@Tag(name = "Project")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/projects")
+public class ProjectResource {
+
+	private static final Logger LOG = LoggerFactory.getLogger(ProjectResource.class);
+
+	@EJB
+	private ProjectService projectService;
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * delegates the request to the {@link ProjectService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the {@link Project} result
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Find Projects by filter", description = "Get list of Projects", responses = {
+			@ApiResponse(description = "The projects", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response getProjects(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "Filter expression", required = false) @QueryParam("filter") String filter) {
+
+		return Try.of(() -> projectService.getProjects(sourceName, filter)).map(List::ofAll)
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK, Project.class))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link ProjectService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the search attributes", description = "Get a list of search attributes", responses = {
+			@ApiResponse(description = "The search attributes", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+
+		return Try.of(() -> projectService.getSearchAttributes(sourceName))
+				.map(attrs -> ServiceUtils.toResponse(new SearchAttributeResponse(attrs), Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link ProjectService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param projectId  id of the {@link Project}
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	@Operation(summary = "Find a Project by ID", description = "Returns Project based on ID", responses = {
+			@ApiResponse(description = "The Project", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	public Response findProject(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the Project", required = true) @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.find(V(sourceName), Project.class, V(id))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link ProjectService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the Project localizations", description = "Returns Project localizations", responses = {
+			@ApiResponse(description = "The Project localizations", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		
+		try {
+			Map<Attribute, String> localizedAttributeMap = this.projectService.localizeAttributes(sourceName);
+			Map<EntityType, String> localizedEntityTypeMap = this.projectService.localizeType(sourceName);
+			return ServiceUtils.toResponse(new I18NResponse(localizedEntityTypeMap, localizedAttributeMap), Status.OK);
+
+		} catch (RuntimeException e) {
+			LOG.error("Cannot load localizations!", e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	/**
+	 * Returns the created {@link Project}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param body       The {@link Project} to create.
+	 * @return the created {@link Project} as {@link Response}.
+	 */
+	@POST
+	@Operation(summary = "Create a new Project",  responses = {
+			@ApiResponse(description = "The created Project", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			String body) {
+
+		return entityService.create(V(sourceName), Project.class, entityService.extractRequestBody(body, sourceName))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link Project} with all parameters set in the given JSON body of
+	 * the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link ProjectValue} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link Project}
+	 */
+	@PUT
+	@Operation(summary = "Update an existing Project", description = "Updates the Project with all parameters set in the body of the request.", responses = {
+			@ApiResponse(description = "The updated Project", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response update(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the Project", required = true) @PathParam(REQUESTPARAM_ID) String id,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName), entityService.find(V(sourceName), Project.class, V(id)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link Project}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         The identifier of the {@link Project} to delete.
+	 * @return the deleted {@link ValueList }s as {@link Response}
+	 */
+	@DELETE
+	@Operation(summary = "Delete an existing Project", responses = {
+			@ApiResponse(description = "The deleted Project", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response delete(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the Project", required = true) @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.delete(V(sourceName), entityService.find(V(sourceName), Project.class, V(id)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ProjectService.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ProjectService.java
new file mode 100644
index 0000000..c437014
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ProjectService.java
@@ -0,0 +1,147 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.Project;
+import org.eclipse.mdm.businessobjects.control.I18NActivity;
+import org.eclipse.mdm.businessobjects.control.MDMEntityAccessException;
+import org.eclipse.mdm.businessobjects.control.SearchActivity;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+
+/**
+ * ProjectService Bean implementation with available {@link Project} operations
+ * 
+ * @author Matthias Koller, Peak Solution GmbH
+ *
+ */
+@Stateless
+public class ProjectService {
+
+	@Inject
+	private ConnectorService connectorService;
+	@EJB
+	private I18NActivity i18nActivity;
+	@EJB
+	private SearchActivity searchActivity;
+
+	/**
+	 * Default no-arg constructor for EJB
+	 */
+	public ProjectService() {
+		// Default no-arg constructor for EJB
+	}
+
+	/**
+	 * Contructor for unit testing
+	 * 
+	 * @param connectorService {@link ConnectorService} to use
+	 * @param searchActivity   {@link SearchActivity} to use
+	 * @param i18nActivity     {@link I18NActivity} to use
+	 */
+	ProjectService(ConnectorService connectorService, SearchActivity searchActivity, I18NActivity i18nActivity) {
+		this.connectorService = connectorService;
+		this.searchActivity = searchActivity;
+		this.i18nActivity = i18nActivity;
+	}
+
+	/**
+	 * returns the matching {@link Project}s using the given filter or all
+	 * {@link Project}s if no filter is available
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the {@link Project} result
+	 * @return the found {@link Project}s
+	 */
+	public List<Project> getProjects(String sourceName, String filter) {
+
+		try {
+			ApplicationContext context = this.connectorService.getContextByName(sourceName);
+			EntityManager em = context.getEntityManager()
+					.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+
+			if (filter == null || filter.trim().length() <= 0) {
+				return em.loadAll(Project.class);
+			}
+
+			return this.searchActivity.search(context, Project.class, filter);
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * Returns the {@link SearchAttribute} for the entity type {@link Project} in
+	 * the given data source.
+	 * 
+	 * @param sourceName The name of the data source.
+	 * @return the found {@link SearchAttribute}s
+	 */
+	public List<SearchAttribute> getSearchAttributes(String sourceName) {
+		return this.searchActivity.listAvailableAttributes(this.connectorService.getContextByName(sourceName),
+				Project.class);
+	}
+
+	/**
+	 * returns a {@link Project} identified by the given id.
+	 * 
+	 * @param projectId  id of the {@link Project}
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param testStepId id of the {@link Project}
+	 * @return the matching {@link Project}
+	 */
+	public Project getProject(String sourceName, String projectId) {
+		try {
+			EntityManager em = this.connectorService.getContextByName(sourceName).getEntityManager()
+					.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+			return em.load(Project.class, projectId);
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * returns localized {@link Project} attributes
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the localized {@link Project} attributes
+	 */
+	public Map<Attribute, String> localizeAttributes(String sourceName) {
+		return this.i18nActivity.localizeAttributes(sourceName, Project.class);
+	}
+
+	/**
+	 * returns the localized {@link Project} type name
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the localized {@link Project} type name
+	 */
+	public Map<EntityType, String> localizeType(String sourceName) {
+		return this.i18nActivity.localizeType(sourceName, Project.class);
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/QuantityResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/QuantityResource.java
new file mode 100644
index 0000000..07f0bb0
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/QuantityResource.java
@@ -0,0 +1,184 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_UNIT_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_CONTEXTTYPE;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.L;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Quantity;
+import org.eclipse.mdm.api.base.model.Unit;
+import org.eclipse.mdm.api.dflt.model.ValueListValue;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+/**
+ * {@link Quantity} resource handling REST requests
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+@Tag(name = "Quantity")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/quantities")
+public class QuantityResource {
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * Returns the found {@link Quantity}. {@link WebApplicationException} on error.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         id of the {@link Quantity}
+	 * @return the found {@link Quantity} as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response find(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.find(V(sourceName), Quantity.class, V(id))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) {@link Quantity}s.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the {@link Quantity} result
+	 * @return the (filtered) {@link Quantity}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response findAll(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@QueryParam("filter") String filter) {
+		return entityService.findAll(V(sourceName), Quantity.class, filter)
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link Unit}.
+	 * 
+	 * @param body The {@link Unit} to create.
+	 * @return the created {@link Unit} as {@link Response}.
+	 */
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.create(V(sourceName), Quantity.class,
+						L(requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME),
+								entityService.find(V(sourceName), Unit.class,
+										requestBody.getStringValueSupplier(ENTITYATTRIBUTE_UNIT_ID))))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link Quantity} with all parameters set in the given JSON body
+	 * of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link Quantity} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link ValueListValue}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, @PathParam(REQUESTPARAM_ID) String id,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName), entityService.find(V(sourceName), Quantity.class, V(id)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link Quantity}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         The identifier of the {@link Quantity} to delete.
+	 * @return the deleted {@link Quantity }s as {@link Response}
+	 */
+	@DELETE
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.delete(V(sourceName), entityService.find(V(sourceName), Quantity.class, V(id)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the search attributes for the {@link Quantity} type.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the {@link SearchAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildSearchAttributesResponse(V(sourceName), Quantity.class, entityService);
+	}
+
+	/**
+	 * Returns a map of localization for the entity type and the attributes.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the I18N as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildLocalizationResponse(V(sourceName), Quantity.class, entityService);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ResourceConstants.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ResourceConstants.java
new file mode 100644
index 0000000..2aee5ba
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ResourceConstants.java
@@ -0,0 +1,179 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.FileLink;
+import org.eclipse.mdm.api.base.model.Quantity;
+import org.eclipse.mdm.api.base.model.Unit;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.api.dflt.model.CatalogComponent;
+import org.eclipse.mdm.api.dflt.model.CatalogSensor;
+import org.eclipse.mdm.api.dflt.model.TemplateAttribute;
+import org.eclipse.mdm.api.dflt.model.TemplateComponent;
+import org.eclipse.mdm.api.dflt.model.TemplateRoot;
+import org.eclipse.mdm.api.dflt.model.TemplateSensor;
+import org.eclipse.mdm.api.dflt.model.TemplateTestStep;
+import org.eclipse.mdm.api.dflt.model.TemplateTestStepUsage;
+
+/**
+ * Class defining constants used by the specific Jersey resource classes.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+public final class ResourceConstants {
+	public static final String MEDIATYPE_APPLICATION_PROTOBUF = "application/protobuf";
+
+	/**
+	 * Parameter name holding the {@link Environment}, i.e. the source name
+	 */
+	public static final String REQUESTPARAM_SOURCENAME = "SOURCENAME";
+
+	/**
+	 * Parameter holding the {@link Entity}s id in the URI path
+	 */
+	public static final String REQUESTPARAM_ID = "ID";
+
+	/**
+	 * Parameter holding an additional {@link Entity}s id in the URI path, e.g. for
+	 * a {@link TemplateComponent} when {@link REQUESTPARAM_ID} holds the id of the
+	 * {@link TemplateRoot}.
+	 */
+	public static final String REQUESTPARAM_ID2 = "ID2";
+
+	/**
+	 * Parameter holding an additional {@link Entity}s id in the URI path, e.g. for
+	 * a {@link TemplateAttribute} when {@link REQUESTPARAM_ID} holds the id of the
+	 * {@link TemplateRoot} and {@link REQUESTPARAM_ID2} holds the id of the
+	 * {@link TemplateComponent}.
+	 */
+	public static final String REQUESTPARAM_ID3 = "ID3";
+
+	/**
+	 * Parameter holding an additional {@link Entity}s id in the URI path, e.g. for
+	 * a {@link TemplateAttribute} when {@link REQUESTPARAM_ID} holds the id of the
+	 * {@link TemplateRoot}, {@link REQUESTPARAM_ID2} holds the id of the parent
+	 * {@link TemplateComponent} and {@link REQUESTPARAM_ID3} holds the id of the
+	 * nested {@link TemplateComponent}.
+	 */
+	public static final String REQUESTPARAM_ID4 = "ID4";
+
+	/**
+	 * Parameter holding the name of the context attribute in the URI path
+	 */
+	public static final String REQUESTPARAM_ATTRIBUTENAME = "ATTRIBUTENAME";
+
+	/**
+	 * Parameter holding the name of the context attribute in the URI path
+	 */
+	public static final String REQUESTPARAM_CONTEXTCOMPONENTNAME = "CONTEXTCOMPONENTNAME";
+
+	/**
+	 * Parameter holding the {@link ContextType} of the {@link Entity} in the URI
+	 * path
+	 */
+	public static final String REQUESTPARAM_CONTEXTTYPE = "CONTEXTTYPE";
+
+	/**
+	 * Parameter holding the {@code remotePath} of the {@link FileLink} in the URI
+	 * path
+	 */
+	public static final String REQUESTPARAM_REMOTEPATH = "REMOTEPATH";
+
+	/**
+	 * Parameter holding the {@code mimeType} of the {@link FileLink} in the URI
+	 * path
+	 */
+	public static final String REQUESTPARAM_MIMETYPE = "MIMETYPE";
+
+	/**
+	 * Parameter holding the {@code size} of the {@code file} in the URI path
+	 */
+	public static final String REQUESTPARAM_SIZE = "SIZE";
+
+	/**
+	 * Parameter holding the {@code size} of the {@code file} in the URI path
+	 */
+	public static final String REQUESTPARAM_SOURCETYPE = "SOURCETYPE";
+
+	/**
+	 * Parameter holding the {@code description} of the {@link FileLink} in the URI
+	 * path
+	 */
+	public static final String REQUESTPARAM_DESCRIPTION = "DESCRIPTION";
+
+	/**
+	 * Parameter holding the name of the {@link Entity} in the request body
+	 */
+	public static final String ENTITYATTRIBUTE_NAME = "Name";
+
+	/**
+	 * Parameter holding the number of values of the {@link ChannelGroup} in the
+	 * request body
+	 */
+	public static final String ENTITYATTRIBUTE_NUMBER_OF_VALUES = "NumberOfValues";
+
+	/**
+	 * Parameter holding the {@link ValueType} of the {@link Entity} in the request
+	 * body
+	 */
+	public static final String ENTITYATTRIBUTE_DATATYPE = "DataType";
+
+	/**
+	 * Parameter holding the id of the {@link CatalogComponent} of e.g. the
+	 * {@link TemplateComponent} in the request body
+	 */
+	public static final String ENTITYATTRIBUTE_CATALOGCOMPONENT_ID = "CatalogComponent";
+
+	/**
+	 * Parameter holding the id of the {@link CatalogSensor} of e.g. the
+	 * {@link TemplateSensor} in the request body
+	 */
+	public static final String ENTITYATTRIBUTE_CATALOGSENSOR_ID = "CatalogSensor";
+
+	/**
+	 * Parameter holding the id of the {@link Quantity} of e.g. the {@link Unit} in
+	 * the request body
+	 */
+	public static final String ENTITYATTRIBUTE_QUANTITY_ID = "Quantity";
+
+	/**
+	 * Parameter holding the id of the {@link Unit} of e.g. the {@link Quantity} in
+	 * the request body
+	 */
+	public static final String ENTITYATTRIBUTE_UNIT_ID = "Unit";
+
+	/**
+	 * Parameter holding the id of the {@link Unit} of e.g. the {@link Quantity} in
+	 * the request body
+	 */
+	public static final String ENTITYATTRIBUTE_PHYSICALDIMENSION_ID = "PhysicalDimension";
+
+	/**
+	 * Parameter holding the id of the {@link TemplateTestStep} of e.g. the
+	 * {@link TemplateTestStepUsage} in the request body
+	 */
+	public static final String ENTITYATTRIBUTE_TEMPLATETESTSTEP_ID = "TemplateTestStep";
+
+	/**
+	 * Just hide the default constructor
+	 */
+	private ResourceConstants() {
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/StatusResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/StatusResource.java
new file mode 100644
index 0000000..3d940b4
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/StatusResource.java
@@ -0,0 +1,175 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.L;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.businessobjects.entity.MDMEntityResponse;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+/**
+ * {@link org.eclipse.mdm.api.dflt.model.Status} resource handling REST requests
+ * 
+ * @author Alexander Knoblauch, Peak Solution GmbH
+ *
+ */
+@Tag(name = "Status")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/status")
+public class StatusResource {
+
+	@EJB
+	private EntityService entityService;
+
+	@Parameter(description = "Name of the MDM datasource", required = true)
+	@PathParam(REQUESTPARAM_SOURCENAME)
+	private String sourceName;
+
+	/**
+	 * Returns the found {@link org.eclipse.mdm.api.dflt.model.Status}.
+	 * 
+	 * @param id id of the {@link org.eclipse.mdm.api.dflt.model.Status}
+	 * @return the found {@link org.eclipse.mdm.api.dflt.model.Status} as
+	 *         {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Find a Status by ID", description = "Returns Status based on ID", responses = {
+			@ApiResponse(description = "The Status", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response find(
+			@Parameter(description = "ID of the ProjectDomain", required = true) @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.find(V(sourceName), org.eclipse.mdm.api.dflt.model.Status.class, V(id))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) {@link org.eclipse.mdm.api.dflt.model.Status}s.
+	 * 
+	 * @param filter filter string to filter the
+	 *               {@link org.eclipse.mdm.api.dflt.model.Status} result
+	 * @return the (filtered) {@link ValueList}s as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Find Status by filter", description = "Get list of Status", responses = {
+			@ApiResponse(description = "The Status", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	public Response findAll(
+			@Parameter(description = "Filter expression", required = false) @QueryParam("filter") String filter) {
+		return entityService.findAll(V(sourceName), org.eclipse.mdm.api.dflt.model.Status.class, filter)
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link org.eclipse.mdm.api.dflt.model.Status}.
+	 * 
+	 * @param body The {@link org.eclipse.mdm.api.dflt.model.Status} to create.
+	 * @return the created {@link org.eclipse.mdm.api.dflt.model.Status} as
+	 *         {@link Response}.
+	 */
+	@POST
+	@Operation(summary = "Create a new Status", responses = {
+			@ApiResponse(description = "The created Status", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	public Response create(String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.create(V(sourceName), org.eclipse.mdm.api.dflt.model.Status.class,
+						L(requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link org.eclipse.mdm.api.dflt.model.Status} with all parameters
+	 * set in the given JSON body of the request.
+	 * 
+	 * @param id   the identifier of the
+	 *             {@link org.eclipse.mdm.api.dflt.model.Status} to update.
+	 * @param body the body of the request containing the attributes to update
+	 * @return the updated {@link org.eclipse.mdm.api.dflt.model.Status}
+	 */
+	@PUT
+	@Operation(summary = "Update an existing Status", description = "Updates the Status with all parameters set in the body of the request.", responses = {
+			@ApiResponse(description = "The updated Status", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response update(
+			@Parameter(description = "ID of the Status", required = true) @PathParam(REQUESTPARAM_ID) String id,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName),
+						entityService.find(V(sourceName), org.eclipse.mdm.api.dflt.model.Status.class, V(id)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted
+	 * {@link org.eclipse.mdm.api.dflt.model.Status}.
+	 * 
+	 * @param id The identifier of the {@link org.eclipse.mdm.api.dflt.model.Status}
+	 *           to delete.
+	 * @return the deleted {@link org.eclipse.mdm.api.dflt.model.Status }s as
+	 *         {@link Response}
+	 */
+	@DELETE
+	@Operation(summary = "Delete an existing Status", responses = {
+			@ApiResponse(description = "The deleted Status", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response delete(
+			@Parameter(description = "ID of the Status", required = true) @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService
+				.delete(V(sourceName),
+						entityService.find(V(sourceName), org.eclipse.mdm.api.dflt.model.Status.class, V(id)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateAttributeResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateAttributeResource.java
new file mode 100644
index 0000000..aaa5507
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateAttributeResource.java
@@ -0,0 +1,207 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_CONTEXTTYPE;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID2;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID3;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.L;
+import static org.eclipse.mdm.businessobjects.service.EntityService.SL;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.dflt.model.TemplateAttribute;
+import org.eclipse.mdm.api.dflt.model.TemplateComponent;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.vavr.collection.List;
+
+/**
+ * {@link TemplateAttribute} resource handling REST requests
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+@Tag(name = "Template")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/tplroots/{" + REQUESTPARAM_CONTEXTTYPE + "}/{" + REQUESTPARAM_ID
+		+ "}/tplcomps/{" + REQUESTPARAM_ID2 + "}/tplattrs")
+public class TemplateAttributeResource {
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * Returns the found {@link TemplateAttribute}.
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param contextType {@link ContextType} of the {@link TemplateAttribute} to
+	 *                    load
+	 * @param id          id of the {@link TemplateAttribute}
+	 * @return the found {@link TemplateAttribute} as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID3 + "}")
+	public Response find(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String tplRootId,
+			@PathParam(REQUESTPARAM_ID2) String tplCompId, @PathParam(REQUESTPARAM_ID3) String id) {
+		return entityService
+				.find(V(sourceName), TemplateAttribute.class, V(id),
+						ServiceUtils.getContextTypeSupplier(contextTypeParam), SL(tplRootId, tplCompId))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) {@link TemplateAttribute}s.
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param contextType {@link ContextType} of the {@link TemplateAttribute} to
+	 *                    load
+	 * @param filter      filter string to filter the {@link TemplateAttribute}
+	 *                    result
+	 * @return the (filtered) {@link TemplateAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response findAll(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String tplRootId,
+			@PathParam(REQUESTPARAM_ID2) String tplCompId, @QueryParam("filter") String filter) {
+		return entityService
+				.find(V(sourceName), TemplateComponent.class, V(tplCompId),
+						ServiceUtils.getContextTypeSupplier(contextTypeParam), SL(tplRootId))
+				.map(tplComp -> List.ofAll(tplComp.getTemplateAttributes()))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link TemplateAttributeValue}.
+	 * 
+	 * @param body The {@link TemplateAttribute} to create.
+	 * @return the created {@link TemplateAttribute} as {@link Response}.
+	 */
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String tplRootId,
+			@PathParam(REQUESTPARAM_ID2) String tplCompId, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.create(V(sourceName), TemplateAttribute.class,
+						L(requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME),
+								entityService.find(V(sourceName), TemplateComponent.class, V(tplCompId),
+										ServiceUtils.getContextTypeSupplier(contextTypeParam), SL(tplRootId))))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link TemplateAttribute} with all parameters set in the given
+	 * JSON body of the request
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link TemplateAttribute} to delete.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link TemplateAttribute}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID3 + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String tplRootId,
+			@PathParam(REQUESTPARAM_ID2) String tplCompId, @PathParam(REQUESTPARAM_ID3) String id, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName),
+						entityService.find(V(sourceName), TemplateAttribute.class, V(id),
+								ServiceUtils.getContextTypeSupplier(contextTypeParam), SL(tplRootId, tplCompId)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link TemplateAttribute}.
+	 * 
+	 * @param id The identifier of the {@link TemplateAttribute} to delete.
+	 * @return the deleted {@link TemplateAttribute }s as {@link Response}
+	 */
+	@DELETE
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID3 + "}")
+	public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String tplRootId,
+			@PathParam(REQUESTPARAM_ID2) String tplCompId, @PathParam(REQUESTPARAM_ID3) String id) {
+		return entityService
+				.delete(V(sourceName),
+						entityService.find(V(sourceName), TemplateAttribute.class, V(id),
+								ServiceUtils.getContextTypeSupplier(contextTypeParam), SL(tplRootId, tplCompId)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the search attributes for the {@link TemplateAttribute} type.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the {@link SearchAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildSearchAttributesResponse(V(sourceName), TemplateAttribute.class, entityService);
+	}
+
+	/**
+	 * Returns a map of localization for the entity type and the attributes.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the I18N as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildLocalizationResponse(V(sourceName), TemplateAttribute.class, entityService);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateComponentResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateComponentResource.java
new file mode 100644
index 0000000..5458b2f
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateComponentResource.java
@@ -0,0 +1,211 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_CATALOGCOMPONENT_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_CONTEXTTYPE;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID2;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.L;
+import static org.eclipse.mdm.businessobjects.service.EntityService.SL;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.dflt.model.CatalogComponent;
+import org.eclipse.mdm.api.dflt.model.TemplateComponent;
+import org.eclipse.mdm.api.dflt.model.TemplateRoot;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.vavr.collection.List;
+
+/**
+ * {@link TemplateComponent} resource handling REST requests
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+@Tag(name = "Template")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/tplroots/{" + REQUESTPARAM_CONTEXTTYPE + "}/{" + REQUESTPARAM_ID
+		+ "}/tplcomps")
+public class TemplateComponentResource {
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * Returns the found {@link TemplateComponent}.
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param contextType {@link ContextType} of the {@link TemplateComponent} to
+	 *                    load
+	 * @param id          id of the {@link TemplateComponent}
+	 * @return the found {@link TemplateComponent} as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID2 + "}")
+	public Response find(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String tplRootId,
+			@PathParam(REQUESTPARAM_ID2) String id) {
+		return entityService
+				.find(V(sourceName), TemplateComponent.class, V(id),
+						ServiceUtils.getContextTypeSupplier(contextTypeParam), SL(tplRootId))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) {@link TemplateComponent}s.
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param contextType {@link ContextType} of the {@link TemplateComponent} to
+	 *                    load
+	 * @param filter      filter string to filter the {@link TemplateComponent}
+	 *                    result
+	 * @return the (filtered) {@link TemplateComponent}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response findAll(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String tplRootId,
+			@QueryParam("filter") String filter) {
+		return entityService
+				.find(V(sourceName), TemplateRoot.class, V(tplRootId),
+						ServiceUtils.getContextTypeSupplier(contextTypeParam))
+				.map(tplRoot -> List.ofAll(tplRoot.getTemplateComponents()))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link TemplateComponentValue}.
+	 * 
+	 * @param body The {@link TemplateComponent} to create.
+	 * @return the created {@link TemplateComponent} as {@link Response}.
+	 */
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String tplRootId,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.create(V(sourceName), TemplateComponent.class,
+						L(requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME),
+								entityService.find(V(sourceName), TemplateRoot.class, V(tplRootId),
+										ServiceUtils.getContextTypeSupplier(contextTypeParam)),
+								entityService.find(V(sourceName), CatalogComponent.class,
+										requestBody.getStringValueSupplier(ENTITYATTRIBUTE_CATALOGCOMPONENT_ID),
+										ServiceUtils.getContextTypeSupplier(contextTypeParam))))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link TemplateComponent} with all parameters set in the given
+	 * JSON body of the request
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link TemplateComponent} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link TemplateComponent}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID2 + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String tplRootId,
+			@PathParam(REQUESTPARAM_ID2) String id, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName),
+						entityService.find(V(sourceName), TemplateComponent.class, V(id),
+								ServiceUtils.getContextTypeSupplier(contextTypeParam), SL(tplRootId)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link TemplateComponent}.
+	 * 
+	 * @param id The identifier of the {@link TemplateComponent} to delete.
+	 * @return the deleted {@link TemplateComponent }s as {@link Response}
+	 */
+	@DELETE
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID2 + "}")
+	public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String tplRootId,
+			@PathParam(REQUESTPARAM_ID2) String id) {
+		return entityService
+				.delete(V(sourceName),
+						entityService.find(V(sourceName), TemplateComponent.class, V(id),
+								ServiceUtils.getContextTypeSupplier(contextTypeParam), SL(tplRootId)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the search attributes for the {@link TemplateComponent} type.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the {@link SearchAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildSearchAttributesResponse(V(sourceName), TemplateComponent.class, entityService);
+	}
+
+	/**
+	 * Returns a map of localization for the entity type and the attributes.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the I18N as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildLocalizationResponse(V(sourceName), TemplateComponent.class, entityService);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateRootResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateRootResource.java
new file mode 100644
index 0000000..9952587
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateRootResource.java
@@ -0,0 +1,194 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_CONTEXTTYPE;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.L;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.dflt.model.TemplateRoot;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+/**
+ * {@link TemplateRoot} resource handling REST requests
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+@Tag(name = "Template")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/tplroots/{" + REQUESTPARAM_CONTEXTTYPE + "}")
+public class TemplateRootResource {
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * Returns the found {@link TemplateRoot}.
+	 * 
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param contextType {@link ContextType} of the {@link TemplateRoot} to load
+	 * @param id          id of the {@link TemplateRoot}
+	 * @return the found {@link TemplateRoot} as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response find(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService
+				.find(V(sourceName), TemplateRoot.class, V(id), ServiceUtils.getContextTypeSupplier(contextTypeParam))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) {@link TemplateRoot}s.
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param contextType {@link ContextType} of the {@link TemplateRoot} to load
+	 * @param filter      filter string to filter the {@link TemplateRoot} result
+	 * @return the (filtered) {@link TemplateRoot}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response findAll(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @QueryParam("filter") String filter) {
+		return entityService
+				.findAll(V(sourceName), TemplateRoot.class, filter,
+						ServiceUtils.getContextTypeSupplier(contextTypeParam))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link TemplateRootValue}.
+	 * 
+	 * @param body The {@link TemplateRoot} to create.
+	 * @return the created {@link TemplateRoot} as {@link Response}.
+	 */
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.create(V(sourceName), TemplateRoot.class,
+						L(ServiceUtils.getContextTypeSupplier(contextTypeParam),
+								requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link TemplateRoot} with all parameters set in the given JSON
+	 * body of the request
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link TemplateRoot} to delete.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link TemplateRoot}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String id,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName),
+						entityService.find(V(sourceName), TemplateRoot.class, V(id),
+								ServiceUtils.getContextTypeSupplier(contextTypeParam)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link TemplateRoot}.
+	 * 
+	 * @param id The identifier of the {@link TemplateRoot} to delete.
+	 * @return the deleted {@link TemplateRoot }s as {@link Response}
+	 */
+	@DELETE
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService
+				.delete(V(sourceName),
+						entityService.find(V(sourceName), TemplateRoot.class, V(id),
+								ServiceUtils.getContextTypeSupplier(contextTypeParam)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the search attributes for the {@link TemplateRoot} type.
+	 * 
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the {@link SearchAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildSearchAttributesResponse(V(sourceName), TemplateRoot.class, entityService);
+	}
+
+	/**
+	 * Returns a map of localization for the entity type and the attributes.
+	 * 
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the I18N as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildLocalizationResponse(V(sourceName), TemplateRoot.class, entityService);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateSensorAttributeResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateSensorAttributeResource.java
new file mode 100644
index 0000000..70593fa
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateSensorAttributeResource.java
@@ -0,0 +1,177 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID2;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID3;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID4;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.SL;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.dflt.model.TemplateAttribute;
+import org.eclipse.mdm.api.dflt.model.TemplateComponent;
+import org.eclipse.mdm.api.dflt.model.TemplateRoot;
+import org.eclipse.mdm.api.dflt.model.TemplateSensor;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.vavr.collection.List;
+
+/**
+ * {@link TemplateAttribute} resource handling REST requests
+ * 
+ * @author Philipp Schweinbenz, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+@Tag(name = "Template")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/tplroots/testequipment/{" + REQUESTPARAM_ID + "}/tplcomps/{"
+		+ REQUESTPARAM_ID2 + "}/tplsensors/{" + REQUESTPARAM_ID3 + "}/tplsensorattrs")
+public class TemplateSensorAttributeResource {
+
+	@EJB
+	private EntityService entityService;
+
+	/*
+	 * Create not implemented as TemplateSensorAttributes are created implicitly
+	 * with the TemplateSensor
+	 */
+
+	/**
+	 * Returns the found {@link TemplateAttribute}.
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param tplRootId   id of the {@link TemplateRoot}
+	 * @param tplCompId   id of the {@link TemplateComponent}
+	 * @param tplSensorId id of the {@link TemplateSensor}
+	 * @param id          id of the {@link TemplateAttribute}
+	 * @return the found {@link TemplateAttribute} as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID4 + "}")
+	public Response find(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String tplRootId, @PathParam(REQUESTPARAM_ID2) String tplCompId,
+			@PathParam(REQUESTPARAM_ID3) String tplSensorId, @PathParam(REQUESTPARAM_ID4) String id) {
+		return entityService
+				.find(V(sourceName), TemplateAttribute.class, V(id), V(ContextType.TESTEQUIPMENT),
+						SL(tplRootId, tplCompId, tplSensorId))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) {@link TemplateAttribute}s.
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param tplRootId   id of the {@link TemplateRoot}
+	 * @param tplCompId   id of the {@link TemplateComponent}
+	 * @param tplSensorId id of the {@link TemplateSensor}
+	 * @param filter      filter string to filter the {@link TemplateAttribute}
+	 *                    result
+	 * @return the (filtered) {@link TemplateAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response findAll(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String tplRootId, @PathParam(REQUESTPARAM_ID2) String tplCompId,
+			@PathParam(REQUESTPARAM_ID3) String tplSensorId, @QueryParam("filter") String filter) {
+		return entityService
+				.find(V(sourceName), TemplateSensor.class, V(tplSensorId), V(ContextType.TESTEQUIPMENT),
+						SL(tplRootId, tplCompId))
+				.map(tplSensor -> List.ofAll(tplSensor.getTemplateAttributes()))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link TemplateAttribute} with all parameters set in the given
+	 * JSON body of the request
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param tplRootId   id of the {@link TemplateRoot}
+	 * @param tplCompId   id of the {@link TemplateComponent}
+	 * @param tplSensorId id of the {@link TemplateSensor}
+	 * @param id          the identifier of the {@link TemplateAttribute} to delete.
+	 * @param body        the body of the request containing the attributes to
+	 *                    update
+	 * @return the updated {@link TemplateAttribute}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID4 + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String tplRootId, @PathParam(REQUESTPARAM_ID2) String tplCompId,
+			@PathParam(REQUESTPARAM_ID3) String tplSensorId, @PathParam(REQUESTPARAM_ID4) String id, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName),
+						entityService.find(V(sourceName), TemplateAttribute.class, V(id), V(ContextType.TESTEQUIPMENT),
+								SL(tplRootId, tplCompId, tplSensorId)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/*
+	 * Delete not implemented as TemplateSensorAttributes can't be deleted
+	 */
+
+	/**
+	 * Returns the search attributes for the {@link TemplateAttribute} type.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the {@link SearchAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildSearchAttributesResponse(V(sourceName), TemplateAttribute.class, entityService);
+	}
+
+	/**
+	 * Returns a map of localization for the entity type and the attributes.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the I18N as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildLocalizationResponse(V(sourceName), TemplateAttribute.class, entityService);
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateSensorResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateSensorResource.java
new file mode 100755
index 0000000..6dbf74d
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateSensorResource.java
@@ -0,0 +1,214 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_CATALOGSENSOR_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_QUANTITY_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID2;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID3;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.L;
+import static org.eclipse.mdm.businessobjects.service.EntityService.SL;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Quantity;
+import org.eclipse.mdm.api.dflt.model.CatalogSensor;
+import org.eclipse.mdm.api.dflt.model.TemplateComponent;
+import org.eclipse.mdm.api.dflt.model.TemplateSensor;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.vavr.Lazy;
+import io.vavr.collection.List;
+
+/**
+ * {@link TemplateSensor} resource handling REST requests
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+@Tag(name = "Template")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/tplroots/testequipment/{" + REQUESTPARAM_ID + "}/tplcomps/{"
+		+ REQUESTPARAM_ID2 + "}/tplsensors")
+public class TemplateSensorResource {
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * Returns the found {@link TemplateSensor}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         id of the {@link TemplateSensor}
+	 * @return the found {@link TemplateSensor} as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID3 + "}")
+	public Response find(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String tplRootId, @PathParam(REQUESTPARAM_ID2) String tplCompId,
+			@PathParam(REQUESTPARAM_ID3) String id) {
+		return entityService
+				.find(V(sourceName), TemplateSensor.class, V(id), V(ContextType.TESTEQUIPMENT),
+						SL(tplRootId, tplCompId))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) {@link TemplateSensor}s.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the {@link TemplateSensor} result
+	 * @return the (filtered) {@link TemplateSensor}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response findAll(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String tplRootId, @PathParam(REQUESTPARAM_ID2) String tplCompId,
+			@QueryParam("filter") String filter) {
+		return entityService
+				.find(V(sourceName), TemplateComponent.class, V(tplCompId), V(ContextType.TESTEQUIPMENT), SL(tplRootId))
+				.map(tplComp -> List.ofAll(tplComp.getTemplateSensors()))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link TemplateSensorValue}.
+	 * 
+	 * @param body The {@link TemplateSensor} to create.
+	 * @return the created {@link TemplateSensor} as {@link Response}.
+	 */
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String tplRootId, @PathParam(REQUESTPARAM_ID2) String tplCompId, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		// TODO anehmer on 2017-11-25: test that tplComp is only once fetched
+		// get memoized (Lazy) tplComp as it is used twiced and should only fetched once
+		Lazy<TemplateComponent> tplCompSupplier = Lazy.of(() -> entityService
+				.find(V(sourceName), TemplateComponent.class, V(tplCompId), V(ContextType.TESTEQUIPMENT), SL(tplRootId))
+				.get());
+
+		return entityService
+				.create(V(sourceName), TemplateSensor.class,
+						L(requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME), tplCompSupplier,
+								entityService.find(V(sourceName), CatalogSensor.class,
+										requestBody.getStringValueSupplier(ENTITYATTRIBUTE_CATALOGSENSOR_ID),
+										V(ContextType.TESTEQUIPMENT),
+										SL(tplCompSupplier.map(tplComp -> tplComp.getCatalogComponent().getID()))),
+								entityService.find(V(sourceName), Quantity.class,
+										requestBody.getStringValueSupplier(ENTITYATTRIBUTE_QUANTITY_ID))))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link TemplateSensor} with all parameters set in the given JSON
+	 * body of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link TemplateSensor} to delete.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link TemplateSensor}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID3 + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String tplRootId, @PathParam(REQUESTPARAM_ID2) String tplCompId,
+			@PathParam(REQUESTPARAM_ID3) String id, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName),
+						entityService.find(V(sourceName), TemplateSensor.class, V(id), V(ContextType.TESTEQUIPMENT),
+								SL(tplRootId, tplCompId)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link TemplateSensor}.
+	 * 
+	 * @param id The identifier of the {@link TemplateSensor} to delete.
+	 * @return the deleted {@link TemplateSensor }s as {@link Response}
+	 */
+	@DELETE
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID3 + "}")
+	public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String tplRootId, @PathParam(REQUESTPARAM_ID2) String tplCompId,
+			@PathParam(REQUESTPARAM_ID3) String id) {
+		return entityService
+				.delete(V(sourceName),
+						entityService.find(V(sourceName), TemplateSensor.class, V(id), V(ContextType.TESTEQUIPMENT),
+								SL(tplRootId, tplCompId)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the search attributes for the {@link TemplateSensor} type.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the {@link SearchAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildSearchAttributesResponse(V(sourceName), TemplateSensor.class, entityService);
+	}
+
+	/**
+	 * Returns a map of localization for the entity type and the attributes.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the I18N as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildLocalizationResponse(V(sourceName), TemplateSensor.class, entityService);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateTestResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateTestResource.java
new file mode 100644
index 0000000..8a7d459
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateTestResource.java
@@ -0,0 +1,174 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.L;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.dflt.model.TemplateTest;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+/**
+ * {@link TemplateTest} resource handling REST requests
+ * 
+ * @author Gunnar Schmidt, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+@Tag(name = "Template")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/tpltests")
+public class TemplateTestResource {
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * Returns the found {@link TemplateTest}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         id of the {@link TemplateTest}
+	 * @return the found {@link TemplateTest} as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response find(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.find(V(sourceName), TemplateTest.class, V(id))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) {@link TemplateTest}s.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the {@link TemplateTest} result
+	 * @return the (filtered) {@link TemplateTest}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response findAll(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@QueryParam("filter") String filter) {
+		return entityService.findAll(V(sourceName), TemplateTest.class, filter)
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link TemplateTestValue}.
+	 * 
+	 * @param body The {@link TemplateTest} to create.
+	 * @return the created {@link TemplateTest} as {@link Response}.
+	 */
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.create(V(sourceName), TemplateTest.class, L(requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link TemplateTest} with all parameters set in the given JSON
+	 * body of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link TemplateTest} to delete.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link TemplateTest}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, @PathParam(REQUESTPARAM_ID) String id,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName), entityService.find(V(sourceName), TemplateTest.class, V(id)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link TemplateTest}.
+	 * 
+	 * @param id The identifier of the {@link TemplateTest} to delete.
+	 * @return the deleted {@link TemplateTest }s as {@link Response}
+	 */
+	@DELETE
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.delete(V(sourceName), entityService.find(V(sourceName), TemplateTest.class, V(id)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the search attributes for the {@link TemplateTest} type.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the {@link SearchAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildSearchAttributesResponse(V(sourceName), TemplateTest.class, entityService);
+	}
+
+	/**
+	 * Returns a map of localization for the entity type and the attributes.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the I18N as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildLocalizationResponse(V(sourceName), TemplateTest.class, entityService);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateTestStepResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateTestStepResource.java
new file mode 100644
index 0000000..e8a8d24
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateTestStepResource.java
@@ -0,0 +1,184 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_CONTEXTTYPE;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.L;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.dflt.model.TemplateTestStep;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+/**
+ * {@link TemplateTestStep} resource handling REST requests
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+@Tag(name = "Template")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/tplteststeps")
+public class TemplateTestStepResource {
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * Returns the found {@link TemplateTestStep}.
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param contextType {@link ContextType} of the {@link TemplateTestStep} to
+	 *                    load
+	 * @param id          id of the {@link TemplateTestStep}
+	 * @return the found {@link TemplateTestStep} as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response find(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.find(V(sourceName), TemplateTestStep.class, V(id))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) {@link TemplateTestStep}s.
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param contextType {@link ContextType} of the {@link TemplateTestStep} to
+	 *                    load
+	 * @param filter      filter string to filter the {@link TemplateTestStep}
+	 *                    result
+	 * @return the (filtered) {@link TemplateTestStep}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response findAll(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @QueryParam("filter") String filter) {
+		return entityService.findAll(V(sourceName), TemplateTestStep.class, filter)
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link TemplateTestStepValue}.
+	 * 
+	 * @param body The {@link TemplateTestStep} to create.
+	 * @return the created {@link TemplateTestStep} as {@link Response}.
+	 */
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.create(V(sourceName), TemplateTestStep.class,
+						L(requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link TemplateTestStep} with all parameters set in the given
+	 * JSON body of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link TemplateTestStep} to delete.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link TemplateTestStep}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, @PathParam(REQUESTPARAM_ID) String id,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName), entityService.find(V(sourceName), TemplateTestStep.class, V(id)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link TemplateTestStep}.
+	 * 
+	 * @param id The identifier of the {@link TemplateTestStep} to delete.
+	 * @return the deleted {@link TemplateTestStep }s as {@link Response}
+	 */
+	@DELETE
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_CONTEXTTYPE) String contextTypeParam, @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.delete(V(sourceName), entityService.find(V(sourceName), TemplateTestStep.class, V(id)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the search attributes for the {@link TemplateTestStep} type.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the {@link SearchAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildSearchAttributesResponse(V(sourceName), TemplateTestStep.class, entityService);
+	}
+
+	/**
+	 * Returns a map of localization for the entity type and the attributes.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the I18N as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildLocalizationResponse(V(sourceName), TemplateTestStep.class, entityService);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateTestStepUsageResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateTestStepUsageResource.java
new file mode 100644
index 0000000..984e5dd
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TemplateTestStepUsageResource.java
@@ -0,0 +1,197 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_TEMPLATETESTSTEP_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID2;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.L;
+import static org.eclipse.mdm.businessobjects.service.EntityService.SL;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.dflt.model.TemplateTest;
+import org.eclipse.mdm.api.dflt.model.TemplateTestStep;
+import org.eclipse.mdm.api.dflt.model.TemplateTestStepUsage;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.vavr.collection.List;
+
+/**
+ * {@link TemplateTestStepUsage} resource handling REST requests
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+@Tag(name = "Template")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/tpltests/{" + REQUESTPARAM_ID + "}/tplteststepusages")
+public class TemplateTestStepUsageResource {
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * Returns the found {@link TemplateTestStep}.
+	 * 
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         id of the {@link TemplateTestStep}
+	 * @return the found {@link TemplateTestStep} as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID2 + "}")
+	public Response find(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String tplTestId, @PathParam(REQUESTPARAM_ID2) String id) {
+		return entityService.find(V(sourceName), TemplateTestStepUsage.class, V(id), SL(tplTestId))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) {@link TemplateTestStepUsage}s.
+	 * 
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the {@link TemplateTestStepUsage}
+	 *                   result
+	 * @return the (filtered) {@link TemplateTestStepUsage}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response findAll(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String tplTestId, @QueryParam("filter") String filter) {
+		return entityService.find(V(sourceName), TemplateTest.class, V(tplTestId))
+				.map(tplTest -> List.ofAll(tplTest.getTemplateTestStepUsages()))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link TemplateTestStepUsageValue}.
+	 * 
+	 * 
+	 * @param body The {@link TemplateTestStepUsage} to create.
+	 * @return the created {@link TemplateTestStepUsage} as {@link Response}.
+	 */
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String tplTestId, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.create(V(sourceName), TemplateTestStepUsage.class,
+						L(requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME),
+								entityService.find(V(sourceName), TemplateTest.class, V(tplTestId)),
+								entityService.find(V(sourceName), TemplateTestStep.class,
+										requestBody.getStringValueSupplier(ENTITYATTRIBUTE_TEMPLATETESTSTEP_ID))))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link TemplateTestUsage} with all parameters set in the given
+	 * JSON body of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link TemplateTestUsage} to delete.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link TemplateTestUsage}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID2 + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String tplTestId, @PathParam(REQUESTPARAM_ID2) String id, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName),
+						entityService.find(V(sourceName), TemplateTestStepUsage.class, V(id), SL(tplTestId)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link TemplateTestStepUsage}.
+	 * 
+	 * 
+	 * @param id The identifier of the {@link TemplateTestStepUsage} to delete.
+	 * @return the deleted {@link TemplateTestStepUsage }s as {@link Response}
+	 */
+	@DELETE
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID2 + "}")
+	public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String tplTestId, @PathParam(REQUESTPARAM_ID2) String id) {
+		return entityService
+				.delete(V(sourceName),
+						entityService.find(V(sourceName), TemplateTestStepUsage.class, V(id), SL(tplTestId)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the search attributes for the {@link TemplateTestStepUsage} type.
+	 * 
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the {@link SearchAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildSearchAttributesResponse(V(sourceName), TemplateTestStepUsage.class, entityService);
+	}
+
+	/**
+	 * Returns a map of localization for the entity type and the attributes.
+	 * 
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the I18N as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildLocalizationResponse(V(sourceName), TemplateTestStepUsage.class, entityService);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TestResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TestResource.java
new file mode 100644
index 0000000..358ee3b
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TestResource.java
@@ -0,0 +1,359 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import java.util.Map;
+import java.util.NoSuchElementException;
+
+import javax.annotation.security.RolesAllowed;
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.container.ResourceContext;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.dflt.model.Classification;
+import org.eclipse.mdm.api.dflt.model.Domain;
+import org.eclipse.mdm.api.dflt.model.Pool;
+import org.eclipse.mdm.api.dflt.model.ProjectDomain;
+import org.eclipse.mdm.api.dflt.model.TemplateTest;
+import org.eclipse.mdm.api.dflt.model.ValueList;
+import org.eclipse.mdm.businessobjects.control.FileLinkActivity;
+import org.eclipse.mdm.businessobjects.entity.ContextResponse;
+import org.eclipse.mdm.businessobjects.entity.I18NResponse;
+import org.eclipse.mdm.businessobjects.entity.MDMEntityResponse;
+import org.eclipse.mdm.businessobjects.entity.SearchAttributeResponse;
+import org.eclipse.mdm.businessobjects.service.ContextService;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.vavr.Value;
+import io.vavr.collection.List;
+import io.vavr.collection.Seq;
+import io.vavr.collection.Vector;
+import io.vavr.control.Try;
+
+/**
+ * {@link Test} resource
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Tag(name = "Test")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/tests")
+public class TestResource {
+
+	private static final String ATTR_WITHTESTSTEPS = "WithTestSteps";
+
+	private static final Logger LOG = LoggerFactory.getLogger(TestResource.class);
+
+	@EJB
+	private TestService testService;
+
+	@EJB
+	private EntityService entityService;
+
+	@EJB
+	private ContextService contextService;
+
+	@EJB
+	private FileLinkActivity fileLinkActivity;
+
+	@Context
+	private ResourceContext resourceContext;
+
+	/**
+	 * delegates the request to the {@link TestService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the {@link Test} result
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Find Tests by filter", description = "Get list of Tests", responses = {
+			@ApiResponse(description = "The projects", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response getTests(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "Filter expression", required = false) @QueryParam("filter") String filter) {
+
+		return Try.of(() -> testService.getTests(sourceName, filter)).map(List::ofAll)
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK, Test.class))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link TestService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the search attributes", description = "Get a list of search attributes", responses = {
+			@ApiResponse(description = "The search attributes", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+
+		return Try.of(() -> testService.getSearchAttributes(sourceName))
+				.map(attrs -> ServiceUtils.toResponse(new SearchAttributeResponse(attrs), Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link TestService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         id of the {@link Test}
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Find a Test by ID", description = "Returns Test based on ID", responses = {
+			@ApiResponse(description = "The Test", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response findTest(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the Test", required = true) @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.find(V(sourceName), Test.class, V(id))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link TestService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the Test localizations", description = "Returns Test localizations", responses = {
+			@ApiResponse(description = "The Test localizations", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+
+		try {
+			Map<Attribute, String> localizedAttributeMap = this.testService.localizeAttributes(sourceName);
+			Map<EntityType, String> localizedEntityTypeMap = this.testService.localizeType(sourceName);
+			return ServiceUtils.toResponse(new I18NResponse(localizedEntityTypeMap, localizedAttributeMap), Status.OK);
+
+		} catch (RuntimeException e) {
+			LOG.error(e.getMessage(), e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	/**
+	 * Returns the created {@link Test}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param body       The {@link Test} to create.
+	 * @return the created {@link Test} as {@link Response}.
+	 */
+	@POST
+	@Operation(summary = "Create a new Test", responses = {
+			@ApiResponse(description = "The created Test", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			String body) {
+		// TODO
+
+		Seq<Value<?>> extractRequestBody = entityService.extractRequestBody(body, sourceName,
+				io.vavr.collection.List.of(Pool.class, org.eclipse.mdm.api.dflt.model.Status.class, TemplateTest.class,
+						ProjectDomain.class, Domain.class, Classification.class));
+
+		java.util.List<Value<?>> asJavaMutable = extractRequestBody.asJavaMutable();
+
+		org.eclipse.mdm.api.dflt.model.Status status = null;
+		ProjectDomain projectDomain = null;
+		Domain domain = null;
+
+		Seq<Value<?>> finalAttrSeq = Vector.empty();
+
+		for (Value<?> v : asJavaMutable) {
+			if (v.get() instanceof org.eclipse.mdm.api.dflt.model.Status) {
+				status = (org.eclipse.mdm.api.dflt.model.Status) v.get();
+				extractRequestBody.remove(v);
+			} else if (v.get() instanceof ProjectDomain) {
+				projectDomain = (ProjectDomain) v.get();
+				extractRequestBody.remove(v);
+			} else if (v.get() instanceof Domain) {
+				domain = (Domain) v.get();
+				extractRequestBody.remove(v);
+			} else {
+				finalAttrSeq = finalAttrSeq.append(v);
+			}
+		}
+
+		if (status != null && projectDomain != null && domain != null) {
+			Classification classification = testService.getClassification(sourceName, status, projectDomain, domain);
+			finalAttrSeq = finalAttrSeq.append(V(classification));
+		}
+
+		RequestBody requestBody = RequestBody.create(body);
+
+		try {
+			Try<String> stringValueSupplier = requestBody.getStringValueSupplier(ATTR_WITHTESTSTEPS);
+			finalAttrSeq = finalAttrSeq.append(V(Boolean.valueOf(stringValueSupplier.get())));
+		} catch (NoSuchElementException e) {
+			// If with TestStep not exist, do nothing
+		}
+
+		return entityService.create(V(sourceName), Test.class, finalAttrSeq)
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link Test} with all parameters set in the given JSON body of
+	 * the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link TestValue} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link Test}
+	 */
+	@PUT
+	@Operation(summary = "Update an existing Test", description = "Updates the Test with all parameters set in the body of the request.", responses = {
+			@ApiResponse(description = "The updated TestStep", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	@RolesAllowed({ "write-user" })
+	public Response update(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the Test", required = true) @PathParam(REQUESTPARAM_ID) String id,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName), entityService.find(V(sourceName), Test.class, V(id)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link Test}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         The identifier of the {@link Test} to delete.
+	 * @return the deleted {@link ValueList }s as {@link Response}
+	 */
+	@DELETE
+	@Operation(summary = "Delete an existing Test", responses = {
+			@ApiResponse(description = "The deleted Test", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response delete(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the Test", required = true) @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.delete(V(sourceName), entityService.find(V(sourceName), Test.class, V(id)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	@Path("/{" + REQUESTPARAM_ID + "}/files/")
+	public FilesAttachableSubresource getFilesAttachableSubresource() {
+		FilesAttachableSubresource resource = resourceContext.getResource(FilesAttachableSubresource.class);
+		resource.setEntityClass(Test.class);
+		return resource;
+	}
+
+	/**
+	 * delegates the request to the {@link TestStepService}
+	 *
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         id of the {@link TestStep}
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the test constant context data for a Test", description = "Returns the test constant context", responses = {
+			@ApiResponse(responseCode = "200", description = "The test constant context data", content = @Content(schema = @Schema(implementation = ContextResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts")
+	public Response findContext(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id) {
+		return contextService.getTestContext(V(sourceName), V(id), false).map(ServiceUtils::contextMapToJava)
+				.map(ContextResponse::new).map(contextResponse -> ServiceUtils.toResponse(contextResponse, Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the context of {@link TestStep} with all parameters set in the given
+	 * JSON body of the request.
+	 *
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link TestStep} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the context map of the updated {@link TestStep}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts")
+	@RolesAllowed({ "write-user" })
+	public Response updateContext(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id, String body) {
+
+		return entityService.find(V(sourceName), TestStep.class, V(id))
+				.map(testStep -> contextService.updateContext(body, testStep)).map(ContextResponse::new)
+				.map(contextResponse -> ServiceUtils.toResponse(contextResponse, Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TestService.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TestService.java
new file mode 100644
index 0000000..961b865
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TestService.java
@@ -0,0 +1,209 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.Transaction;
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.ModelManager;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.api.base.query.ComparisonOperator;
+import org.eclipse.mdm.api.base.query.Condition;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.base.query.Filter;
+import org.eclipse.mdm.api.base.query.QueryService;
+import org.eclipse.mdm.api.base.query.Record;
+import org.eclipse.mdm.api.base.query.Result;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.Classification;
+import org.eclipse.mdm.api.dflt.model.Domain;
+import org.eclipse.mdm.api.dflt.model.EntityFactory;
+import org.eclipse.mdm.api.dflt.model.Pool;
+import org.eclipse.mdm.api.dflt.model.ProjectDomain;
+import org.eclipse.mdm.api.dflt.model.Status;
+import org.eclipse.mdm.businessobjects.control.I18NActivity;
+import org.eclipse.mdm.businessobjects.control.MDMEntityAccessException;
+import org.eclipse.mdm.businessobjects.control.NavigationActivity;
+import org.eclipse.mdm.businessobjects.control.SearchActivity;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+
+import com.google.common.collect.Lists;
+
+/**
+ * TestService Bean implementation with available {@link Test} operations
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Stateless
+public class TestService {
+
+	@Inject
+	private ConnectorService connectorService;
+	@EJB
+	private I18NActivity i18nActivity;
+	@EJB
+	private SearchActivity searchActivity;
+	@EJB
+	private NavigationActivity navigationActivity;
+
+	/**
+	 * returns the matching {@link Test}s using the given filter or all
+	 * {@link Test}s if no filter is available
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the {@link Test} result
+	 * @return the found {@link Test}s
+	 */
+	public List<Test> getTests(String sourceName, String filter) {
+
+		try {
+			ApplicationContext context = this.connectorService.getContextByName(sourceName);
+			EntityManager em = context.getEntityManager()
+					.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+
+			if (filter == null || filter.trim().length() <= 0) {
+				return em.loadAll(Test.class);
+			}
+
+			if (ServiceUtils.isParentFilter(context, filter, Pool.class)) {
+				String id = ServiceUtils.extactIdFromParentFilter(context, filter, Pool.class);
+				return this.navigationActivity.getTests(sourceName, id);
+			}
+
+			return this.searchActivity.search(context, Test.class, filter);
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * Returns the {@link SearchAttribute} for the entity type Test in the given
+	 * data source.
+	 * 
+	 * @param sourceName The name of the data source.
+	 * @return the found {@link SearchAttribute}s
+	 */
+	public List<SearchAttribute> getSearchAttributes(String sourceName) {
+		return this.searchActivity.listAvailableAttributes(this.connectorService.getContextByName(sourceName),
+				Test.class);
+	}
+
+	/**
+	 * returns a {@link Test} identified by the given id.
+	 * 
+	 * @param testId     id of the {@link Test}
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param testStepId id of the {@link Test}
+	 * @return the matching {@link Test}
+	 */
+	public Test getTest(String sourceName, String testId) {
+		try {
+			EntityManager em = this.connectorService.getContextByName(sourceName).getEntityManager()
+					.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+			return em.load(Test.class, testId);
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * returns localized {@link Test} attributes
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the localized {@link Test} attributes
+	 */
+	public Map<Attribute, String> localizeAttributes(String sourceName) {
+		return this.i18nActivity.localizeAttributes(sourceName, Test.class);
+	}
+
+	/**
+	 * returns the localized {@link Test} type name
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the localized {@link Test} type name
+	 */
+	public Map<EntityType, String> localizeType(String sourceName) {
+		return this.i18nActivity.localizeType(sourceName, Test.class);
+	}
+	
+	public Classification getClassification(String sourceName, Status status, ProjectDomain projectDomain, Domain domain) {
+		Optional<QueryService> queryService = connectorService.getContextByName(sourceName).getQueryService();
+		Optional<ModelManager> modelManager = connectorService.getContextByName(sourceName).getModelManager();
+		
+		EntityType entityType = modelManager.get().getEntityType(Classification.class);
+		Condition c1 = ComparisonOperator.CASE_INSENSITIVE_EQUAL.create(entityType.getAttribute("ProjectDomain"), projectDomain.getID());
+		Condition c2 = ComparisonOperator.CASE_INSENSITIVE_EQUAL.create(entityType.getAttribute("Domain"), domain.getID());
+		Condition c3 = ComparisonOperator.CASE_INSENSITIVE_EQUAL.create(entityType.getAttribute("Status"), status.getID());
+		
+		java.util.List<Result> fetch = queryService.get().createQuery().selectID(entityType).fetch(Filter.and().addAll(c1, c2, c3));
+		
+		java.util.List<String> collect = fetch.stream()
+		.map(r -> r.getRecord(entityType)).map(Record::getID).collect(Collectors.toList());
+		
+		EntityManager em = this.connectorService.getContextByName(sourceName).getEntityManager()
+				.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+		
+		Classification classification = null;
+		if (!collect.isEmpty()) {
+			
+			classification = em.load(Classification.class, collect.get(0));
+		} else {
+			StringBuilder className = new StringBuilder();
+			className.append("ProjDomainId_");
+			className.append(projectDomain.getID());
+			className.append(".DomainId_");
+			className.append(domain.getID());
+			className.append(".StatusId_");
+			className.append(status.getID());
+			
+			boolean classificationCreated = false;
+			Transaction transaction = em.startTransaction();
+			
+			try {
+				
+				EntityFactory ef = this.connectorService.getContextByName(sourceName).getEntityFactory()
+						.orElseThrow(() -> new MDMEntityAccessException("Entity factory not present!"));
+				classification = ef.createClassification(className.toString(), status, projectDomain, domain);
+				transaction.create(Lists.newArrayList(classification));
+				transaction.commit();
+				classificationCreated = true;
+			} finally {
+				if (!classificationCreated) {
+					transaction.abort();
+					throw new MDMEntityAccessException("Failed to create classification!");
+				}
+			}
+			
+		}
+		
+		
+		return classification;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TestStepResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TestStepResource.java
new file mode 100644
index 0000000..ded5f5f
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TestStepResource.java
@@ -0,0 +1,471 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ATTRIBUTENAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_CONTEXTCOMPONENTNAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_CONTEXTTYPE;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.annotation.security.RolesAllowed;
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.container.ResourceContext;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.dflt.model.Classification;
+import org.eclipse.mdm.api.dflt.model.TemplateTestStep;
+import org.eclipse.mdm.api.dflt.model.ValueList;
+import org.eclipse.mdm.businessobjects.control.FileLinkActivity;
+import org.eclipse.mdm.businessobjects.entity.ContextResponse;
+import org.eclipse.mdm.businessobjects.entity.ContextSensorResponse;
+import org.eclipse.mdm.businessobjects.entity.I18NResponse;
+import org.eclipse.mdm.businessobjects.entity.MDMEntityResponse;
+import org.eclipse.mdm.businessobjects.entity.SearchAttributeResponse;
+import org.eclipse.mdm.businessobjects.service.ContextService;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.vavr.collection.List;
+import io.vavr.control.Try;
+
+/**
+ * {@link TestStep} resource
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Tag(name = "TestStep")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/teststeps")
+public class TestStepResource {
+
+	@EJB
+	private TestStepService testStepService;
+
+	@EJB
+	private EntityService entityService;
+
+	@EJB
+	private ContextService contextService;
+
+	@EJB
+	private FileLinkActivity fileLinkActivity;
+
+	@Context
+	private ResourceContext resourceContext;
+
+	/**
+	 * delegates the request to the {@link TestStepService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the TestStep result
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Operation(summary = "Find TestSteps by filter", description = "Get list of TestSteps", responses = {
+			@ApiResponse(description = "The projects", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	public Response getTestSteps(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "Filter expression", required = false) @QueryParam("filter") String filter) {
+
+		return Try.of(() -> testStepService.getTestSteps(sourceName, filter)).map(List::ofAll)
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK, TestStep.class))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+
+	}
+
+	/**
+	 * delegates the request to the {@link TestStepService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the search attributes", description = "Get a list of search attributes", responses = {
+			@ApiResponse(description = "The search attributes", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+
+		return Try.of(() -> testStepService.getSearchAttributes(sourceName))
+				.map(attrs -> ServiceUtils.toResponse(new SearchAttributeResponse(attrs), Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link TestStepService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         id of the {@link TestStep}
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Find a TestStep by ID", description = "Returns TestStep based on ID", responses = {
+			@ApiResponse(description = "The TestStep", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response findTestStep(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the TestStep", required = true) @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.find(V(sourceName), TestStep.class, V(id))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link TestStepService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         id of the {@link TestStep}
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the complete context data for a TestStep", description = "Returns the complete context", responses = {
+			@ApiResponse(responseCode = "200", description = "The TestStep context data", content = @Content(schema = @Schema(implementation = ContextResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts")
+	public Response findContext(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the TestStep", required = true) @PathParam(REQUESTPARAM_ID) String id) {
+		return contextService.getTestStepContext(V(sourceName), V(id)).map(ServiceUtils::contextMapToJava)
+				.map(ContextResponse::new).map(contextResponse -> ServiceUtils.toResponse(contextResponse, Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the context of {@link TestStep} with all parameters set in the given
+	 * JSON body of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link TestStep} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the context map of the updated {@link TestStep}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts")
+//	@RolesAllowed({ "write-user" })
+	public Response updateContext(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id, String body) {
+
+		return entityService.find(V(sourceName), TestStep.class, V(id))
+				.map(testStep -> contextService.updateContext(body, testStep)).map(ContextResponse::new)
+				.map(contextResponse -> ServiceUtils.toResponse(contextResponse, Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link TestStepService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         id of the {@link TestStep}
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the UnitUnderTest context data for a TestStep", description = "Returns the complete context", responses = {
+			@ApiResponse(responseCode = "200", description = "The UnitUnderTest context data", content = @Content(schema = @Schema(implementation = ContextResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts/unitundertest")
+	public Response findContextUUT(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id) {
+
+		return contextService.getTestStepContext(V(sourceName), V(id), ContextType.UNITUNDERTEST)
+				.map(ServiceUtils::contextMapToJava).map(ContextResponse::new)
+				.map(contextResponse -> ServiceUtils.toResponse(contextResponse, Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the context of {@link ContextType} UNITUNDERTEST of {@link TestStep}
+	 * with all parameters set in the given JSON body of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link TestStep} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the context map of {@link ContextType} UNITUNDERTEST of the updated
+	 *         {@link TestStep}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts/unitundertest")
+	@RolesAllowed({ "write-user" })
+	public Response updateContextUUT(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id, String body) {
+
+		return entityService.find(V(sourceName), TestStep.class, V(id))
+				.map(testStep -> contextService.updateContext(body, testStep, ContextType.UNITUNDERTEST))
+				.map(ContextResponse::new).map(contextResponse -> ServiceUtils.toResponse(contextResponse, Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link TestStepService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         id of the {@link TestStep}
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the TestSequence context data for a TestStep", description = "Returns the TestSequence context data", responses = {
+			@ApiResponse(responseCode = "200", description = "The TestSequence context data", content = @Content(schema = @Schema(implementation = ContextResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts/testsequence")
+	public Response findContextTSQ(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id) {
+
+		return contextService.getTestStepContext(V(sourceName), V(id), ContextType.TESTSEQUENCE)
+				.map(ServiceUtils::contextMapToJava).map(ContextResponse::new)
+				.map(contextResponse -> ServiceUtils.toResponse(contextResponse, Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the context of {@link ContextType} TESTSEQUENCE of {@link TestStep}
+	 * with all parameters set in the given JSON body of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link TestStep} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the context map of {@link ContextType} TESTSEQUENCE of the updated
+	 *         {@link TestStep}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts/testsequence")
+	@RolesAllowed({ "write-user" })
+	public Response updateContextTSQ(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id, String body) {
+
+		return entityService.find(V(sourceName), TestStep.class, V(id))
+				.map(testStep -> contextService.updateContext(body, testStep, ContextType.TESTSEQUENCE))
+				.map(ContextResponse::new).map(contextResponse -> ServiceUtils.toResponse(contextResponse, Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link TestStepService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         id of the {@link TestStep}
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the TestEquipment context data for a TestStep", description = "Returns the TestEquipment context data", responses = {
+			@ApiResponse(responseCode = "200", description = "The TestEquipment context data", content = @Content(schema = @Schema(implementation = ContextResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts/testequipment")
+	public Response findContextTEQ(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id) {
+
+		return contextService.getTestStepContext(V(sourceName), V(id), ContextType.TESTEQUIPMENT)
+				.map(ServiceUtils::contextMapToJava).map(ContextResponse::new)
+				.map(contextResponse -> ServiceUtils.toResponse(contextResponse, Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the context of {@link ContextType} TESTEQUIPMENT of {@link TestStep}
+	 * with all parameters set in the given JSON body of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link TestStep} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the context map of {@link ContextType} TESTEQUIPMENT of the updated
+	 *         {@link TestStep}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts/testequipment")
+	@RolesAllowed({ "write-user" })
+	public Response updateContextTEQ(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id, String body) {
+
+		return entityService.find(V(sourceName), TestStep.class, V(id))
+				.map(testStep -> contextService.updateContext(body, testStep, ContextType.TESTEQUIPMENT))
+				.map(ContextResponse::new).map(contextResponse -> ServiceUtils.toResponse(contextResponse, Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link TestStepService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         id of the {@link TestStep}
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the Sensor context data", description = "Returns the Sensor context data of TestEquipments", responses = {
+			@ApiResponse(responseCode = "200", description = "The Sensor context data", content = @Content(schema = @Schema(implementation = ContextResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts/testequipment/sensors")
+	public Response getContextTEQSensors(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id) {
+
+		return Try.of(() -> testStepService.getSensors(sourceName, id))
+				.map(sensorMap -> ServiceUtils.toResponse(new ContextSensorResponse(sensorMap), Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * delegates the request to the {@link TestStepService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Operation(summary = "Get the TestStep localizations", description = "Returns TestStep localizations", responses = {
+			@ApiResponse(description = "The TestStep localizations", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+
+		return Try
+				.of(() -> new I18NResponse(testStepService.localizeType(sourceName),
+						testStepService.localizeAttributes(sourceName)))
+				.map(resp -> ServiceUtils.toResponse(resp, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link TestStep}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param body       The {@link TestStep} to create.
+	 * @return the created {@link TestStep} as {@link Response}.
+	 */
+	@POST
+	@Operation(summary = "Create a new TestStep", responses = {
+			@ApiResponse(description = "The created TestStep", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "500", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			String body) {
+
+		return entityService
+				.create(V(sourceName), TestStep.class,
+						entityService.extractRequestBody(body, sourceName,
+								List.of(Test.class, TemplateTestStep.class, Classification.class)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link TestStep} with all parameters set in the given JSON body
+	 * of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link TestStep} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link TestStep}
+	 */
+	@PUT
+	@Operation(summary = "Update an existing TestStep", description = "Updates the TestStep with all parameters set in the body of the request.", responses = {
+			@ApiResponse(description = "The updated Project", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	@RolesAllowed({ "write-user" })
+	public Response update(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the TestStep", required = true) @PathParam(REQUESTPARAM_ID) String id,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName), entityService.find(V(sourceName), TestStep.class, V(id)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link TestStep}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         The identifier of the {@link TestStep} to delete.
+	 * @return the deleted {@link ValueList }s as {@link Response}
+	 */
+	@DELETE
+	@Operation(summary = "Delete an existing TestStep", responses = {
+			@ApiResponse(description = "The deleted TestStep", content = @Content(schema = @Schema(implementation = MDMEntityResponse.class))),
+			@ApiResponse(responseCode = "400", description = "Invalid ID supplied") })
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response delete(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@Parameter(description = "ID of the TestStep", required = true) @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.delete(V(sourceName), entityService.find(V(sourceName), TestStep.class, V(id)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	@Path("/{" + REQUESTPARAM_ID + "}/contexts/{" + REQUESTPARAM_CONTEXTTYPE + "}/{" + REQUESTPARAM_CONTEXTCOMPONENTNAME
+			+ "}/{" + REQUESTPARAM_ATTRIBUTENAME + "}/files")
+	public ContextFilesSubresource getContextFilesSubresource() {
+		ContextFilesSubresource resource = resourceContext.getResource(ContextFilesSubresource.class);
+		resource.setEntityClass(TestStep.class);
+		return resource;
+	}
+
+	@Path("/{" + REQUESTPARAM_ID + "}/files")
+	public FilesAttachableSubresource getFilesAttachableSubresource() {
+		FilesAttachableSubresource resource = resourceContext.getResource(FilesAttachableSubresource.class);
+		resource.setEntityClass(TestStep.class);
+		return resource;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TestStepService.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TestStepService.java
new file mode 100644
index 0000000..1f899ca
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/TestStepService.java
@@ -0,0 +1,204 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextSensor;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.businessobjects.control.ContextActivity;
+import org.eclipse.mdm.businessobjects.control.I18NActivity;
+import org.eclipse.mdm.businessobjects.control.MDMEntityAccessException;
+import org.eclipse.mdm.businessobjects.control.NavigationActivity;
+import org.eclipse.mdm.businessobjects.control.SearchActivity;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+
+/**
+ * TestStepService Bean implementation with available {@link TestStep}
+ * operations
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Stateless
+public class TestStepService {
+
+	@Inject
+	private ConnectorService connectorService;
+	@EJB
+	private I18NActivity i18nActivity;
+	@EJB
+	private NavigationActivity navigationActivity;
+	@EJB
+	private ContextActivity contextActivity;
+	@EJB
+	private SearchActivity searchActivity;
+
+	/**
+	 * returns the matching {@link TestStep}s using the given filter or all
+	 * {@link TestStep}s if no filter is available
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the TestStep result
+	 * @return the found {@link TestStep}s
+	 */
+	public List<TestStep> getTestSteps(String sourceName, String filter) {
+		try {
+
+			ApplicationContext context = this.connectorService.getContextByName(sourceName);
+			EntityManager em = context.getEntityManager()
+					.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+
+			if (filter == null || filter.trim().length() <= 0) {
+				return em.loadAll(TestStep.class);
+			}
+
+			if (ServiceUtils.isParentFilter(context, filter, TestStep.PARENT_TYPE_TEST)) {
+				String id = ServiceUtils.extactIdFromParentFilter(context, filter, TestStep.PARENT_TYPE_TEST);
+				return this.navigationActivity.getTestSteps(sourceName, id);
+			}
+
+			return this.searchActivity.search(context, TestStep.class, filter);
+
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * Returns the {@link SearchAttribute} for the entity type TestStep in the given
+	 * data source.
+	 * 
+	 * @param sourceName The name of the data source.
+	 * @return the found {@link SearchAttribute}s
+	 */
+	public List<SearchAttribute> getSearchAttributes(String sourceName) {
+		return this.searchActivity.listAvailableAttributes(this.connectorService.getContextByName(sourceName),
+				TestStep.class);
+	}
+
+	/**
+	 * returns a {@link TestStep} identified by the given id.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param testStepId id of the {@link TestStep}
+	 * @return the matching {@link TestStep}
+	 */
+	public TestStep getTestStep(String sourceName, String testStepId) {
+		try {
+			return this.connectorService.getContextByName(sourceName).getEntityManager()
+					.map(em -> em.load(TestStep.class, testStepId))
+					.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * returns the complete context data (ordered and measured) for a
+	 * {@link TestStep}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param testStepId id of the {@link TestStep}
+	 * @return a map with the complete context data (ordered and measured)
+	 */
+	public Map<String, Map<ContextType, ContextRoot>> getContext(String sourceName, String testStepId) {
+		return this.contextActivity.getTestStepContext(sourceName, testStepId);
+	}
+
+	/**
+	 * returns the UnitUnderTest context data (ordered and measured) for a
+	 * {@link TestStep}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param testStepId id of the {@link TestStep}
+	 * @return a map with the UnitUnderTest context data (ordered and measured)
+	 */
+	public Map<String, Map<ContextType, ContextRoot>> getContextUUT(String sourceName, String testStepId) {
+		return this.contextActivity.getTestStepContext(sourceName, testStepId, ContextType.UNITUNDERTEST);
+	}
+
+	/**
+	 * returns the TestSequence context data (ordered and measured) for a
+	 * {@link TestStep}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param testStepId id of the {@link TestStep}
+	 * @return a map with the TestSequence context data (ordered and measured)
+	 */
+	public Map<String, Map<ContextType, ContextRoot>> getContextTSQ(String sourceName, String testStepId) {
+		return this.contextActivity.getTestStepContext(sourceName, testStepId, ContextType.TESTSEQUENCE);
+	}
+
+	/**
+	 * returns the TestEquipment context data (ordered and measured) for a
+	 * {@link TestStep}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param testStepId id of the {@link TestStep}
+	 * @return a map with the TestEquipment context data (ordered and measured)
+	 */
+	public Map<String, Map<ContextType, ContextRoot>> getContextTEQ(String sourceName, String testStepId) {
+		return this.contextActivity.getTestStepContext(sourceName, testStepId, ContextType.TESTEQUIPMENT);
+	}
+
+	/**
+	 * returns all sensor context data of TestEquipment sensor configuration
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param testStepId id of the {@link TestStep}
+	 * @return a map with the TestEquipment sensor context data (ordered and
+	 *         measured)
+	 */
+	public Map<String, List<ContextSensor>> getSensors(String sourceName, String testStepId) {
+		return this.contextActivity.getTestStepSensorContext(sourceName, testStepId);
+	}
+
+	/**
+	 * returns localized {@link TestStep} attributes
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the localized {@link TestStep} attributes
+	 */
+	public Map<Attribute, String> localizeAttributes(String sourceName) {
+		return this.i18nActivity.localizeAttributes(sourceName, TestStep.class);
+	}
+
+	/**
+	 * returns the localized {@link TestStep} type name
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the localized {@link TestStep} type name
+	 */
+	public Map<EntityType, String> localizeType(String sourceName) {
+		return this.i18nActivity.localizeType(sourceName, TestStep.class);
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/UnitResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/UnitResource.java
new file mode 100644
index 0000000..62cf093
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/UnitResource.java
@@ -0,0 +1,184 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_PHYSICALDIMENSION_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.L;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.PhysicalDimension;
+import org.eclipse.mdm.api.base.model.Unit;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+/**
+ * {@link Unit} resource handling REST requests
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+@Tag(name = "Unit")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/units")
+public class UnitResource {
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * Returns the found {@link Unit}. {@link WebApplicationException} on error.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         id of the {@link Unit}
+	 * @return the found {@link Unit} as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response find(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.find(V(sourceName), Unit.class, V(id))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) {@link Unit}s.
+	 * 
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the {@link Unit} result
+	 * @return the (filtered) {@link Unit}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response findAll(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@QueryParam("filter") String filter) {
+		return entityService.findAll(V(sourceName), Unit.class, filter)
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link Unit}.
+	 * 
+	 * 
+	 * @param body The {@link Unit} to create.
+	 * @return the created {@link Unit} as {@link Response}.
+	 */
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.create(V(sourceName), Unit.class,
+						L(requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME),
+								entityService.find(V(sourceName), PhysicalDimension.class,
+										requestBody.getStringValueSupplier(ENTITYATTRIBUTE_PHYSICALDIMENSION_ID))))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link Unit} with all parameters set in the given JSON body of
+	 * the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link Unit} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link Unit}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, @PathParam(REQUESTPARAM_ID) String id,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName), entityService.find(V(sourceName), Unit.class, V(id)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link Unit}. {@link WebApplicationException}
+	 * on error.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         The identifier of the {@link Unit} to delete.
+	 * @return the deleted {@link Unit }s as {@link Response}
+	 */
+	@DELETE
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.delete(V(sourceName), entityService.find(V(sourceName), Unit.class, V(id)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the search attributes for the {@link Unit} type.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the {@link SearchAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildSearchAttributesResponse(V(sourceName), Unit.class, entityService);
+	}
+
+	/**
+	 * Returns a map of localization for the entity type and the attributes.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the I18N as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildLocalizationResponse(V(sourceName), Unit.class, entityService);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/UserResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/UserResource.java
new file mode 100644
index 0000000..c5d74d8
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/UserResource.java
@@ -0,0 +1,76 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.security.PermitAll;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.SecurityContext;
+
+import org.eclipse.mdm.businessobjects.entity.User;
+
+import com.google.common.base.Splitter;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+@Tag(name = "User")
+@Path("/user")
+@PermitAll
+public class UserResource {
+
+	@Context
+	public SecurityContext securityContext;
+
+	@GET
+	@Path("/current")
+	@Operation(summary = "Read authenticated user information", description = "Read the current user name and which of the given roles the user has.", responses = {
+			@ApiResponse(description = "The authenticated user.", content = @Content(schema = @Schema(implementation = User.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response currentUser(
+			@Parameter(description = "Comma separated list of roles. This method checks, if the user belongs to each role. If the user does not belong to a role or the role is not queried, it will not be returned.", required = true) @QueryParam("roles") String roles) {
+		/*
+		 * There is no reliable way in getting the (possibly mapped) roles of a user.
+		 * Thus the check if a user is in a role is only against the given list of
+		 * roles.
+		 */
+		List<String> roleList = new ArrayList<>();
+		if (roles != null) {
+			for (String role : Splitter.on(",").trimResults().split(roles)) {
+				if (securityContext.isUserInRole(role)) {
+					roleList.add(role);
+				}
+			}
+		}
+
+		User user = new User();
+		user.setUsername(securityContext.getUserPrincipal().getName());
+		user.setRoles(roleList);
+		return Response.ok(user).build();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ValueListResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ValueListResource.java
new file mode 100644
index 0000000..31537b6
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ValueListResource.java
@@ -0,0 +1,177 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.L;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.dflt.model.ValueList;
+import org.eclipse.mdm.api.dflt.model.ValueListValue;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+/**
+ * {@link ValueList} resource handling REST requests
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+@Tag(name = "ValueList")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/valuelists")
+public class ValueListResource {
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * Returns the found {@link ValueList}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         id of the {@link ValueList}
+	 * @return the found {@link ValueList} as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response find(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, @PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.find(V(sourceName), ValueList.class, V(id))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) {@link ValueList}s.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the {@link ValueList} result
+	 * @return the (filtered) {@link ValueList}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response findAll(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@QueryParam("filter") String filter) {
+		return entityService.findAll(V(sourceName), ValueList.class, filter)
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link ValueList}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param body       The {@link ValueList} to create.
+	 * @return the created {@link ValueList} as {@link Response}.
+	 */
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.create(V(sourceName), ValueList.class, L(requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link ValueList} with all parameters set in the given JSON body
+	 * of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link ValueListValue} to update.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link ValueList}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName, @PathParam(REQUESTPARAM_ID) String id,
+			String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName), entityService.find(V(sourceName), ValueList.class, V(id)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link ValueList}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         The identifier of the {@link ValueList} to delete.
+	 * @return the deleted {@link ValueList }s as {@link Response}
+	 */
+	@DELETE
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID + "}")
+	public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String id) {
+		return entityService.delete(V(sourceName), entityService.find(V(sourceName), ValueList.class, V(id)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the search attributes for the {@link ValueList} type.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the {@link SearchAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildSearchAttributesResponse(V(sourceName), ValueList.class, entityService);
+	}
+
+	/**
+	 * Returns a map of localization for the entity type and the attributes.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the I18N as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildLocalizationResponse(V(sourceName), ValueList.class, entityService);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ValueListValueResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ValueListValueResource.java
new file mode 100644
index 0000000..4d00bff
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ValueListValueResource.java
@@ -0,0 +1,188 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_ID2;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+import static org.eclipse.mdm.businessobjects.service.EntityService.L;
+import static org.eclipse.mdm.businessobjects.service.EntityService.SL;
+import static org.eclipse.mdm.businessobjects.service.EntityService.V;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.dflt.model.ValueList;
+import org.eclipse.mdm.api.dflt.model.ValueListValue;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.vavr.collection.List;
+
+/**
+ * {@link ValueListValue} resource handling REST requests
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+@Tag(name = "ValueList")
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/valuelists/{" + REQUESTPARAM_ID + "}/values")
+public class ValueListValueResource {
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * Returns the found {@link ValueListValue}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         id of the {@link ValueListValue}
+	 * @return the found {@link ValueListValue} as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID2 + "}")
+	public Response find(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String valueListId, @PathParam(REQUESTPARAM_ID2) String id) {
+		return entityService.find(V(sourceName), ValueListValue.class, V(id), SL(valueListId))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the (filtered) {@link ValueListValue}s.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param filter     filter string to filter the {@link ValueListValue} result
+	 * @return the (filtered) {@link ValueListValue}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response findAll(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String valueListId, @QueryParam("filter") String filter) {
+
+		return entityService.find(V(sourceName), ValueList.class, V(valueListId))
+				.map(valueList -> List.ofAll(valueList.getValueListValues()))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the created {@link ValueListValue}.
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param valueListId id of the {@link ValueList} to create to value for
+	 * @param body        The {@link ValueListValue} to create.
+	 * @return the created {@link ValueListValue} as {@link Response}.
+	 */
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String valueListId, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.create(V(sourceName), ValueListValue.class,
+						L(requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME),
+								entityService.find(V(sourceName), ValueList.class, V(valueListId))))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.CREATED))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Updates the {@link ValueListValue} with all parameters set in the given JSON
+	 * body of the request.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         the identifier of the {@link ValueListValue} to delete.
+	 * @param body       the body of the request containing the attributes to update
+	 * @return the updated {@link ValueListValue}
+	 */
+	@PUT
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID2 + "}")
+	public Response update(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String valueListId, @PathParam(REQUESTPARAM_ID2) String id, String body) {
+		RequestBody requestBody = RequestBody.create(body);
+
+		return entityService
+				.update(V(sourceName), entityService.find(V(sourceName), ValueListValue.class, V(id), SL(valueListId)),
+						requestBody.getValueMapSupplier())
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Deletes and returns the deleted {@link ValueListValue}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param id         The identifier of the {@link ValueListValue} to delete.
+	 * @return the deleted {@link ValueListValue }s as {@link Response}
+	 */
+	@DELETE
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{" + REQUESTPARAM_ID2 + "}")
+	public Response delete(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@PathParam(REQUESTPARAM_ID) String valueListId, @PathParam(REQUESTPARAM_ID2) String id) {
+		return entityService
+				.delete(V(sourceName), entityService.find(V(sourceName), ValueListValue.class, V(id), SL(valueListId)))
+				.map(e -> ServiceUtils.buildEntityResponse(e, Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER)
+				.getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Returns the search attributes for the {@link ValueListValue} type.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the {@link SearchAttribute}s as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/searchattributes")
+	public Response getSearchAttributes(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildSearchAttributesResponse(V(sourceName), ValueListValue.class, entityService);
+	}
+
+	/**
+	 * Returns a map of localization for the entity type and the attributes.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @return the I18N as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/localizations")
+	public Response localize(@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+		return ServiceUtils.buildLocalizationResponse(V(sourceName), ValueListValue.class, entityService);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ValuesResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ValuesResource.java
new file mode 100644
index 0000000..0169a8c
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ValuesResource.java
@@ -0,0 +1,85 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.MEDIATYPE_APPLICATION_PROTOBUF;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.REQUESTPARAM_SOURCENAME;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.eclipse.mdm.protobuf.Mdm;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.parameters.RequestBody;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+@Tag(name = "Values")
+@Consumes({ MEDIATYPE_APPLICATION_PROTOBUF, MediaType.APPLICATION_JSON })
+@Produces({ MEDIATYPE_APPLICATION_PROTOBUF, MediaType.APPLICATION_JSON })
+@Path("/environments/{" + REQUESTPARAM_SOURCENAME + "}/values")
+public class ValuesResource {
+
+	@EJB
+	private ValuesService valuesService;
+
+	@POST
+	@Path("read")
+	@Operation(summary = "Read measurement data", description = "Read measurement specified by a ReadRequest.", responses = {
+			@ApiResponse(description = "A list with MeasuredValues. Each MeasuredValues represents the values of a Channel.", content = @Content(schema = @Schema(implementation = Mdm.MeasuredValuesList.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	public Response read(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@RequestBody(description = "ReadRequest specifying the Channels and the portion of the Channel's data to read.", required = true, content = @Content(schema = @Schema(implementation = Mdm.ReadRequest.class))) Mdm.ReadRequest protoReadRequest) {
+
+		return Response.ok(valuesService.load(sourceName, protoReadRequest)).build();
+	}
+
+	@POST
+	@Path("write")
+	@Operation(summary = "Write measurement data", description = "Write measurement data for the specified ChannelGroup and Channels. Both ChannelGroup and Channels must exist.", responses = {
+			@ApiResponse(description = "An empty response"),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	public Response write(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@RequestBody(description = "WriteRequestList specifying the Channels and measurement data to write.", required = true, content = @Content(schema = @Schema(implementation = Mdm.WriteRequestList.class))) Mdm.WriteRequestList protoWriteRequestList) {
+
+		valuesService.write(sourceName, protoWriteRequestList);
+
+		return Response.noContent().build();
+	}
+
+	@POST
+	@Path("preview")
+	@Operation(summary = "Read preview data", description = "Read preview data for the specified ReadRequest. The number of chunks defines the number of returned values per channel. The original measured values are chunked and for each chunk the average, minimum and maximum values are calculated.", responses = {
+			@ApiResponse(description = "Average, minimum and maximum values for each chunk are returned as MeasuredValues. Each MeasuredValues represents the preview of a Channel where the lenght of MeasuredValues equals numberOfChunks.", content = @Content(schema = @Schema(implementation = Mdm.PreviewValuesList.class))),
+			@ApiResponse(responseCode = "400", description = "Error") })
+	public Response preview(
+			@Parameter(description = "Name of the MDM datasource", required = true) @PathParam(REQUESTPARAM_SOURCENAME) String sourceName,
+			@RequestBody(description = "PreviewRequest specifying the Channels and number of chunks to read.", required = true, content = @Content(schema = @Schema(implementation = Mdm.PreviewRequest.class))) Mdm.PreviewRequest previewRequest) {
+
+		return Response.ok(valuesService.preview(sourceName, previewRequest)).build();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ValuesService.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ValuesService.java
new file mode 100644
index 0000000..5f96b50
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/boundary/ValuesService.java
@@ -0,0 +1,328 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.Transaction;
+import org.eclipse.mdm.api.base.massdata.AnyTypeValuesBuilder;
+import org.eclipse.mdm.api.base.massdata.ComplexNumericalValuesBuilder;
+import org.eclipse.mdm.api.base.massdata.IndependentBuilder;
+import org.eclipse.mdm.api.base.massdata.ReadRequest;
+import org.eclipse.mdm.api.base.massdata.WriteRequest;
+import org.eclipse.mdm.api.base.massdata.WriteRequestBuilder;
+import org.eclipse.mdm.api.base.massdata.WriteRequestFinalizer;
+import org.eclipse.mdm.api.base.model.AxisType;
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.DoubleComplex;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.FloatComplex;
+import org.eclipse.mdm.api.base.model.MeasuredValues;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.businessobjects.utils.PreviewHelper;
+import org.eclipse.mdm.businessobjects.utils.ProtobufConverter;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+import org.eclipse.mdm.protobuf.Mdm;
+import org.eclipse.mdm.protobuf.Mdm.MeasuredValuesList;
+import org.eclipse.mdm.protobuf.Mdm.PreviewRequest;
+import org.eclipse.mdm.protobuf.Mdm.PreviewValuesList;
+import org.eclipse.mdm.protobuf.Mdm.WriteRequestList.WriteRequest.ExplicitData;
+import org.eclipse.mdm.protobuf.Mdm.WriteRequestList.WriteRequest.ImplicitConstant;
+import org.eclipse.mdm.protobuf.Mdm.WriteRequestList.WriteRequest.ImplicitLinear;
+import org.eclipse.mdm.protobuf.Mdm.WriteRequestList.WriteRequest.ImplicitSaw;
+import org.eclipse.mdm.protobuf.Mdm.WriteRequestList.WriteRequest.RawLinear;
+import org.eclipse.mdm.protobuf.Mdm.WriteRequestList.WriteRequest.RawLinearCalibrated;
+import org.eclipse.mdm.protobuf.Mdm.WriteRequestList.WriteRequest.RawPolynomial;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
+import com.google.common.primitives.Booleans;
+import com.google.common.primitives.Doubles;
+import com.google.common.primitives.Floats;
+import com.google.common.primitives.Ints;
+import com.google.common.primitives.Longs;
+import com.google.common.primitives.Shorts;
+
+@Stateless
+public class ValuesService {
+
+	private static final Logger LOG = LoggerFactory.getLogger(ValuesService.class);
+
+	@Inject
+	private ConnectorService connectorService;
+
+	/**
+	 * Loads multiple MeasuredValues as specified in ReadRequest.
+	 * 
+	 * @param sourceName       name of the source (MDM {@link Environment} name)
+	 * @param protoReadRequest Protobuf ReadRequest
+	 * @return the loaded MeasuredValuesList
+	 */
+	public MeasuredValuesList load(String sourceName, Mdm.ReadRequest protoReadRequest) {
+
+		ApplicationContext context = connectorService.getContextByName(sourceName);
+
+		ReadRequest readRequest = ProtobufConverter.convert(context, protoReadRequest);
+
+		List<MeasuredValues> measuredValues = context.getEntityManager().get().readMeasuredValues(readRequest);
+
+		return ProtobufConverter.convert(measuredValues);
+	}
+
+	/**
+	 * Loads preview values for multiple channels as specified in
+	 * {@link PreviewRequest}. The preview consists of minimum (min), maximum (max)
+	 * and average (avg) values for each chunk of values. The number of chunks must
+	 * be given in {@link PreviewRequest}.
+	 * 
+	 * @param sourceName       name of the source (MDM {@link Environment} name)
+	 * @param protoReadRequest Protobuf {@link PreviewRequest}
+	 * @return the loaded PreviewValuesList
+	 */
+	public PreviewValuesList preview(String sourceName, Mdm.PreviewRequest previewRequest) {
+		ApplicationContext context = connectorService.getContextByName(sourceName);
+
+		ReadRequest readRequest = ProtobufConverter.convert(context, previewRequest.getReadRequest());
+
+		List<Mdm.MeasuredValues> measuredValues = ProtobufConverter
+				.convert(context.getEntityManager().get().readMeasuredValues(readRequest)).getValuesList();
+
+		// Calculate Preview
+		return new PreviewHelper().calculatePreview(measuredValues, previewRequest.getNumberOfChunks());
+	}
+
+	/**
+	 * Writes values for multiple Channels.
+	 * 
+	 * @param sourceName            name of the source (MDM {@link Environment}
+	 *                              name)
+	 * @param protoWriteRequestList Protobuf {@link WriteRequest}
+	 */
+	public void write(String sourceName, Mdm.WriteRequestList protoWriteRequestList) {
+		ApplicationContext context = connectorService.getContextByName(sourceName);
+		Supplier<ZoneId> zoneId = Suppliers
+				.memoize(() -> getServerZoneId(context.getEntityManager().get().loadEnvironment()));
+
+		List<WriteRequest> writeRequests = new ArrayList<>();
+		for (Mdm.WriteRequestList.WriteRequest r : protoWriteRequestList.getValuesList()) {
+			writeRequests.add(convert(context, r, zoneId));
+		}
+
+		Transaction t = context.getEntityManager().get().startTransaction();
+		t.writeMeasuredValues(writeRequests);
+		t.commit();
+	}
+
+	/**
+	 * Converts a Protobuf to a api.base WritRequest.
+	 * 
+	 * @param context           {@link ApplicationContext} to write to.
+	 * @param protoWriteRequest Data to write.
+	 * @param zoneId            A supplier for a {@link ZoneId} which will be used,
+	 *                          if Data with DT_DATE is written.
+	 * @return converted {@link WriteRequest}
+	 */
+	private WriteRequest convert(ApplicationContext context, Mdm.WriteRequestList.WriteRequest protoWriteRequest,
+			Supplier<ZoneId> zoneId) {
+		EntityManager em = context.getEntityManager().get();
+
+		ChannelGroup channelGroup = em.load(ChannelGroup.class, protoWriteRequest.getChannelGroupId());
+		Channel channel = em.load(Channel.class, protoWriteRequest.getChannelId());
+		AxisType axisType = ProtobufConverter.convert(protoWriteRequest.getAxisType());
+
+		WriteRequestBuilder rb = WriteRequest.create(channelGroup, channel, axisType);
+
+		WriteRequestFinalizer wrf;
+		switch (protoWriteRequest.getDataCase()) {
+		case EXPLICIT:
+			wrf = setValues(rb.explicit(), protoWriteRequest.getExplicit(), zoneId);
+			break;
+		case IMPLICIT_CONSTANT:
+			ImplicitConstant ic = protoWriteRequest.getImplicitConstant();
+			wrf = rb.implicitConstant(ProtobufConverter.convert(ic.getScalarType()), ic.getOffset());
+			break;
+		case IMPLICIT_LINEAR:
+			ImplicitLinear il = protoWriteRequest.getImplicitLinear();
+			wrf = rb.implicitLinear(ProtobufConverter.convert(il.getScalarType()), il.getStart(), il.getIncrement());
+			break;
+		case IMPLICIT_SAW:
+			ImplicitSaw is = protoWriteRequest.getImplicitSaw();
+			wrf = rb.implicitSaw(ProtobufConverter.convert(is.getScalarType()), is.getStart(), is.getIncrement(),
+					is.getStop());
+			break;
+		case RAW_LINEAR:
+			RawLinear rl = protoWriteRequest.getRawLinear();
+			wrf = setValues(rb.rawLinear(rl.getOffset(), rl.getFactor()), rl.getValues(), zoneId);
+			break;
+		case RAW_LINEAR_CALIBRATED:
+			RawLinearCalibrated rlc = protoWriteRequest.getRawLinearCalibrated();
+			wrf = setValues(rb.rawLinearCalibrated(rlc.getOffset(), rlc.getFactor(), rlc.getCalibration()),
+					rlc.getValues(), zoneId);
+			break;
+		case RAW_POLYNOMIAL:
+			RawPolynomial rp = protoWriteRequest.getRawPolynomial();
+			wrf = setValues(rb.rawPolynomial(Doubles.toArray(rp.getCoefficientsList())), rp.getValues(), zoneId);
+			break;
+		case DATA_NOT_SET:
+		default:
+			throw new RuntimeException("Not supported yet: " + protoWriteRequest.getDataCase());
+
+		}
+
+		// TODO mkoller 04.11.2019, Unit conversion is not yet supported.
+
+//		if (wrf instanceof UnitBuilder) {
+//			// Unit convertion not supported yet!
+//			Unit unit = context.getEntityManager().get().load(Unit.class, "" + protoWriteRequest.getUnitId());
+//			wrf = ((UnitBuilder) wrf).sourceUnit(unit);
+//		}
+//		if (wrf instanceof UnitIndependentBuilder) {
+//			// Unit convertion not supported yet!
+//			Unit unit = context.getEntityManager().get().load(Unit.class, "" + protoWriteRequest.getUnitId());
+//			wrf = ((UnitBuilder) wrf).sourceUnit(unit);
+//		}
+
+		if (wrf instanceof IndependentBuilder) {
+			wrf = ((IndependentBuilder) wrf).independent(protoWriteRequest.getIndependent());
+		}
+		return wrf.build();
+
+	}
+
+	/**
+	 * Helper function to set values for the appropriate datatype in an
+	 * {@link AnyTypeValuesBuilder}
+	 * 
+	 * @param builder
+	 * @param explicitData
+	 * @param zoneId
+	 * @return {@link WriteRequestFinalizer}
+	 */
+	private WriteRequestFinalizer setValues(AnyTypeValuesBuilder builder, ExplicitData explicitData,
+			Supplier<ZoneId> zoneId) {
+		boolean[] flags = Booleans.toArray(explicitData.getFlagsList());
+		switch (explicitData.getValuesCase()) {
+		case STRING_ARRAY:
+			String[] strings = ProtobufConverter.convertStrings(explicitData.getStringArray());
+			return (flags.length > 0) ? builder.stringValues(strings, flags) : builder.stringValues(strings);
+		case DATE_ARRAY:
+			LocalDateTime[] dates = ProtobufConverter.convertDates(explicitData.getDateArray(), zoneId.get());
+			return (flags.length > 0) ? builder.dateValues(dates, flags) : builder.dateValues(dates);
+		case BOOLEAN_ARRAY:
+			boolean[] booleans = Booleans.toArray(explicitData.getBooleanArray().getValuesList());
+			return (flags.length > 0) ? builder.booleanValues(booleans, flags) : builder.booleanValues(booleans);
+		case BYTE_STREAM_ARRAY:
+			byte[][] byteStreams = ProtobufConverter
+					.convertByteStreams(explicitData.getByteStreamArray().getValuesList());
+			return (flags.length > 0) ? builder.byteStreamValues(byteStreams, flags)
+					: builder.byteStreamValues(byteStreams);
+		case BYTE_ARRAY:
+		case SHORT_ARRAY:
+		case INTEGER_ARRAY:
+		case LONG_ARRAY:
+		case FLOAT_ARRAY:
+		case DOUBLE_ARRAY:
+		case FLOAT_COMPLEX_ARRAY:
+		case DOUBLE_COMPLEX_ARRAY:
+			return setValues((ComplexNumericalValuesBuilder) builder, explicitData, zoneId);
+		case VALUES_NOT_SET:
+		default:
+			throw new RuntimeException("No explicit data set!");
+		}
+	}
+
+	/**
+	 * Helper function to set values for the appropriate datatype in a
+	 * {@link ComplexNumericalValuesBuilder}.
+	 * 
+	 * @param builder
+	 * @param explicitData
+	 * @param zoneId
+	 * @return {@link WriteRequestFinalizer}
+	 */
+	private WriteRequestFinalizer setValues(ComplexNumericalValuesBuilder builder, ExplicitData explicitData,
+			Supplier<ZoneId> zoneId) {
+		boolean[] flags = Booleans.toArray(explicitData.getFlagsList());
+		switch (explicitData.getValuesCase()) {
+		case STRING_ARRAY:
+		case DATE_ARRAY:
+		case BOOLEAN_ARRAY:
+		case BYTE_STREAM_ARRAY:
+			throw new RuntimeException(
+					explicitData.getValuesCase() + " not supported by ComplexNumericalValuesBuilder!");
+		case BYTE_ARRAY:
+			byte[] bytes = explicitData.getByteArray().getValues().toByteArray();
+			return (flags.length > 0) ? builder.byteValues(bytes, flags) : builder.byteValues(bytes);
+		case SHORT_ARRAY:
+			short[] shorts = Shorts.toArray(explicitData.getShortArray().getValuesList());
+			return (flags.length > 0) ? builder.shortValues(shorts, flags) : builder.shortValues(shorts);
+		case INTEGER_ARRAY:
+			int[] ints = Ints.toArray(explicitData.getIntegerArray().getValuesList());
+			return (flags.length > 0) ? builder.integerValues(ints, flags) : builder.integerValues(ints);
+		case LONG_ARRAY:
+			long[] longs = Longs.toArray(explicitData.getLongArray().getValuesList());
+			return (flags.length > 0) ? builder.longValues(longs, flags) : builder.longValues(longs);
+		case FLOAT_ARRAY:
+			float[] floats = Floats.toArray(explicitData.getFloatArray().getValuesList());
+			return (flags.length > 0) ? builder.floatValues(floats, flags) : builder.floatValues(floats);
+		case DOUBLE_ARRAY:
+			double[] doubles = Doubles.toArray(explicitData.getDoubleArray().getValuesList());
+			return (flags.length > 0) ? builder.doubleValues(doubles, flags) : builder.doubleValues(doubles);
+		case FLOAT_COMPLEX_ARRAY:
+			FloatComplex[] floatComplexes = ProtobufConverter
+					.convertFloatComplex(explicitData.getFloatComplexArray().getValuesList());
+			return (flags.length > 0) ? builder.floatComplexValues(floatComplexes, flags)
+					: builder.floatComplexValues(floatComplexes);
+		case DOUBLE_COMPLEX_ARRAY:
+			DoubleComplex[] doubleComplexes = ProtobufConverter
+					.convertDoubleComplex(explicitData.getDoubleComplexArray().getValuesList());
+			return (flags.length > 0) ? builder.doubleComplexValues(doubleComplexes, flags)
+					: builder.doubleComplexValues(doubleComplexes);
+		case VALUES_NOT_SET:
+		default:
+			throw new RuntimeException("No explicit data set!");
+		}
+	}
+
+	/**
+	 * Returns the ZonId configured in the {@link Environment}
+	 * 
+	 * @param env {@link Environment} for extracting the ZoneId
+	 * @return ZonId configured in the {@link Environment}
+	 */
+	private ZoneId getServerZoneId(Environment env) {
+		String timezone = env.getTimezone();
+		try {
+			return ZoneId.of(timezone);
+		} catch (Exception e) {
+			if (LOG.isDebugEnabled()) {
+				LOG.debug("Timezone '" + timezone + "' of Environment '" + env.getName() + "' is invalid!", e);
+			} else {
+				LOG.warn("Timezone '" + timezone + "' of Environment '" + env.getName() + "' is invalid!");
+			}
+			return ZoneId.systemDefault();
+		}
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/ContextActivity.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/ContextActivity.java
new file mode 100644
index 0000000..88693f8
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/ContextActivity.java
@@ -0,0 +1,249 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.model.ContextComponent;
+import org.eclipse.mdm.api.base.model.ContextDescribable;
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextSensor;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+
+/**
+ * ContextActivity Bean implementation to get ordered and measured context data
+ * for {@link ContextDescribable} business objects (e.g. TestStep)
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Stateless
+public class ContextActivity implements Serializable {
+
+	public static final String CONTEXT_GROUP_ORDERED = "ordered";
+	public static final String CONTEXT_GROUP_MEASURED = "measured";
+
+	public static final String CONTEXT_SENSOR_GROUP_ORDERED = "sensor_ordered";
+	public static final String CONTEXT_SENSOR_GROUP_MEASURED = "sensor_measured";
+
+	@Inject
+	private ConnectorService connectorService;
+
+	/**
+	 * returns the ordered and measurement context for a {@link TestStep} MDM
+	 * business object identified by the given MDM system name and {@link TestStep}
+	 * ID. If no {@link ContextType}s are defined for this method call, the method
+	 * returns all context informations of the available {@link ContextType}s.
+	 * Otherwise you can specify a list of {@link ContextType}s.
+	 * 
+	 * Possible {@link ContextType}s are {@link ContextType}.UNITUNDERTEST,
+	 * {@link ContextType}.TESTSEQUENCE and {@link ContextType}.TESTEQUIPMENT.
+	 * 
+	 * @param sourceName   the MDM system name
+	 * @param testStepID   instance id if the {@link TestStep}
+	 * @param contextTypes list of {@link ContextType}s
+	 * @return the ordered and measured context data as context object for the
+	 *         identified {@link TestStep}
+	 * @throws ContextProviderException if an error occurs during lookup the context
+	 *                                  informations
+	 */
+	public Map<String, Map<ContextType, ContextRoot>> getTestStepContext(String sourceName, String testStepID,
+			ContextType... contextTypes) {
+		try {
+
+			EntityManager em = this.connectorService.getContextByName(sourceName).getEntityManager()
+					.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+			TestStep testStep = em.load(TestStep.class, testStepID);
+
+			Map<ContextType, ContextRoot> orderedContext = em.loadContexts(testStep, contextTypes);
+			Map<ContextType, ContextRoot> measuredContext = lookupMeasuredContextByTestStep(em, testStep, contextTypes);
+
+			Map<String, Map<ContextType, ContextRoot>> contextMap = new HashMap<>();
+			contextMap.put(CONTEXT_GROUP_ORDERED, orderedContext);
+			contextMap.put(CONTEXT_GROUP_MEASURED, measuredContext);
+
+			return contextMap;
+
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * returns the ordered and measurement context for a {@link Measurement} MDM
+	 * business object identified by the given MDM system name and
+	 * {@link Measurement} ID. If no {@link ContextType}s are defined for this
+	 * method call, the method returns all context informations of the available
+	 * {@link ContextType}s. Otherwise you can specify a list of
+	 * {@link ContextType}s.
+	 * 
+	 * Possible {@link ContextType}s are {@link ContextType}.UNITUNDERTEST,
+	 * {@link ContextType}.TESTSEQUENCE and {@link ContextType}.TESTEQUIPMENT.
+	 * 
+	 * @param sourceName    the MDM system name
+	 * @param measurementID instance id if the {@link Measurement}
+	 * @param contextTypes  list of {@link ContextType}s
+	 * @return the ordered and measured context data as context object for the
+	 *         identified {@link Measurement}
+	 * @throws ContextProviderException if an error occurs during lookup the context
+	 *                                  informations
+	 */
+	public Map<String, Map<ContextType, ContextRoot>> getMeasurementContext(String sourceName, String measurementID,
+			ContextType... contextTypes) {
+
+		try {
+
+			EntityManager em = this.connectorService.getContextByName(sourceName).getEntityManager()
+					.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+			Measurement measurement = em.load(Measurement.class, measurementID);
+
+			Map<ContextType, ContextRoot> measuredContext = em.loadContexts(measurement, contextTypes);
+			Map<ContextType, ContextRoot> orderedContext = lookupOrderedContextByMeasurement(em, measurement,
+					contextTypes);
+
+			Map<String, Map<ContextType, ContextRoot>> contextMap = new HashMap<>();
+			contextMap.put(CONTEXT_GROUP_ORDERED, orderedContext);
+			contextMap.put(CONTEXT_GROUP_MEASURED, measuredContext);
+
+			return contextMap;
+
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+
+	}
+
+	/**
+	 * returns the sensor context of the given {@link TestStep}. The sensor
+	 * informations will extracted from the TestEquipment part of the context data.
+	 * 
+	 * @param sourceName the MDM system name
+	 * @param testStepID instance id if the {@link TestStep}
+	 * @return a map with the TestEquipment sensor context data (ordered and
+	 *         measured)
+	 */
+	public Map<String, List<ContextSensor>> getTestStepSensorContext(String sourceName, String testStepID) {
+
+		try {
+			EntityManager em = this.connectorService.getContextByName(sourceName).getEntityManager()
+					.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+
+			TestStep testStep = em.load(TestStep.class, testStepID);
+
+			Map<ContextType, ContextRoot> orderedContext = em.loadContexts(testStep, ContextType.TESTEQUIPMENT);
+			Map<ContextType, ContextRoot> measuredContext = lookupMeasuredContextByTestStep(em, testStep,
+					ContextType.TESTEQUIPMENT);
+
+			return createSensorMap(orderedContext, measuredContext);
+
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * returns the sensor context of the given {@link Measurement}. The sensor
+	 * informations will extracted from the TestEquipment part of the context data.
+	 * 
+	 * @param sourceName    the MDM system name
+	 * @param measurementID instance id if the {@link Measurement}
+	 * @return a map with the TestEquipment sensor context data (ordered and
+	 *         measured)
+	 */
+	public Map<String, List<ContextSensor>> getMeasurementSensorContext(String sourceName, String measurementID) {
+		try {
+
+			EntityManager em = this.connectorService.getContextByName(sourceName).getEntityManager()
+					.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+			Measurement measurement = em.load(Measurement.class, measurementID);
+
+			Map<ContextType, ContextRoot> measuredContext = em.loadContexts(measurement, ContextType.TESTEQUIPMENT);
+			Map<ContextType, ContextRoot> orderedContext = lookupOrderedContextByMeasurement(em, measurement,
+					ContextType.TESTEQUIPMENT);
+
+			return createSensorMap(orderedContext, measuredContext);
+
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	private Map<ContextType, ContextRoot> lookupOrderedContextByMeasurement(EntityManager em, Measurement measurement,
+			ContextType... contextTypes) throws DataAccessException {
+
+		Optional<TestStep> optional = em.loadParent(measurement, Measurement.PARENT_TYPE_TESTSTEP);
+
+		if (!optional.isPresent()) {
+			return Collections.emptyMap();
+		}
+
+		TestStep testStep = optional.get();
+		return em.loadContexts(testStep, contextTypes);
+	}
+
+	private Map<ContextType, ContextRoot> lookupMeasuredContextByTestStep(EntityManager em, TestStep testStep,
+			ContextType... contextTypes) throws DataAccessException {
+
+		List<Measurement> childList = em.loadChildren(testStep, TestStep.CHILD_TYPE_MEASUREMENT);
+		if (childList.size() > 0) {
+			return em.loadContexts(childList.get(0), contextTypes);
+		}
+		return Collections.emptyMap();
+	}
+
+	private Map<String, List<ContextSensor>> createSensorMap(Map<ContextType, ContextRoot> orderedContext,
+			Map<ContextType, ContextRoot> measuredContext) {
+
+		Map<String, List<ContextSensor>> sensorMap = new HashMap<String, List<ContextSensor>>();
+
+		ContextRoot orderedContextRoot = orderedContext.get(ContextType.TESTEQUIPMENT);
+		if (orderedContextRoot != null) {
+			List<ContextSensor> orderedSensors = extractContextSensors(orderedContextRoot);
+			sensorMap.put(CONTEXT_SENSOR_GROUP_ORDERED, orderedSensors);
+		}
+
+		ContextRoot measuredContextRoot = measuredContext.get(ContextType.TESTEQUIPMENT);
+		if (measuredContextRoot != null) {
+			List<ContextSensor> measuredSensors = extractContextSensors(measuredContextRoot);
+			sensorMap.put(CONTEXT_SENSOR_GROUP_MEASURED, measuredSensors);
+		}
+
+		return sensorMap;
+	}
+
+	private List<ContextSensor> extractContextSensors(ContextRoot contextRoot) {
+		List<ContextSensor> contextSensors = new ArrayList<ContextSensor>();
+		List<ContextComponent> contextComponents = contextRoot.getContextComponents();
+		for (ContextComponent contextComponent : contextComponents) {
+			contextSensors.addAll(contextComponent.getContextSensors());
+		}
+		return contextSensors;
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/FileLinkActivity.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/FileLinkActivity.java
new file mode 100644
index 0000000..8faad3a
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/FileLinkActivity.java
@@ -0,0 +1,570 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.StreamingOutput;
+
+import org.eclipse.mdm.api.base.Transaction;
+import org.eclipse.mdm.api.base.file.FileService;
+import org.eclipse.mdm.api.base.model.ContextComponent;
+import org.eclipse.mdm.api.base.model.ContextDescribable;
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.FileLink;
+import org.eclipse.mdm.api.base.model.FileLink.Format;
+import org.eclipse.mdm.api.base.model.FilesAttachable;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.MimeType;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.businessobjects.entity.FileSize;
+import org.eclipse.mdm.businessobjects.service.ContextService;
+import org.eclipse.mdm.businessobjects.service.DescribableContexts;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+
+import com.google.common.io.ByteStreams;
+
+import io.vavr.Tuple;
+import io.vavr.Tuple2;
+
+@Stateless
+public class FileLinkActivity {
+
+	@Inject
+	private ConnectorService connectorService;
+
+	@EJB
+	private ContextService contextService;
+
+	@EJB
+	private ContextActivity contextActivity;
+
+	/**
+	 * Loads size of File with given remotePath.
+	 * 
+	 * @param sourceName      name of the source (MDM {@link Environment})
+	 * @param filesAttachable the {@link FilesAttachable} {@link Entity} the file is
+	 *                        attached to
+	 * @param remotePath      the remotePath
+	 * @return the {@link FileSize}
+	 */
+	public FileSize loadFileSize(String sourceName, Entity entity, FileLink fileLink) {
+		FileService fileService = getFileService(sourceName);
+		return loadSize(entity, fileLink, fileService);
+	}
+
+	/**
+	 * Loads sizes for all files attached to the given entity.
+	 * 
+	 * @param sourceName      name of the source (MDM {@link Environment})
+	 * @param filesAttachable the {@link FilesAttachable} {@link Entity} the files
+	 *                        are attached to
+	 * @return the {@link FileSize}s as {@link List}
+	 */
+	public List<FileSize> loadFileSizes(String sourceName, FilesAttachable fileAttachable) {
+		FileService fileService = getFileService(sourceName);
+		return Arrays.asList(fileAttachable.getFileLinks()).stream()
+				.map(fileLink -> loadSize(fileAttachable, fileLink, fileService)).collect(Collectors.toList());
+	}
+
+	/**
+	 * Helping function to trigger the actual file size loading process via given
+	 * {@link FileService}
+	 * 
+	 * @param filesAttachable the {@link FilesAttachable} {@link Entity} the file is
+	 *                        attached to
+	 * @param fileLink        the {@link FileLink}
+	 * @param fileService     the {@link FileService}
+	 * @return the {@link FileSize}
+	 */
+	private FileSize loadSize(Entity entity, FileLink fileLink, FileService fileService) {
+		FileSize fileSize = new FileSize();
+		try {
+			fileService.loadSize(entity, fileLink);
+			fileSize.setRemotePath(fileLink.getRemotePath());
+			fileSize.setSize(fileLink.getSize(Format.BINARY));
+		} catch (IOException e) {
+			throw new MDMFileAccessException(e.getMessage(), e);
+		}
+		return fileSize;
+	}
+
+	/**
+	 * Persists file at file server. Creates a new {@link FileLink} (pointing at the
+	 * new file) and adds it to the {@link FilesAttachable}
+	 * 
+	 * @param sourceName      name of the source (MDM {@link Environment})
+	 * @param filesAttachable the {@link FilesAttachable} {@link Entity} the file is
+	 *                        attached to
+	 * @param fileName        the name of the file
+	 * @param fis             the {@code InputStream} with the file data
+	 * @param description     the file description. Default value is the file name.
+	 * @param mimeType        the mimeType of the file.
+	 * @return the {@link FileLink} to the created File
+	 */
+	public FileLink createFile(String sourceName, FilesAttachable filesAttachable, String fileName, InputStream fis,
+			String description, MimeType mimeType) {
+
+		FileLink fileLink = null;
+		try {
+			// Create new local FileLink
+			fileLink = newLocalFileLink(fileName, fis, description, mimeType);
+
+			// Upload fileLink. Upload will create remote path.
+			uploadFile(sourceName, filesAttachable, fileLink);
+
+			// Add file link to fileAttachable
+			filesAttachable.addFileLink(fileLink);
+
+			// Persist changes
+			persistEntity(sourceName, filesAttachable);
+		} catch (IOException e) {
+			throw new MDMFileAccessException(
+					String.format("File (%s, %s, %s) could not be created.", fileName, description, mimeType), e);
+		}
+		return fileLink;
+	}
+
+	/**
+	 * Persists file at file server. Creates a new {@link FileLink} (pointing at the
+	 * new file) and adds it to the specified context attribute
+	 * 
+	 * @param sourceName           name of the source (MDM {@link Environment})
+	 * @param contextDescribable   the {@link ContextDescribable}
+	 * @param fileName             the name of the file
+	 * @param fis                  the {@code InputStream} with the file data
+	 * @param description          the file description. Default value is the file
+	 *                             name.
+	 * @param mimeType             the mimeType of the file.
+	 * @param contextType          the {@link ContextType} holding the component
+	 * @param contextComponentName the name of the component holding the file link
+	 *                             attribute
+	 * @param attributeName        the name of the attribute holding the file link
+	 * @return
+	 */
+	public FileLink createFile(String sourceName, ContextDescribable contextDescribable, String fileName,
+			InputStream fis, String description, MimeType mimeType, ContextType contextType,
+			String contextComponentName, String attributeName) {
+
+		Map<ContextType, ContextRoot> contextMap = getContextMap(sourceName, contextDescribable, contextType);
+		Value value = findValueInContext(contextType, contextComponentName, contextMap, attributeName);
+
+		FileLink fileLink = null;
+		try {
+			// Create new local FileLink
+			fileLink = newLocalFileLink(fileName, fis, description, mimeType);
+			// Upload file to file server. Upload creates and sets remote path in fileLink.
+			uploadFile(sourceName, contextDescribable, fileLink);
+
+			// Since attributes of type FILE_LINK can hold a maximum of one file, the old
+			// file has to be deleted from fileServer
+			if (ValueType.FILE_LINK.equals(value.getValueType())) {
+				deleteFile(sourceName, contextDescribable, value.extract(ValueType.FILE_LINK));
+			}
+
+			// Adds file link to the context attribute
+			setOrAddFileLinkToValue(value, fileLink);
+
+			// Persist changes
+			DescribableContexts dc = createDescribableContext(contextDescribable, contextMap);
+			contextService.persist(dc);
+
+		} catch (IOException e) {
+			throw new MDMFileAccessException(
+					String.format("File (%s, %s, %s) could not be created.", fileName, description, mimeType), e);
+		}
+		return fileLink;
+	}
+
+	/**
+	 * Deletes file from file server and removes the related {@link FileLink} from
+	 * the {@link FilesAttachable}
+	 * 
+	 * @param sourceName      name of the source (MDM {@link Environment})
+	 * @param filesAttachable the {@link FilesAttachable} {@link Entity} the file is
+	 *                        attached to
+	 * @param remotePath      the remotePath
+	 * @return the {@link FileLink} to the deleted File
+	 */
+	public FileLink deleteFileLink(String sourceName, FilesAttachable filesAttachable, String remotePath) {
+
+		// Find file link
+		FileLink fileLink = findFileLinkAtFileAttachable(remotePath, filesAttachable);
+
+		// Delete file from FileServer
+		deleteFile(sourceName, filesAttachable, fileLink);
+
+		// Remove FileLink from FileAttachable
+		filesAttachable.removeFileLink(fileLink);
+
+		// Persist changes
+		persistEntity(sourceName, filesAttachable);
+
+		return fileLink;
+	}
+
+	/**
+	 * Deletes file from file server and removes the related {@link FileLink} from
+	 * the specified context attribute.
+	 * 
+	 * @param sourceName           name of the source (MDM {@link Environment})
+	 * @param contextDescribable   the context describable
+	 * @param contextType          the {@link ContextType} holding the component
+	 * @param contextComponentName the name of the component holding the file link
+	 *                             attribute
+	 * @param attributeName        the name of the attribute holding the file link
+	 * @param remotePath           the remotePath
+	 * @return
+	 */
+	public FileLink deleteFileLink(String sourceName, ContextDescribable contextDescribable, ContextType contextType,
+			String contextComponentName, String attributeName, String remotePath) {
+
+		// Find link attribute in context
+		Map<ContextType, ContextRoot> contextMap = getContextMap(sourceName, contextDescribable, contextType);
+		Value value = findValueInContext(contextType, contextComponentName, contextMap, attributeName);
+		FileLink fileLink = extractFileLink(remotePath, value);
+
+		// Delete the file from file Server
+		deleteFile(sourceName, contextDescribable, fileLink);
+
+		// Removes file link from the context attribute
+		removeFileLinkfromValue(value, fileLink);
+
+		// Persist changes
+		DescribableContexts dc = createDescribableContext(contextDescribable, contextMap);
+		contextService.persist(dc);
+		return fileLink;
+	}
+
+	/**
+	 * Helping function to find the {@link FileLink} with the specified remotePath
+	 * attached to the given entity.
+	 * 
+	 * @param remotePath      the remotePath
+	 * @param filesAttachable the {@link ContextDescribable} the file is attached to
+	 * @return the specified {@link FileLink}
+	 */
+	public FileLink findFileLinkInContext(String remotePath, String sourceName, ContextDescribable contextDescribable,
+			ContextType contextType, String contextComponentName, String attributeName) {
+		Map<ContextType, ContextRoot> contextMap = getContextMap(sourceName, contextDescribable, contextType);
+		Value value = findValueInContext(contextType, contextComponentName, contextMap, attributeName);
+		return extractFileLink(remotePath, value);
+	}
+
+	/**
+	 * Helping function to find the {@link FileLink} with the specified remotePath
+	 * attached to the given entity.
+	 * 
+	 * @param remotePath      the remotePath
+	 * @param filesAttachable the {@link FilesAttachable} the file is attached to
+	 * @return the specified {@link FileLink}
+	 */
+	public FileLink findFileLinkAtFileAttachable(String remotePath, FilesAttachable entity) {
+		for (FileLink l : ((FilesAttachable) entity).getFileLinks()) {
+			if (l.isRemote() && l.getRemotePath().equals(remotePath)) {
+				return l;
+			}
+		}
+		throw new MDMEntityAccessException("FileLink with remotePath " + remotePath + " not found!");
+	}
+
+	public StreamingOutput toStreamingOutput(String sourceName, Entity entity, FileLink fileLink) {
+		return new StreamingOutput() {
+			@Override
+			public void write(OutputStream output) throws IOException, WebApplicationException {
+				streamFileLink(sourceName, entity, fileLink, output);
+			}
+		};
+	}
+
+	/**
+	 * Creates {@link StreamingOutput} for file. Guesses mime-type to ensure proper
+	 * display/download functionality at client side.
+	 * 
+	 * @TODO Mime-type guess works only for limited types, but CorbaFileServer does
+	 *       not offer methods to properly load mime-type. Find a solution!
+	 * 
+	 * @param sourceName
+	 * @param entity
+	 * @param fileLink
+	 * @return
+	 */
+	public Tuple2<StreamingOutput, String> toStreamingOutputGuessMimeType(String sourceName, Entity entity,
+			FileLink fileLink) {
+		String m = null;
+		StreamingOutput o = null;
+		try {
+			InputStream in = getFileService(sourceName).openStream(entity, fileLink);
+			m = URLConnection.guessContentTypeFromStream(in);
+			o = new StreamingOutput() {
+				public void write(OutputStream output) throws IOException, WebApplicationException {
+					ByteStreams.copy(in, output);
+				}
+			};
+		} catch (IOException e) {
+			throw new MDMFileAccessException(e.getMessage(), e);
+		}
+		return Tuple.of(o, m);
+	}
+
+	/**
+	 * Helping function to physically delete file from file server
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment})
+	 * @param entity     the {@link Entity} the file is attached to or holding the
+	 *                   context with the file attribute
+	 * @param fileLink   the {@link FileLink} related to the file
+	 */
+	private void deleteFile(String sourceName, Entity entity, FileLink fileLink) {
+		FileService fileService = getFileService(sourceName);
+		fileService.delete(entity, fileLink);
+	}
+
+	/**
+	 * Helping function to physically upload file to file server
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment})
+	 * @param entity     the {@link Entity} the file is attached to or holding the
+	 *                   context with the file attribute
+	 * @param fileLink   the {@link FileLink} related to the file
+	 */
+	private void uploadFile(String sourceName, Entity entity, FileLink fileLink) throws IOException {
+		FileService fileService = getFileService(sourceName);
+		List<FileLink> fileLinks = new ArrayList<>();
+		fileLinks.add(fileLink);
+		fileService.uploadSequential(entity, fileLinks, null);
+	}
+
+	/**
+	 * Helping function to persist an {@link Entity}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment})
+	 * @param entity     the {@link Entity} the file is attached to or holding the
+	 *                   context with the file attribute
+	 */
+	private void persistEntity(String sourceName, Entity entity) {
+		List<Entity> enteties = new ArrayList<>();
+		enteties.add(entity);
+
+		EntityManager em = getEntityManager(sourceName);
+		Transaction t = em.startTransaction();
+		t.update(enteties);
+		t.commit();
+	}
+
+	/**
+	 * Helping function to create new local {@FileLink}. Sets filename as default
+	 * description, if no description is provided.
+	 * 
+	 * @param fileName    the file name
+	 * @param fis         the file {@link InputStream}
+	 * @param description the file description
+	 * @param mimeType    the files {@link MimeType}
+	 * @return the new {@FileLink}
+	 * @throws IOException
+	 */
+	private FileLink newLocalFileLink(String fileName, InputStream fis, String description, MimeType mimeType)
+			throws IOException {
+		String desc = (description == null || description.isEmpty()) ? fileName : description;
+		return FileLink.newLocal(fis, fileName, -1, mimeType, desc);
+	}
+
+	/**
+	 * Helping function to load context for {@link ContextDescribable}s.
+	 * 
+	 * Notice: For {@link TestStep}s only the ordered context is loaded. For
+	 * {@link Measurement}s only the measured context is loaded.
+	 * 
+	 * @param sourceName         name of the source (MDM {@link Environment})
+	 * @param contextDescribable the {@link ContextDescribable}
+	 * @param contextType        the {@link ContextType} holding the component
+	 * @return
+	 */
+	private Map<ContextType, ContextRoot> getContextMap(String sourceName, ContextDescribable contextDescribable,
+			ContextType contextType) {
+		if (contextDescribable instanceof TestStep) {
+			return contextActivity.getTestStepContext(sourceName, contextDescribable.getID(), contextType)
+					.get(ContextActivity.CONTEXT_GROUP_ORDERED);
+		} else if (contextDescribable instanceof Measurement) {
+			return contextActivity.getMeasurementContext(sourceName, contextDescribable.getID(), contextType)
+					.get(ContextActivity.CONTEXT_GROUP_MEASURED);
+		}
+		throw new MDMEntityAccessException(
+				"No context of type " + contextType + " not found for " + contextDescribable.toString());
+	}
+
+	/**
+	 * Helping function to add {@link FileLink} to a {@link Value}
+	 * 
+	 * @param value    the {@link Value}
+	 * @param fileLink the {@link FileLink}
+	 */
+	private void setOrAddFileLinkToValue(Value value, FileLink fileLink) {
+		if (ValueType.FILE_LINK.equals(value.getValueType())) {
+			value.set(fileLink);
+		} else if (ValueType.FILE_LINK_SEQUENCE.equals(value.getValueType())) {
+			// delete if exists or create if not exists.
+			FileLink[] old = value.extract(ValueType.FILE_LINK_SEQUENCE);
+			FileLink[] current = Arrays.copyOf(old, old.length + 1);
+			current[old.length] = fileLink;
+			value.set(current);
+		}
+	}
+
+	/**
+	 * Helping function to remove {@link FileLink} from a {@link Value}
+	 * 
+	 * @param value    the {@link Value}
+	 * @param fileLink the {@link FileLink}
+	 */
+	private void removeFileLinkfromValue(Value value, FileLink fileLink) {
+		if (ValueType.FILE_LINK.equals(value.getValueType())) {
+			value.set(null);
+		} else if (ValueType.FILE_LINK_SEQUENCE.equals(value.getValueType())) {
+			FileLink[] links = Stream.of(value.extract(ValueType.FILE_LINK_SEQUENCE))
+					.filter(link -> !link.equals(fileLink)).toArray(FileLink[]::new);
+			value.set(links);
+		}
+	}
+
+	/**
+	 * Helping function to create {@link DescribableContexts}
+	 * 
+	 * @param contextDescribable the {@link ContextDescribable}
+	 * @param contextMap         the context
+	 * @return
+	 */
+	private DescribableContexts createDescribableContext(ContextDescribable contextDescribable,
+			Map<ContextType, ContextRoot> contextMap) {
+		DescribableContexts dc = new DescribableContexts();
+		dc.setTestStep(contextService.getTestStep(contextDescribable));
+		if (contextDescribable instanceof TestStep) {
+			dc.setOrdered(contextMap);
+		}
+		if (contextDescribable instanceof Measurement) {
+			List<Measurement> list = new ArrayList<>();
+			list.add((Measurement) contextDescribable);
+			dc.setMeasurements(list);
+			dc.setMeasured(contextMap);
+		}
+		return dc;
+	}
+
+	/**
+	 * 
+	 * Helping function to extract {@link Value} from context
+	 * 
+	 * @param contextType
+	 * @param componentName
+	 * @param typeRootMap
+	 * @param attributeName
+	 * @return
+	 */
+	private Value findValueInContext(ContextType contextType, String componentName,
+			Map<ContextType, ContextRoot> typeRootMap, String attributeName) {
+
+		ContextRoot contextRoot = typeRootMap.get(contextType);
+		if (contextRoot != null) {
+			List<ContextComponent> components = contextRoot.getContextComponents().stream()
+					.filter(cc -> cc.getName().equals(componentName)).collect(Collectors.toList());
+			if (components != null && !components.isEmpty()) {
+				return components.get(0).getValue(attributeName);
+			}
+		}
+		throw new MDMEntityAccessException(
+				"ContextComponent with name " + componentName + " not found in context of type " + contextType);
+	}
+
+	/**
+	 * 
+	 * @param remotePath
+	 * @param value
+	 * @return
+	 */
+	private FileLink extractFileLink(String remotePath, Value value) {
+		FileLink fileLink = null;
+		if (ValueType.FILE_LINK.equals(value.getValueType())) {
+			fileLink = value.extract(ValueType.FILE_LINK);
+		} else if (ValueType.FILE_LINK_SEQUENCE.equals(value.getValueType())) {
+			List<FileLink> fileLinks = Stream.of(value.extract(ValueType.FILE_LINK_SEQUENCE))
+					.filter(link -> link.getRemotePath().equals(remotePath)).collect(Collectors.toList());
+			fileLink = fileLinks.get(0);
+		}
+		return fileLink;
+	}
+
+	/**
+	 * Opens an {@code InputStream} for given {@link FileLink} and copies it to
+	 * {@param outputStream}.
+	 * 
+	 * @param sourceName      name of the source (MDM {@link Environment})
+	 * @param filesAttachable the {@link FilesAttachable} {@link Entity} the file is
+	 *                        attached to
+	 * @param fileLink        the {@link FileLink}
+	 * @param outputStream    the {link OutputStream}
+	 * @throws IOException Thrown if unable to provide as stream
+	 */
+	private void streamFileLink(String sourceName, Entity entity, FileLink fileLink, OutputStream outputStream)
+			throws IOException {
+
+		try (InputStream in = getFileService(sourceName).openStream(entity, fileLink)) {
+			ByteStreams.copy(in, outputStream);
+		}
+	}
+
+	/**
+	 * Helping function to load an {@link FileService}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment})
+	 * @return the {@link FileService}
+	 */
+	private FileService getFileService(String sourceName) {
+		ApplicationContext context = this.connectorService.getContextByName(sourceName);
+		return context.getFileService()
+				.orElseThrow(() -> new MDMFileAccessException("FileService not present in '" + sourceName + "'."));
+	}
+
+	/**
+	 * Helping function to load an {@link EntityManager}
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment})
+	 * @return the {@link EntityManager}
+	 */
+	private EntityManager getEntityManager(String sourceName) {
+		ApplicationContext context = this.connectorService.getContextByName(sourceName);
+		return context.getEntityManager()
+				.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present in '" + sourceName + "'."));
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/FilterParser.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/FilterParser.java
new file mode 100644
index 0000000..d85ef55
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/FilterParser.java
@@ -0,0 +1,486 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeParseException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.antlr.v4.runtime.ANTLRInputStream;
+import org.antlr.v4.runtime.BaseErrorListener;
+import org.antlr.v4.runtime.CommonTokenStream;
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.RecognitionException;
+import org.antlr.v4.runtime.Recognizer;
+import org.antlr.v4.runtime.misc.ParseCancellationException;
+import org.antlr.v4.runtime.tree.TerminalNode;
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.api.base.query.ComparisonOperator;
+import org.eclipse.mdm.api.base.query.Filter;
+import org.eclipse.mdm.businessobjects.filter.FilterGrammarBaseVisitor;
+import org.eclipse.mdm.businessobjects.filter.FilterGrammarLexer;
+import org.eclipse.mdm.businessobjects.filter.FilterGrammarParser;
+import org.eclipse.mdm.businessobjects.filter.FilterGrammarParser.AndExpressionContext;
+import org.eclipse.mdm.businessobjects.filter.FilterGrammarParser.AttributeContext;
+import org.eclipse.mdm.businessobjects.filter.FilterGrammarParser.ComparatorExpressionContext;
+import org.eclipse.mdm.businessobjects.filter.FilterGrammarParser.ListComparatorExpressionContext;
+import org.eclipse.mdm.businessobjects.filter.FilterGrammarParser.NotExpressionContext;
+import org.eclipse.mdm.businessobjects.filter.FilterGrammarParser.OrExpressionContext;
+import org.eclipse.mdm.businessobjects.filter.FilterGrammarParser.UnaryComparatorExpressionContext;
+import org.eclipse.mdm.businessobjects.filter.FilterGrammarParser.ValueContext;
+import org.eclipse.mdm.businessobjects.filter.FilterGrammarParser.ValuesContext;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import com.google.common.base.Strings;
+import com.google.common.primitives.Booleans;
+import com.google.common.primitives.Bytes;
+import com.google.common.primitives.Doubles;
+import com.google.common.primitives.Floats;
+import com.google.common.primitives.Ints;
+import com.google.common.primitives.Longs;
+import com.google.common.primitives.Shorts;
+
+/**
+ * Class for parsing filter strings.
+ * 
+ * @author Matthias Koller
+ *
+ */
+public class FilterParser {
+
+	private FilterParser() {
+	}
+
+	/**
+	 * Visitor class to convert the parsed tree into a {@link Filter}.
+	 */
+	private static final class FilterVisitor extends FilterGrammarBaseVisitor<Filter> {
+		private List<EntityType> availableEntityTypes;
+
+		/**
+		 * Constructs a new Visitor operating on the given search attributes.
+		 * 
+		 * @param availableEntityTypes List of {@link EntityType}s to match the parsed
+		 *                             attributes against.
+		 */
+		private FilterVisitor(List<EntityType> availableEntityTypes) {
+			this.availableEntityTypes = availableEntityTypes;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.mdm.businessobjects.filter.FilterGrammarBaseVisitor#
+		 * visitAndExpression(org.eclipse.mdm.businessobjects.filter.FilterGrammarParser
+		 * .AndExpressionContext)
+		 */
+		@Override
+		public Filter visitAndExpression(AndExpressionContext ctx) {
+			return Filter.and().merge(visit(ctx.left), visit(ctx.right));
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.mdm.businessobjects.filter.FilterGrammarBaseVisitor#
+		 * visitOrExpression(org.eclipse.mdm.businessobjects.filter.FilterGrammarParser.
+		 * OrExpressionContext)
+		 */
+		@Override
+		public Filter visitOrExpression(OrExpressionContext ctx) {
+			return Filter.or().merge(visit(ctx.left), visit(ctx.right));
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.mdm.businessobjects.filter.FilterGrammarBaseVisitor#
+		 * visitNotExpression(org.eclipse.mdm.businessobjects.filter.FilterGrammarParser
+		 * .NotExpressionContext)
+		 */
+		@Override
+		public Filter visitNotExpression(NotExpressionContext ctx) {
+			return super.visitNotExpression(ctx).invert();
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.mdm.businessobjects.filter.FilterGrammarBaseVisitor#
+		 * visitComparatorExpression(org.eclipse.mdm.businessobjects.filter.
+		 * FilterGrammarParser.ComparatorExpressionContext)
+		 */
+		@Override
+		public Filter visitComparatorExpression(ComparatorExpressionContext ctx) {
+			ComparisonOperator operator = getOperator(ctx.op);
+			Attribute attribute = getAttribute(ctx.left);
+			Object value = createConditionValue(attribute.getValueType(), getValue(ctx.right));
+
+			return Filter.and().add(operator.create(attribute, value));
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.mdm.businessobjects.filter.FilterGrammarBaseVisitor#
+		 * visitListComparatorExpression(org.eclipse.mdm.businessobjects.filter.
+		 * FilterGrammarParser.ListComparatorExpressionContext)
+		 */
+		@Override
+		public Filter visitListComparatorExpression(ListComparatorExpressionContext ctx) {
+			ComparisonOperator operator = getOperator(ctx.op);
+			Attribute attribute = getAttribute(ctx.left);
+			Object value = createConditionValues(attribute.getValueType(), getValues(ctx.right));
+
+			return Filter.and().add(operator.create(attribute, value));
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.mdm.businessobjects.filter.FilterGrammarBaseVisitor#
+		 * visitUnaryComparatorExpression(org.eclipse.mdm.businessobjects.filter.
+		 * FilterGrammarParser.UnaryComparatorExpressionContext)
+		 */
+		@Override
+		public Filter visitUnaryComparatorExpression(UnaryComparatorExpressionContext ctx) {
+			ComparisonOperator operator = getOperator(ctx.op);
+			Attribute attribute = getAttribute(ctx.left);
+			Object value = createConditionValue(attribute.getValueType(), null);
+
+			return Filter.and().add(operator.create(attribute, value));
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see
+		 * org.antlr.v4.runtime.tree.AbstractParseTreeVisitor#aggregateResult(java.lang.
+		 * Object, java.lang.Object)
+		 */
+		@Override
+		protected Filter aggregateResult(Filter aggregate, Filter nextResult) {
+			if (nextResult == null) {
+				return aggregate;
+			}
+			return super.aggregateResult(aggregate, nextResult);
+		}
+
+		/**
+		 * Extract a string from the given {@link ValueContext}. Basically this methods
+		 * returns a string representation of the value without enclosing quotes (if
+		 * there were any).
+		 * 
+		 * @param ctx {@link ValueContext} containing the parsed value.
+		 * @return string representation of the value given by {@link ValueContext}
+		 */
+		private String getValue(ValueContext ctx) {
+
+			TerminalNode typeNode = (TerminalNode) ctx.getChild(0);
+			switch (typeNode.getSymbol().getType()) {
+			case FilterGrammarLexer.STRINGLITERAL:
+				String str = ctx.STRINGLITERAL().getText();
+				if (!str.isEmpty() && str.charAt(0) == '\'') {
+					// replace leading and trailing ' and unescape '
+					return ctx.STRINGLITERAL().getText().replaceAll("(\\A')|('\\z)", "").replaceAll("\\\\'", "'");
+				} else if (!str.isEmpty() && str.charAt(0) == '\"') {
+					// replace leading and trailing " and unescape "
+					return ctx.STRINGLITERAL().getText().replaceAll("(\\A\")|(\"\\z)", "").replaceAll("\\\\\\\"", "\"");
+				} else {
+					return str;
+				}
+			case FilterGrammarLexer.DECIMAL:
+			case FilterGrammarLexer.LONG:
+			case FilterGrammarLexer.BOOL:
+				return ctx.getText();
+			default:
+				throw new RuntimeException("Unsupported Symbol: " + typeNode.getSymbol().getType());
+			}
+		}
+
+		/**
+		 * Extract a list string from the given {@link ValuesContext}. Basically this
+		 * methods returns a list of string representations of the values without
+		 * enclosing quotes (if there were any).
+		 * 
+		 * @param ctx {@link ValuesContext} containing the parsed values.
+		 * @return string representations of the values given by {@link ValuesContext}
+		 */
+		private List<String> getValues(ValuesContext ctx) {
+			List<String> values = new ArrayList<>();
+			for (org.antlr.v4.runtime.tree.ParseTree child : ctx.children) {
+				if (child instanceof ValueContext) {
+					values.add(getValue((ValueContext) child));
+				}
+			}
+			return values;
+		}
+
+		/**
+		 * Converts an {@link AttributeContext} into an {@link Attribute} using the list
+		 * of available EntityTypes.
+		 * 
+		 * @param ctx parsed entitytype / attribute
+		 * @return the matched {@link Attribute} given by {@link AttributeContext}
+		 * @throws IllegalArgumentException if {@link EntityType} or {@link Attribute}
+		 *                                  given by <code>ctx</code> cannot be found.
+		 */
+		private Attribute getAttribute(AttributeContext ctx) {
+			String[] name = ctx.getText().split("\\.");
+			return availableEntityTypes.stream().filter(e -> ServiceUtils.workaroundForTypeMapping(e).equals(name[0]))
+					.findAny()
+					.orElseThrow(() -> new IllegalArgumentException("Entity " + name[0] + " not found in data source!"))
+					.getAttribute(name[1]);
+		}
+
+		/**
+		 * Converts a {@link ParserRuleContext} containing a {@link TerminalNode} into a
+		 * {@link ComparisonOperator}.
+		 * 
+		 * @param ctx {@link UnaryComparatorExpressionContext},
+		 *            {@link ComparatorExpressionContext} or
+		 *            {@link ListComparatorExpressionContext} or
+		 * @return converted {@link ComparisonOperator}
+		 * @throws IllegalArgumentException if the operator given by <code>ctx</code> is
+		 *                                  unknown or cannot be converted.
+		 */
+		private ComparisonOperator getOperator(ParserRuleContext ctx) {
+			TerminalNode typeNode = (TerminalNode) ctx.getChild(0);
+			switch (typeNode.getSymbol().getType()) {
+			case FilterGrammarLexer.EQUAL:
+				return ComparisonOperator.EQUAL;
+			case FilterGrammarLexer.NOT_EQUAL:
+				return ComparisonOperator.NOT_EQUAL;
+			case FilterGrammarLexer.LESS_THAN:
+				return ComparisonOperator.LESS_THAN;
+			case FilterGrammarLexer.LESS_THAN_OR_EQUAL:
+				return ComparisonOperator.LESS_THAN_OR_EQUAL;
+			case FilterGrammarLexer.GREATER_THAN:
+				return ComparisonOperator.GREATER_THAN;
+			case FilterGrammarLexer.GREATER_THAN_OR_EQUAL:
+				return ComparisonOperator.GREATER_THAN_OR_EQUAL;
+			case FilterGrammarLexer.IN_SET:
+				return ComparisonOperator.IN_SET;
+			case FilterGrammarLexer.NOT_IN_SET:
+				return ComparisonOperator.NOT_IN_SET;
+			case FilterGrammarLexer.LIKE:
+				return ComparisonOperator.LIKE;
+			case FilterGrammarLexer.NOT_LIKE:
+				return ComparisonOperator.NOT_LIKE;
+			case FilterGrammarLexer.CASE_INSENSITIVE_EQUAL:
+				return ComparisonOperator.CASE_INSENSITIVE_EQUAL;
+			case FilterGrammarLexer.CASE_INSENSITIVE_NOT_EQUAL:
+				return ComparisonOperator.CASE_INSENSITIVE_NOT_EQUAL;
+			case FilterGrammarLexer.CASE_INSENSITIVE_LESS_THAN:
+				return ComparisonOperator.CASE_INSENSITIVE_LESS_THAN;
+			case FilterGrammarLexer.CASE_INSENSITIVE_LESS_THAN_OR_EQUAL:
+				return ComparisonOperator.CASE_INSENSITIVE_LESS_THAN_OR_EQUAL;
+			case FilterGrammarLexer.CASE_INSENSITIVE_GREATER_THAN:
+				return ComparisonOperator.CASE_INSENSITIVE_GREATER_THAN;
+			case FilterGrammarLexer.CASE_INSENSITIVE_GREATER_THAN_OR_EQUAL:
+				return ComparisonOperator.CASE_INSENSITIVE_GREATER_THAN_OR_EQUAL;
+			case FilterGrammarLexer.CASE_INSENSITIVE_IN_SET:
+				return ComparisonOperator.CASE_INSENSITIVE_IN_SET;
+			case FilterGrammarLexer.CASE_INSENSITIVE_NOT_IN_SET:
+				return ComparisonOperator.CASE_INSENSITIVE_NOT_IN_SET;
+			case FilterGrammarLexer.CASE_INSENSITIVE_LIKE:
+				return ComparisonOperator.CASE_INSENSITIVE_LIKE;
+			case FilterGrammarLexer.CASE_INSENSITIVE_NOT_LIKE:
+				return ComparisonOperator.CASE_INSENSITIVE_NOT_LIKE;
+			case FilterGrammarLexer.IS_NULL:
+				return ComparisonOperator.IS_NULL;
+			case FilterGrammarLexer.IS_NOT_NULL:
+				return ComparisonOperator.IS_NOT_NULL;
+			case FilterGrammarLexer.BETWEEN:
+				return ComparisonOperator.BETWEEN;
+			default:
+				throw new IllegalArgumentException(
+						"Operator " + typeNode.getSymbol().getType() + " not supported yet!");
+			}
+		}
+	}
+
+	/**
+	 * Class to convert a antlr syntax error into a unchecked
+	 * ParserCancellationException.
+	 */
+	private static class ThrowingErrorListener extends BaseErrorListener {
+
+		public static final ThrowingErrorListener INSTANCE = new ThrowingErrorListener();
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.antlr.v4.runtime.BaseErrorListener#syntaxError(org.antlr.v4.runtime.
+		 * Recognizer, java.lang.Object, int, int, java.lang.String,
+		 * org.antlr.v4.runtime.RecognitionException)
+		 */
+		@Override
+		public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine,
+				String msg, RecognitionException e) throws ParseCancellationException {
+			throw new ParseCancellationException("line " + line + ":" + charPositionInLine + " " + msg);
+		}
+	}
+
+	/**
+	 * Parses the given filter string. The filter string must conform to the ANTLR
+	 * grammer defined in FilterGrammar.g4.
+	 * 
+	 * @param possibleEntityTypes The possible {@link EntityType}s /
+	 *                            {@link Attribute}s
+	 * @param filterString        The filter string to parse.
+	 * @return the parsed {@link Filter}
+	 * @throws IllegalArgumentExceptionThrown if parsing fails.
+	 */
+	public static Filter parseFilterString(List<EntityType> possibleEntityTypes, String filterString)
+			throws IllegalArgumentException {
+
+		if (Strings.isNullOrEmpty(filterString)) {
+			return Filter.and();
+		}
+
+		try {
+			FilterGrammarLexer lexer = new FilterGrammarLexer(new ANTLRInputStream(filterString));
+			lexer.removeErrorListeners();
+			lexer.addErrorListener(ThrowingErrorListener.INSTANCE);
+
+			FilterGrammarParser parser = new FilterGrammarParser(new CommonTokenStream(lexer));
+			parser.removeErrorListeners();
+			parser.addErrorListener(ThrowingErrorListener.INSTANCE);
+
+			return new FilterVisitor(possibleEntityTypes).visit(parser.parse());
+		} catch (ParseCancellationException e) {
+			throw new IllegalArgumentException(
+					"Could not parse filter string '" + filterString + "'. Error: " + e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * Creates the value for the condition from the value given as string.
+	 * 
+	 * @param valueType     The type that the value should have.
+	 * @param valueAsString The value as string.
+	 * @return The created value for the condition.
+	 * @throws IllegalArgumentException Thrown if the value type is not supported
+	 */
+	private static Object createConditionValue(ValueType<?> valueType, String valueAsString) {
+		Object ret = null;
+		if (ValueType.BOOLEAN.equals(valueType)) {
+			ret = Boolean.valueOf(valueAsString);
+		} else if (ValueType.LONG.equals(valueType)) {
+			ret = Long.valueOf(valueAsString);
+		} else if (ValueType.STRING.equals(valueType)) {
+			ret = valueAsString;
+		} else if (ValueType.BYTE.equals(valueType)) {
+			ret = Byte.valueOf(valueAsString);
+		} else if (ValueType.DOUBLE.equals(valueType)) {
+			ret = Double.valueOf(valueAsString);
+		} else if (ValueType.FLOAT.equals(valueType)) {
+			ret = Float.valueOf(valueAsString);
+		} else if (ValueType.INTEGER.equals(valueType)) {
+			ret = Integer.valueOf(valueAsString);
+		} else if (ValueType.SHORT.equals(valueType)) {
+			ret = Short.valueOf(valueAsString);
+		} else if (ValueType.DATE.equals(valueType)) {
+			try {
+				ret = LocalDateTime.parse(valueAsString);
+			} catch (DateTimeParseException e) {
+				throw new IllegalArgumentException(
+						"Unsupported value for date: '" + valueAsString + "'. Expected format: '2007-12-03T10:15:30'");
+			}
+		} else {
+			throw new IllegalArgumentException("Unsupported value type: " + valueType.toString());
+		}
+		return ret;
+	}
+
+	/**
+	 * Creates the values for the condition from the values given in the list of
+	 * strings.
+	 * 
+	 * @param valueType      The type that the value should have.
+	 * @param valuesAsString The values as a list of string.
+	 * @return The created value for the condition.
+	 * @throws IllegalArgumentException Thrown if the value type is not supported
+	 */
+	private static Object createConditionValues(ValueType<?> valueType, List<String> valuesAsStrings) {
+
+		if (ValueType.BOOLEAN.equals(valueType)) {
+			List<Boolean> list = new ArrayList<>();
+			for (String valueAsString : valuesAsStrings) {
+				list.add(Boolean.valueOf(valueAsString));
+			}
+			return Booleans.toArray(list);
+		} else if (ValueType.LONG.equals(valueType)) {
+			List<Long> list = new ArrayList<>();
+			for (String valueAsString : valuesAsStrings) {
+				list.add(Long.valueOf(valueAsString));
+			}
+			return Longs.toArray(list);
+		} else if (ValueType.STRING.equals(valueType)) {
+			List<String> list = new ArrayList<>();
+			for (String valueAsString : valuesAsStrings) {
+				list.add(valueAsString);
+			}
+			return list.toArray(new String[0]);
+		} else if (ValueType.BYTE.equals(valueType)) {
+			List<Byte> list = new ArrayList<>();
+			for (String valueAsString : valuesAsStrings) {
+				list.add(Byte.valueOf(valueAsString));
+			}
+			return Bytes.toArray(list);
+		} else if (ValueType.DOUBLE.equals(valueType)) {
+			List<Double> list = new ArrayList<>();
+			for (String valueAsString : valuesAsStrings) {
+				list.add(Double.valueOf(valueAsString));
+			}
+			return Doubles.toArray(list);
+		} else if (ValueType.FLOAT.equals(valueType)) {
+			List<Float> list = new ArrayList<>();
+			for (String valueAsString : valuesAsStrings) {
+				list.add(Float.valueOf(valueAsString));
+			}
+			return Floats.toArray(list);
+		} else if (ValueType.INTEGER.equals(valueType)) {
+			List<Integer> list = new ArrayList<>();
+			for (String valueAsString : valuesAsStrings) {
+				list.add(Integer.valueOf(valueAsString));
+			}
+			return Ints.toArray(list);
+		} else if (ValueType.SHORT.equals(valueType)) {
+			List<Short> list = new ArrayList<>();
+			for (String valueAsString : valuesAsStrings) {
+				list.add(Short.valueOf(valueAsString));
+			}
+			return Shorts.toArray(list);
+		} else if (ValueType.DATE.equals(valueType)) {
+			List<LocalDateTime> list = new ArrayList<>();
+			for (String valueAsString : valuesAsStrings) {
+				try {
+					list.add(LocalDateTime.parse(valueAsString));
+				} catch (DateTimeParseException e) {
+					throw new IllegalArgumentException("Unsupported value for date: '" + valueAsString
+							+ "'. Expected format: '2007-12-03T10:15:30'");
+				}
+			}
+			return list.toArray(new LocalDateTime[0]);
+		} else {
+			throw new IllegalArgumentException("Unsupported value type: " + valueType.toString());
+		}
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/I18NActivity.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/I18NActivity.java
new file mode 100644
index 0000000..01f0a82
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/I18NActivity.java
@@ -0,0 +1,169 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.ServiceNotProvidedException;
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.ModelManager;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * I18NActivity Bean implementation to lookup localizations for business objects
+ * attributes and types
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Stateless
+public class I18NActivity {
+
+	private static final Logger LOG = LoggerFactory.getLogger(I18NActivity.class);
+
+	private String RESOURCE_FILE = "org/eclipse/mdm/businessobjects/control/i18n/locale/localization";
+	private ResourceBundle LOCALIZATION_RESOURCES = ResourceBundle.getBundle(RESOURCE_FILE);
+
+	@Inject
+	private ConnectorService connectorService;
+
+	/**
+	 * localizes all attributes names from a type (e.g. TestStep.class)
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param type       MDM business object type (e.g. TestStep.class)
+	 * @return a {@link Map} with localized {@link Attribute} names (key is
+	 *         attribute name, value is localized attribute name)
+	 */
+	public Map<Attribute, String> localizeAttributes(String sourceName, Class<? extends Entity> type) {
+
+		Map<Attribute, String> map = new HashMap<>();
+
+		ApplicationContext context = this.connectorService.getContextByName(sourceName);
+
+		EntityType entityType = lookupEntityType(context, type);
+		localizeAttributes(entityType, map);
+
+		return map;
+	}
+
+	/**
+	 * localizes the type name of the given type (e.g. TestStep.class)
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param type       type to localize its type name
+	 * @return the localizes type name (key is the original type name, value is the
+	 *         localized type name)
+	 */
+	public Map<EntityType, String> localizeType(String sourceName, Class<? extends Entity> type) {
+
+		Map<EntityType, String> map = new HashMap<>();
+
+		ApplicationContext context = this.connectorService.getContextByName(sourceName);
+		EntityType entityType = lookupEntityType(context, type);
+		localizeType(entityType, map);
+
+		return map;
+	}
+
+	/**
+	 * localizes all {@link Attribute}s of all types from the source identified by
+	 * the given soureName
+	 * 
+	 * @param sourceName source name to identify the MDM data source
+	 * @return a {@link Map} with localized {@link Attribute} names (key is
+	 *         attribute name, value is localized attribute name)
+	 */
+	public Map<Attribute, String> localizeAllAttributes(String sourceName) {
+
+		Map<Attribute, String> map = new HashMap<>();
+		ApplicationContext context = this.connectorService.getContextByName(sourceName);
+		List<EntityType> list = lookupAllEntityTypes(context);
+
+		for (EntityType entityType : list) {
+			localizeAttributes(entityType, map);
+		}
+
+		return map;
+	}
+
+	/**
+	 * localizes all types form the source identified by the given sourceName
+	 * 
+	 * @param sourceName source name to identify the MDM data source
+	 * @return the localizes type names (key is the original type name, value is the
+	 *         localized type name)
+	 */
+	public Map<EntityType, String> localizeAllTypes(String sourceName) {
+
+		Map<EntityType, String> map = new HashMap<>();
+		ApplicationContext context = this.connectorService.getContextByName(sourceName);
+		List<EntityType> list = lookupAllEntityTypes(context);
+
+		for (EntityType entityType : list) {
+			localizeType(entityType, map);
+		}
+
+		return map;
+	}
+
+	private void localizeType(EntityType entityType, Map<EntityType, String> map) {
+		String localization = localize(entityType.getName(), entityType.getName());
+		map.put(entityType, localization);
+	}
+
+	private void localizeAttributes(EntityType entityType, Map<Attribute, String> map) {
+
+		for (Attribute attribute : entityType.getAttributes()) {
+			String key = entityType.getName() + "." + attribute.getName();
+			String localization = localize(key, attribute.getName());
+			map.put(attribute, localization);
+		}
+
+	}
+
+	private EntityType lookupEntityType(ApplicationContext context, Class<? extends Entity> type) {
+		return context.getModelManager().map(mm -> mm.getEntityType(type))
+				.orElseThrow(() -> new ServiceNotProvidedException(ModelManager.class));
+	}
+
+	private List<EntityType> lookupAllEntityTypes(ApplicationContext context) {
+		return context.getModelManager().map(mm -> mm.listEntityTypes())
+				.orElseThrow(() -> new ServiceNotProvidedException(ModelManager.class));
+	}
+
+	private String localize(String key, String defaultValue) {
+		try {
+			return LOCALIZATION_RESOURCES.getString(key);
+		} catch (MissingResourceException e) {
+			LOG.debug("unable to localize key '" + key + "', no translation possible!");
+			return defaultValue;
+		}
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/MDMEntityAccessException.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/MDMEntityAccessException.java
new file mode 100644
index 0000000..0db40c3
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/MDMEntityAccessException.java
@@ -0,0 +1,29 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control;
+
+public class MDMEntityAccessException extends RuntimeException {
+
+	private static final long serialVersionUID = -4196754501456211418L;
+
+	public MDMEntityAccessException(String message) {
+		super(message);
+	}
+
+	public MDMEntityAccessException(String message, Throwable t) {
+		super(message, t);
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/MDMFileAccessException.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/MDMFileAccessException.java
new file mode 100644
index 0000000..4c25cfa
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/MDMFileAccessException.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+package org.eclipse.mdm.businessobjects.control;
+
+public class MDMFileAccessException extends RuntimeException {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -2670077604805809256L;
+
+	public MDMFileAccessException(String message) {
+		super(message);
+	}
+
+	public MDMFileAccessException(String message, Throwable t) {
+		super(message, t);
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/NavigationActivity.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/NavigationActivity.java
new file mode 100644
index 0000000..422fc05
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/NavigationActivity.java
@@ -0,0 +1,195 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control;
+
+import static java.util.Objects.requireNonNull;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.model.Pool;
+import org.eclipse.mdm.api.dflt.model.Project;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+
+/**
+ * NavigationActivity Bean implementation to lookup specified business object
+ * children
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Stateless
+public class NavigationActivity {
+
+	@Inject
+	private ConnectorService connectorService;
+
+	// here for cdi to work
+	public NavigationActivity() {
+
+	}
+
+	public NavigationActivity(ConnectorService connectorService) {
+		this.connectorService = requireNonNull(connectorService, "ConnectorService cannot be null!");
+	}
+
+	/**
+	 * returns the MDM {@link Environment} business objects of all connected MDM
+	 * systems
+	 * 
+	 * @return MDM {@link Environment} business objects
+	 */
+	public List<Environment> getEnvironments() {
+		try {
+			return this.connectorService.getContexts().stream().map(c -> c.getEntityManager())
+					.filter(Optional::isPresent).map(em -> em.get().loadEnvironment()).collect(Collectors.toList());
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * returns all MDM {@link Project} business objects of the connected MDM system
+	 * identified by the given name
+	 * 
+	 * @param sourceName Name of the MDM system
+	 * @return MDM {@link Project} business objects
+	 */
+	public List<Project> getProjects(String sourceName) {
+		try {
+			return this.connectorService.getContextByName(sourceName).getEntityManager()
+					.map(em -> em.loadAll(Project.class)).orElseThrow(() -> new MDMEntityAccessException(
+							"No EntityManager found for source " + sourceName + "!"));
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * returns all MDM {@link Test} business objects of the connected MDM system
+	 * identified by the given name
+	 * 
+	 * @param sourceName Name of the MDM system
+	 * @return MDM {@link Test} business objects
+	 */
+	public List<Test> getTests(String sourceName) {
+		try {
+			return this.connectorService.getContextByName(sourceName).getEntityManager()
+					.map(em -> em.loadAll(Test.class)).orElseThrow(() -> new MDMEntityAccessException(
+							"No EntityManager found for source " + sourceName + "!"));
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * returns all MDM {@link Test} business object children for a MDM {@link Pool}
+	 * identified by the given source name and {@link Pool} ID.
+	 * 
+	 * @param sourceName Name of the MDM system
+	 * @param poolID     The {@code Pool} instance ID
+	 * @return MDM {@link Test} business objects
+	 */
+	public List<Test> getTests(String sourceName, String poolID) {
+		return getChildren(sourceName, Pool.class, poolID, Test.class);
+	}
+
+	/**
+	 * returns all MDM {@link Pool} business object children for a MDM
+	 * {@link Project} identified by the given source name and {@link Project} ID.
+	 * 
+	 * @param sourceName Name of the MDM system
+	 * @param projectID  The {@code Project} instance ID
+	 * @return MDM {@link Pool} business objects
+	 */
+	public List<Pool> getPools(String sourceName, String projectID) {
+		return getChildren(sourceName, Project.class, projectID, Pool.class);
+	}
+
+	/**
+	 * returns all MDM {@link TestStep} business object children for a MDM
+	 * {@link Test} identified by the given source name and {@link Test} ID.
+	 * 
+	 * @param sourceName Name of the MDM system
+	 * @param testID     The {@code Test} instance ID
+	 * @return MDM {@link TestStep} business objects
+	 */
+	public List<TestStep> getTestSteps(String sourceName, String testID) {
+		return getChildren(sourceName, Test.class, testID, TestStep.class);
+	}
+
+	/**
+	 * returns all MDM {@link Measurement} business object children for a MDM
+	 * {@link TestStep} identified by the given source name and {@link TestStep} ID.
+	 * 
+	 * @param sourceName Name of the MDM system
+	 * @param testStepID The {@code TestStep} instance ID
+	 * @return MDM {@link Measurement} business objects
+	 */
+	public List<Measurement> getMeasurements(String sourceName, String testStepID) {
+		return getChildren(sourceName, TestStep.class, testStepID, Measurement.class);
+	}
+
+	/**
+	 * returns all MDM {@link ChannelGroup} business object children for a MDM
+	 * {@link Measurement} identified by the given source name and
+	 * {@link Measurement} ID.
+	 * 
+	 * @param sourceName    Name of the MDM system
+	 * @param measurementID The {@code Measurement} instance ID
+	 * @return MDM {@link ChannelGroup} business objects
+	 */
+	public List<ChannelGroup> getChannelGroups(String sourceName, String measurementID) {
+		return getChildren(sourceName, Measurement.class, measurementID, ChannelGroup.class);
+	}
+
+	/**
+	 * returns all MDM {@link Channel} business object children for a MDM
+	 * {@link ChannelGroup} identified by the given source name and
+	 * {@link ChannelGroup} ID.
+	 * 
+	 * @param sourceName     Name of the MDM system
+	 * @param channelGroupID The {@code ChannelGroup} instance ID
+	 * @return MDM {@link Channel} business objects
+	 */
+	public List<Channel> getChannels(String sourceName, String channelGroupID) {
+		return getChildren(sourceName, ChannelGroup.class, channelGroupID, Channel.class);
+	}
+
+	private <T extends Entity> List<T> getChildren(String sourceName, Class<? extends Entity> parentType,
+			String parentID, Class<T> childType) {
+		try {
+			return this.connectorService.getContextByName(sourceName).getEntityManager()
+					.map(em -> em.loadChildren(em.load(parentType, parentID), childType))
+					.orElseThrow(() -> new MDMEntityAccessException(
+							"No EntityManager found for source " + sourceName + "!"));
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/SearchActivity.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/SearchActivity.java
new file mode 100644
index 0000000..282a869
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/SearchActivity.java
@@ -0,0 +1,155 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control;
+
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+import javax.ejb.SessionContext;
+import javax.ejb.Stateless;
+import javax.mail.search.SearchException;
+
+import org.eclipse.mdm.api.base.ServiceNotProvidedException;
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.base.query.Filter;
+import org.eclipse.mdm.api.base.query.FilterItem;
+import org.eclipse.mdm.api.base.search.SearchService;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.entity.SearchDefinition;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+/**
+ * SearchActivity Bean for searching business object and managing search
+ * definitions
+ *
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Stateless
+public class SearchActivity {
+
+	@Resource
+	private SessionContext sessionContext;
+
+	/**
+	 * lists available global and user specific search definitions
+	 *
+	 * @return available global and user specific search definitions
+	 * @throws SearchException if an error occurs during lookup available search
+	 *                         definitions
+	 */
+	public List<SearchDefinition> listSearchDefinitions() {
+		Principal principal = sessionContext.getCallerPrincipal();
+		SearchDefinitionReader scReader = new SearchDefinitionReader(principal);
+		return scReader.readSearchDefinitions();
+	}
+
+	/**
+	 * lists the available search attributes for the given result type.
+	 * 
+	 * @param resultType The result type.
+	 * @return The available search attributes.
+	 */
+	public <T extends Entity> List<SearchAttribute> listAvailableAttributes(ApplicationContext context,
+			Class<T> resultType) {
+
+		SearchService searchService = context.getSearchService()
+				.orElseThrow(() -> new MDMEntityAccessException("SearchService not found!"));
+
+		try {
+			List<SearchAttribute> searchAttributes = new ArrayList<>();
+			List<EntityType> entityTypes = searchService.listEntityTypes(resultType);
+
+			for (EntityType entityType : entityTypes) {
+				for (Attribute attr : entityType.getAttributes()) {
+					searchAttributes.add(new SearchAttribute(ServiceUtils.workaroundForTypeMapping(entityType),
+							attr.getName(), attr.getValueType().toString(), "*"));
+				}
+			}
+			return searchAttributes;
+
+		} catch (IllegalArgumentException e) {
+			return new ArrayList<>();
+		}
+	}
+
+	/**
+	 * executes a search using the given filter and returns the search result
+	 *
+	 * @param resultType   business object type of the search results
+	 * @param filterString filter for the search request
+	 * @return the found business objects
+	 */
+	public <T extends Entity> List<T> search(ApplicationContext context, Class<T> resultType, String filterString) {
+		try {
+			SearchService searchService = context.getSearchService()
+					.orElseThrow(() -> new ServiceNotProvidedException(SearchService.class));
+			List<EntityType> searchable = searchService.listEntityTypes(resultType);
+			Filter filter = FilterParser.parseFilterString(searchable, filterString);
+			List<Attribute> attributesList = getAttributeListFromFilter(filter);
+			return searchService.fetch(resultType, attributesList, filter);
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	private List<Attribute> getAttributeListFromFilter(Filter filter) {
+
+		List<Attribute> attributeList = new ArrayList<>();
+		Iterator<FilterItem> fIterator = filter.iterator();
+		while (fIterator.hasNext()) {
+			FilterItem filterItem = fIterator.next();
+			if (filterItem.isCondition()) {
+				attributeList.add(filterItem.getCondition().getAttribute());
+			}
+		}
+
+		return attributeList;
+	}
+
+	/**
+	 * executes a free textsearch
+	 *
+	 * @param query the query given to the search
+	 * @return the found business objects
+	 */
+	public List<Entity> search(ApplicationContext context, String query) {
+		try {
+			SearchService searchService = context.getSearchService()
+					.orElseThrow(() -> new ServiceNotProvidedException(SearchService.class));
+			List<Entity> allEntities = new ArrayList<>();
+
+			if (searchService.isTextSearchAvailable()) {
+				Map<Class<? extends Entity>, List<Entity>> fetch = searchService.fetch(query);
+				for (List<Entity> entities : fetch.values()) {
+					allEntities.addAll(entities);
+				}
+			}
+
+			return allEntities;
+		} catch (DataAccessException e) {
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/SearchDefinitionReader.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/SearchDefinitionReader.java
new file mode 100644
index 0000000..ade2bbe
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/SearchDefinitionReader.java
@@ -0,0 +1,215 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.mail.search.SearchException;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.eclipse.mdm.businessobjects.entity.SearchDefinition;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+/**
+ * SearchDefinitionReader class to read {@link SearchDefinition}s from an XML
+ * files
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+public class SearchDefinitionReader {
+
+	private static final String ROOT_ELEMENT_NAME = "mdm_search_definition";
+	private static final String ROOT_ELEMENT_ATTR_NAME = "name";
+	private static final String ROOT_ELEMENT_ATTR_RESULT = "resultType";
+	private static final String ATTRIBUTE_GROUP_ELEMENT = "attributes";
+	private static final String ATTRIBUTE_ELEMENT = "attribute";
+	private static final String ATTRIBUTE_ELEMENT_ATTR_TYPE = "boType";
+	private static final String ATTRIBUTE_ELEMENT_ATTR_VALUENAME = "attrName";
+	private static final String ATTRIBUTE_ELEMENT_ATTR_VALUETYPE = "valueType";
+	private static final String ATTRIBUTE_ELEMENT_ATTR_CRITERIA = "criteria";
+
+	private static final String COMPONENT_CONFIG_ROOT_FOLDER = "org.eclipse.mdm.search";
+
+	private final Principal principal;
+
+	private static final Logger LOG = LoggerFactory.getLogger(SearchDefinitionReader.class);
+
+	/**
+	 * Constructor
+	 * 
+	 * @param principal the current principal to load user specific search
+	 *                  definition if available
+	 */
+	public SearchDefinitionReader(Principal principal) {
+		this.principal = principal;
+	}
+
+	/**
+	 * reads the {@link SearchDefinition}s from a available {@link SearchDefinition}
+	 * XML files
+	 * 
+	 * @return the read {@link SearchDefinition}s
+	 * 
+	 * @throws SearchException if an error occurs during reading the
+	 *                         {@link SearchException}s from the XML files
+	 */
+	public List<SearchDefinition> readSearchDefinitions() {
+
+		List<SearchDefinition> searchDefinitionList = new ArrayList<>();
+		List<File> files = listSearchDefinitionFiles();
+
+		for (File file : files) {
+			searchDefinitionList.add(readSearchDefinitionFile(file));
+		}
+
+		return searchDefinitionList;
+	}
+
+	private SearchDefinition readSearchDefinitionFile(File file) {
+
+		InputStream is = null;
+
+		try {
+
+			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+			DocumentBuilder db = dbf.newDocumentBuilder();
+
+			is = new BufferedInputStream(new FileInputStream(file));
+			Document doc = db.parse(is);
+			Element root = doc.getDocumentElement();
+			if (!root.getNodeName().equalsIgnoreCase(ROOT_ELEMENT_NAME)) {
+				String message = "unable to find root element with name '" + ROOT_ELEMENT_NAME + "'";
+				throw new XMLFormatException(message);
+			}
+
+			String name = readElementAttribute(ROOT_ELEMENT_ATTR_NAME, "", true, root);
+			String resultType = readElementAttribute(ROOT_ELEMENT_ATTR_RESULT, "", true, root);
+
+			SearchDefinition searchDefinition = new SearchDefinition(name, resultType);
+
+			Element[] attributeGroups = getChildElementsByName(root, ATTRIBUTE_GROUP_ELEMENT, true);
+			for (Element attributeGroup : attributeGroups) {
+				Element[] attributes = getChildElementsByName(attributeGroup, ATTRIBUTE_ELEMENT, true);
+				for (Element attribute : attributes) {
+					String boType = readElementAttribute(ATTRIBUTE_ELEMENT_ATTR_TYPE, "", true, attribute);
+					String attrName = readElementAttribute(ATTRIBUTE_ELEMENT_ATTR_VALUENAME, "", true, attribute);
+					String valueType = readElementAttribute(ATTRIBUTE_ELEMENT_ATTR_VALUETYPE, "", true, attribute);
+					String criteria = readElementAttribute(ATTRIBUTE_ELEMENT_ATTR_CRITERIA, "*", false, attribute);
+					searchDefinition.addSearchAttribute(boType, attrName, valueType, criteria);
+				}
+			}
+			return searchDefinition;
+
+		} catch (ParserConfigurationException | SAXException | IOException e) {
+			throw new XMLParseException(e.getMessage(), e);
+		} finally {
+			closeInputStream(is);
+		}
+	}
+
+	private Element[] getChildElementsByName(Element element, String name, boolean mandatory) {
+
+		List<Element> elements = new ArrayList<Element>();
+
+		NodeList childNodes = element.getChildNodes();
+		for (int i = 0; i < childNodes.getLength(); i++) {
+			Node node = childNodes.item(i);
+			if (node.getNodeType() == Node.ELEMENT_NODE && node.getNodeName().equalsIgnoreCase(name)) {
+				elements.add((Element) node);
+			}
+		}
+
+		if (mandatory && elements.size() <= 0) {
+			String message = "mandatory element '" + name + "' not found!";
+			throw new XMLFormatException(message);
+		}
+
+		return elements.toArray(new Element[elements.size()]);
+	}
+
+	private String readElementAttribute(String attrName, String defaultValue, boolean mandatory, Element element) {
+
+		String value = element.getAttribute(attrName);
+		if (value.trim().length() <= 0) {
+			if (mandatory) {
+				String elementName = element.getNodeName();
+				String message = "mandatory attribute '" + attrName + "' at element '" + elementName + "' is missing!";
+				throw new XMLFormatException(message);
+			}
+			value = defaultValue;
+		}
+		return value;
+	}
+
+	private List<File> listSearchDefinitionFiles() {
+
+		List<File> files = new ArrayList<>();
+
+		File globalFolder = new File(COMPONENT_CONFIG_ROOT_FOLDER);
+		if (!globalFolder.exists() || !globalFolder.isDirectory()) {
+			return Collections.emptyList();
+		}
+		files.addAll(listSearchDefinitionFiles(globalFolder));
+
+		File userFolder = new File(globalFolder, this.principal.getName());
+		if (userFolder.exists() && userFolder.isDirectory()) {
+			files.addAll(listSearchDefinitionFiles(userFolder));
+		}
+
+		return files;
+	}
+
+	private List<File> listSearchDefinitionFiles(File rootFolder) {
+		List<File> list = new ArrayList<>();
+		File[] files = rootFolder.listFiles();
+		for (File file : files) {
+			if (file.isDirectory()) {
+				continue;
+			}
+			if (file.getName().toLowerCase().endsWith(".xml")) {
+				list.add(file);
+			}
+		}
+		return list;
+	}
+
+	private void closeInputStream(InputStream is) {
+		try {
+			if (is != null) {
+				is.close();
+			}
+		} catch (IOException e) {
+			LOG.error(e.getMessage());
+		}
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/SearchFilterBuilder.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/SearchFilterBuilder.java
new file mode 100644
index 0000000..7628b2e
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/SearchFilterBuilder.java
@@ -0,0 +1,112 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.mdm.api.base.query.Condition;
+import org.eclipse.mdm.api.base.query.Filter;
+
+/**
+ * Filter builder.
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+public class SearchFilterBuilder {
+
+	private static final String AND = "and";
+	private static final String OR = "or";
+
+	private List<Object> filterElements = new ArrayList<>();
+	private List<Filter> filterList = new ArrayList<>();
+	private String currentFilterType = null;
+	private Filter currentFilter = null;
+
+	/**
+	 * Adds a condition
+	 * 
+	 * @param condition
+	 */
+	public void addCondition(Condition condition) {
+		filterElements.add(condition);
+	}
+
+	/**
+	 * Adds a and operator.
+	 */
+	public void addAnd() {
+		filterElements.add(AND);
+	}
+
+	/**
+	 * Adds an or operator.
+	 */
+	public void addOr() {
+		filterElements.add(OR);
+	}
+
+	/**
+	 * Creates the filter.
+	 * 
+	 * @return The created filter.
+	 */
+	public Filter build() {
+		for (int i = 0; i < filterElements.size(); i++) {
+			if (filterElements.get(i) instanceof Condition) {
+				if (currentFilter == null) {
+					createNextFilter(i);
+				}
+				if (filterElements.size() > (i + 1) && AND.equals(currentFilterType)
+						&& OR.equals(filterElements.get(i + 1))) {
+					filterList.add(currentFilter);
+					currentFilter = Filter.or();
+					currentFilterType = OR;
+				}
+				currentFilter.add((Condition) filterElements.get(i));
+			} else {
+				if (currentFilterType != filterElements.get(i)) {
+					filterList.add(currentFilter);
+					currentFilterType = (String) filterElements.get(i);
+					currentFilter = null;
+				}
+			}
+		}
+		if (currentFilter != null) {
+			filterList.add(currentFilter);
+		}
+		return Filter.and().merge(filterList);
+	}
+
+	/**
+	 * Create the next filter.
+	 * 
+	 * @param index The current filter element index.
+	 * @return The created filter.
+	 */
+	private Filter createNextFilter(int index) {
+		if (filterElements.size() > (index + 1)) {
+			currentFilter = AND.equals((String) filterElements.get(index + 1)) ? Filter.and() : Filter.or();
+			currentFilterType = (String) filterElements.get(index + 1);
+		} else if (AND.equals(currentFilterType)) {
+			currentFilter = Filter.and();
+		} else {
+			currentFilter = Filter.or();
+		}
+		return null;
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/XMLFormatException.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/XMLFormatException.java
new file mode 100644
index 0000000..b2de972
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/XMLFormatException.java
@@ -0,0 +1,29 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control;
+
+public class XMLFormatException extends RuntimeException {
+
+	private static final long serialVersionUID = -4196754501456211418L;
+
+	public XMLFormatException(String message) {
+		super(message);
+	}
+
+	public XMLFormatException(String message, Throwable t) {
+		super(message, t);
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/XMLParseException.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/XMLParseException.java
new file mode 100644
index 0000000..0132a4e
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/control/XMLParseException.java
@@ -0,0 +1,29 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control;
+
+public class XMLParseException extends RuntimeException {
+
+	private static final long serialVersionUID = -4196754501456211418L;
+
+	public XMLParseException(String message) {
+		super(message);
+	}
+
+	public XMLParseException(String message, Throwable t) {
+		super(message, t);
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/ContextCollection.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/ContextCollection.java
new file mode 100644
index 0000000..c77c2f6
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/ContextCollection.java
@@ -0,0 +1,92 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.entity;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.mdm.api.base.model.ContextComponent;
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextType;
+
+/**
+ * ContextCollection (Entity for context data (ordered and measured))
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+public class ContextCollection {
+
+	// consistent naming to ContextActivity.CONTEXT_GROUP_MEASURED
+	public Map<ContextType, List<MDMContextEntity>> measured = new HashMap<>();
+	// consistent naming to ContextActivity.CONTEXT_GROUP_ORDERED
+	public Map<ContextType, List<MDMContextEntity>> ordered = new HashMap<>();
+
+	/**
+	 * set the measured context data map
+	 * 
+	 * @param contextMap the measured context data map
+	 */
+	public void setMeasured(Map<ContextType, ContextRoot> contextMap) {
+
+		for (java.util.Map.Entry<ContextType, ContextRoot> setEntry : contextMap.entrySet()) {
+
+			ContextType contextType = setEntry.getKey();
+			ContextRoot contextRoot = setEntry.getValue();
+
+			this.measured.put(contextType, new ArrayList<>());
+
+			for (ContextComponent contextComponent : contextRoot.getContextComponents()) {
+				MDMContextEntity entity = new MDMContextEntity(contextComponent);
+				this.measured.get(contextType).add(entity);
+			}
+
+			// sort by SortIndex
+			Collections.sort(this.measured.get(contextType), Comparator.comparing(MDMContextEntity::getSortIndex,
+					Comparator.nullsFirst(Comparator.naturalOrder())));
+
+		}
+	}
+
+	/**
+	 * sets the ordered context data map
+	 * 
+	 * @param contextMap the ordered context data map
+	 */
+	public void setOrdered(Map<ContextType, ContextRoot> contextMap) {
+
+		for (java.util.Map.Entry<ContextType, ContextRoot> setEntry : contextMap.entrySet()) {
+
+			ContextType contextType = setEntry.getKey();
+			ContextRoot contextRoot = setEntry.getValue();
+
+			this.ordered.put(contextType, new ArrayList<>());
+
+			for (ContextComponent contextComponent : contextRoot.getContextComponents()) {
+				MDMContextEntity entity = new MDMContextEntity(contextComponent);
+				this.ordered.get(contextType).add(entity);
+			}
+
+			// sort by SortIndex
+			Collections.sort(this.ordered.get(contextType), Comparator.comparing(MDMContextEntity::getSortIndex,
+					Comparator.nullsFirst(Comparator.naturalOrder())));
+		}
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/ContextResponse.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/ContextResponse.java
new file mode 100644
index 0000000..3c84f90
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/ContextResponse.java
@@ -0,0 +1,73 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.entity;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.control.ContextActivity;
+import org.eclipse.mdm.businessobjects.service.DescribableContexts;
+
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class ContextResponse {
+
+	/** transferable data content */
+	private List<ContextCollection> data;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param contextMap map with context data (ordered and measured)
+	 */
+	public ContextResponse(Map<String, Map<ContextType, ContextRoot>> contextMap) {
+		this.data = new ArrayList<>();
+		ContextCollection contextData = new ContextCollection();
+		contextData.setOrdered(contextMap.get(ContextActivity.CONTEXT_GROUP_ORDERED));
+		contextData.setMeasured(contextMap.get(ContextActivity.CONTEXT_GROUP_MEASURED));
+		this.data.add(contextData);
+	}
+
+	/**
+	 * Constructor
+	 * 
+	 * @param context {@link DescribableContexts} holding the context data (ordered
+	 *                and measured)
+	 */
+	public ContextResponse(DescribableContexts context) {
+		this.data = new ArrayList<>();
+		ContextCollection contextData = new ContextCollection();
+		contextData.setOrdered(context.getOrderedContext());
+		contextData.setMeasured(context.getMeasuredContext());
+		this.data.add(contextData);
+	}
+
+	/**
+	 * returns the context data
+	 * 
+	 * @return the context data
+	 */
+	public List<ContextCollection> getData() {
+		return Collections.unmodifiableList(this.data);
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/ContextSensorCollection.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/ContextSensorCollection.java
new file mode 100644
index 0000000..b03df0c
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/ContextSensorCollection.java
@@ -0,0 +1,61 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.entity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.mdm.api.base.model.ContextSensor;
+
+/**
+ * ContextSensorCollection (Entity for context data (ordered and measured))
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+public class ContextSensorCollection {
+
+	// consistent naming to ContextActivity.CONTEXT_SENSOR_GROUP_MEASURED
+	public List<MDMEntity> sensor_measured = new ArrayList<>();
+	// consistent naming to ContextActivity.CONTEXT_SENSOR_GROUP_ORDERED
+	public List<MDMEntity> sensor_ordered = new ArrayList<>();
+
+	/**
+	 * set the measured context sensor data list
+	 * 
+	 * @param sensorList the measured context sensor data list
+	 */
+	public void setMeasuredSensorContext(List<ContextSensor> sensorList) {
+
+		for (ContextSensor contextSensor : sensorList) {
+			MDMEntity entity = new MDMEntity(contextSensor);
+			this.sensor_measured.add(entity);
+		}
+	}
+
+	/**
+	 * set the ordered context sensor data list
+	 * 
+	 * @param sensorList the ordered context sensor data list
+	 */
+	public void setOrderedSensorContext(List<ContextSensor> sensorList) {
+
+		for (ContextSensor contextSensor : sensorList) {
+			MDMEntity entity = new MDMEntity(contextSensor);
+			this.sensor_ordered.add(entity);
+		}
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/ContextSensorResponse.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/ContextSensorResponse.java
new file mode 100644
index 0000000..5a7f1ce
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/ContextSensorResponse.java
@@ -0,0 +1,61 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.entity;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.eclipse.mdm.api.base.model.ContextSensor;
+import org.eclipse.mdm.businessobjects.control.ContextActivity;
+
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class ContextSensorResponse {
+
+	/** transferable data content */
+	private List<ContextSensorCollection> data;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param contextMap map with context data (ordered and measured)
+	 */
+	public ContextSensorResponse(Map<String, List<ContextSensor>> sensorMap) {
+		this.data = new ArrayList<>();
+		ContextSensorCollection contextSensorData = new ContextSensorCollection();
+		if (sensorMap.containsKey(ContextActivity.CONTEXT_SENSOR_GROUP_ORDERED)) {
+			contextSensorData.setOrderedSensorContext(sensorMap.get(ContextActivity.CONTEXT_SENSOR_GROUP_ORDERED));
+		}
+		if (sensorMap.containsKey(ContextActivity.CONTEXT_SENSOR_GROUP_MEASURED)) {
+			contextSensorData.setMeasuredSensorContext(sensorMap.get(ContextActivity.CONTEXT_SENSOR_GROUP_MEASURED));
+		}
+		this.data.add(contextSensorData);
+	}
+
+	/**
+	 * returns the {@link ContextSensor} data
+	 * 
+	 * @return the {@link ContextSensor} data
+	 */
+	public List<ContextSensorCollection> getData() {
+		return Collections.unmodifiableList(this.data);
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/FileSize.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/FileSize.java
new file mode 100644
index 0000000..b51e881
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/FileSize.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+package org.eclipse.mdm.businessobjects.entity;
+
+import java.io.Serializable;
+
+public class FileSize implements Serializable {
+
+	private static final long serialVersionUID = 1228535240780890498L;
+	
+	private String remotePath;
+	private String size;
+	
+	public FileSize() {
+		// intentially empty
+	}
+	
+	/**
+	 * 
+	 * @return
+	 */
+	public String getRemotePath() {
+		return remotePath;
+	}
+	
+	/**
+	 * 
+	 * @param remotePath
+	 */
+	public void setRemotePath(String remotePath) {
+		this.remotePath = remotePath;
+	}
+	
+	/**
+	 * 
+	 * @return
+	 */
+	public String getSize() {
+		return size;
+	}
+	
+	/**
+	 * 
+	 * @param size
+	 */
+	public void setSize(String size) {
+		this.size = size;
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/I18NLocalization.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/I18NLocalization.java
new file mode 100644
index 0000000..5c98e98
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/I18NLocalization.java
@@ -0,0 +1,49 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.entity;
+
+/**
+ * ContextData (Entity for I18N localizations (with original name and localized
+ * name)
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+public class I18NLocalization {
+
+	/** name of the attribute */
+	private final String name;
+	/** localized name of the attribute */
+	private final String localizedName;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param name          name of the attribute
+	 * @param localizedName name of the localized attribute
+	 */
+	public I18NLocalization(String name, String localizedName) {
+		this.name = name;
+		this.localizedName = localizedName;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public String getLocalizedName() {
+		return this.localizedName;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/I18NResponse.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/I18NResponse.java
new file mode 100644
index 0000000..3ecdd96
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/I18NResponse.java
@@ -0,0 +1,85 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.entity;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+
+/**
+ * I18NResponse (Container for {@link I18NLocalization}s)
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class I18NResponse {
+
+	/** transferable data content */
+	private final List<I18NLocalization> data;
+
+	/**
+	 * 
+	 * @param localizedEntityTypeMap
+	 * @param localizedAttributeMap
+	 */
+	public I18NResponse(Map<EntityType, String> localizedEntityTypeMap, Map<Attribute, String> localizedAttributeMap) {
+		this.data = toTransferable(localizedEntityTypeMap, localizedAttributeMap);
+	}
+
+	public List<I18NLocalization> getData() {
+		return Collections.unmodifiableList(this.data);
+	}
+
+	private List<I18NLocalization> toTransferable(Map<EntityType, String> localizedEntityTypeMap,
+			Map<Attribute, String> localizedAttributeMap) {
+
+		List<I18NLocalization> localizationList = new ArrayList<>();
+
+		Set<Entry<EntityType, String>> entityTypeSet = localizedEntityTypeMap.entrySet();
+
+		for (Entry<EntityType, String> entry : entityTypeSet) {
+
+			EntityType entityType = entry.getKey();
+			String key = entityType.getName();
+
+			localizationList.add(new I18NLocalization(key, entry.getValue()));
+		}
+
+		Set<Entry<Attribute, String>> attributeSet = localizedAttributeMap.entrySet();
+
+		for (Entry<Attribute, String> entry : attributeSet) {
+
+			Attribute attribute = entry.getKey();
+			EntityType entityType = attribute.getEntityType();
+			String key = entityType.getName() + "." + attribute.getName();
+
+			localizationList.add(new I18NLocalization(key, entry.getValue()));
+		}
+
+		return localizationList;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMAttribute.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMAttribute.java
new file mode 100644
index 0000000..aa3bc98
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMAttribute.java
@@ -0,0 +1,83 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.entity;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+/**
+ * Attribute (Entity for attribute informations)
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Schema(description = "Representation of a MDM attribute")
+public class MDMAttribute {
+
+	/** name of the attribute value */
+	private final String name;
+	/** value of the attribute value */
+	private final Object value;
+	/** unit of the attribute value */
+	private final String unit;
+	/** data type of the attribute value */
+	private final String dataType;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param name     name of the attribute value
+	 * @param value    string value of the attribute value
+	 * @param unit     unit of the attribute value
+	 * @param dataType data type of the attribute value
+	 */
+	public MDMAttribute(String name, Object value, String unit, String dataType) {
+		this.name = name;
+		this.value = value;
+		this.unit = unit;
+		this.dataType = dataType;
+	}
+
+	/**
+	 * Copy constructor
+	 * 
+	 * @param attribute attribute to copy
+	 */
+	public MDMAttribute(MDMAttribute attribute) {
+		this.name = attribute.getName();
+		this.value = attribute.getValue();
+		this.unit = attribute.getUnit();
+		this.dataType = attribute.getDataType();
+	}
+
+	@Schema(description = "name of the attribute")
+	public String getName() {
+		return this.name;
+	}
+
+	@Schema(description = "value of the attribute")
+	public Object getValue() {
+		return this.value;
+	}
+
+	@Schema(description = "unit of the attribute value")
+	public String getUnit() {
+		return this.unit;
+	}
+
+	@Schema(description = "data of the attribute", example = "FLOAT_SEQUENCE")
+	public String getDataType() {
+		return this.dataType;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMContextAttribute.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMContextAttribute.java
new file mode 100644
index 0000000..932c358
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMContextAttribute.java
@@ -0,0 +1,78 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.entity;
+
+/**
+ * Attribute (Entity for attribute information)
+ *
+ * @author Juergen Kleck, Peak Solution GmbH
+ *
+ */
+public class MDMContextAttribute extends MDMAttribute {
+
+	/** The sort index of the template */
+	private final Integer sortIndex;
+	/** boolean flag if this attribute is readonly or writeable in edit mode */
+	private final Boolean readOnly;
+	/** boolean flag if this attribute is optional in edit mode */
+	private final Boolean optional;
+	/** description text of this attribute */
+	private final String description;
+
+	/**
+	 * Constructor
+	 *
+	 * @param name      name of the attribute value
+	 * @param value     value of the attribute value
+	 * @param unit      unit of the attribute value
+	 * @param dataType  data type of the attribute value
+	 * @param sortIndex optional sort index of the attribute value
+	 * @param readOnly  optional flag if it is readonly in edit mode
+	 * @param optional  optional flag if it is optinal in edit mode
+	 */
+	public MDMContextAttribute(String name, Object value, String unit, String dataType, Integer sortIndex,
+			Boolean readOnly, Boolean optional, String description) {
+		super(name, value, unit, dataType);
+		this.sortIndex = sortIndex;
+		this.readOnly = readOnly;
+		this.optional = optional;
+		this.description = description;
+	}
+
+	public MDMContextAttribute(MDMAttribute attribute, Integer sortIndex, Boolean readOnly, Boolean optinal,
+			String description) {
+		super(attribute);
+		this.sortIndex = sortIndex;
+		this.readOnly = readOnly;
+		this.optional = optinal;
+		this.description = description;
+	}
+
+	public Integer getSortIndex() {
+		return sortIndex;
+	}
+
+	public Boolean getReadOnly() {
+		return readOnly;
+	}
+
+	public Boolean isOptional() {
+		return optional;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMContextEntity.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMContextEntity.java
new file mode 100644
index 0000000..58a5184
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMContextEntity.java
@@ -0,0 +1,168 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.entity;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.eclipse.mdm.api.base.model.BaseEntity;
+import org.eclipse.mdm.api.base.model.ContextComponent;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Sortable;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.dflt.model.TemplateAttribute;
+import org.eclipse.mdm.api.dflt.model.TemplateComponent;
+
+/**
+ * MDMEntity (Entity for a business object (contains a list of
+ * {@link MDMContextAttribute}s)
+ *
+ * @author Juergen Kleck, Peak Solution GmbH
+ */
+public class MDMContextEntity extends MDMEntity {
+
+	/**
+	 * sort index of the MDM business object
+	 */
+	private final Integer sortIndex;
+	/**
+	 * list of attribute to transfer
+	 */
+	private List<MDMContextAttribute> attributes;
+	/**
+	 * list of relations to transfer
+	 */
+	private List<MDMContextRelation> relations;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param entity the business object
+	 */
+	public MDMContextEntity(Entity entity) {
+		super(entity);
+		// special handling for context component
+		if (entity instanceof ContextComponent) {
+			TemplateComponent tplCmp = TemplateComponent.of((ContextComponent) entity).get();
+			this.sortIndex = tplCmp.getSortIndex();
+			this.attributes = convertAttributeValues(entity.getValues(), tplCmp.getTemplateAttributes());
+			this.relations = convertRelations(entity, tplCmp);
+		} else {
+			this.sortIndex = 0;
+			this.attributes = convertAttributeValues(entity.getValues(), null);
+			this.relations = convertRelations(entity, null);
+		}
+	}
+
+	/**
+	 * Constructor.
+	 *
+	 * @param name       Name of the Entity
+	 * @param id         ID of the Entity
+	 * @param type       Type of the Entity
+	 * @param sourceType Source type of the Entity
+	 * @param sourceName Source name of the Entity
+	 * @param attributes Attributes of the Entity
+	 */
+	public MDMContextEntity(String name, String id, String type, String sourceType, String sourceName,
+			List<MDMContextAttribute> attributes) {
+		super(name, id, type, sourceType, sourceName, Collections.emptyList());
+		this.sortIndex = 0;
+		if (attributes != null) {
+			this.attributes = new ArrayList<>(attributes);
+		} else {
+			this.attributes = new ArrayList<>();
+		}
+		this.relations = new ArrayList<>();
+	}
+
+	public Integer getSortIndex() {
+		return sortIndex;
+	}
+
+	public List<MDMContextAttribute> getAttributes() {
+		return Collections.unmodifiableList(this.attributes);
+	}
+
+	public List<MDMContextRelation> getRelations() {
+		return Collections.unmodifiableList(this.relations);
+	}
+
+	/**
+	 * converts the MDM business object values to string values
+	 *
+	 * @param values        values of a MDM business object
+	 * @param tplAttributes optional list of template attributes
+	 * @return list with converted attribute values
+	 */
+	private List<MDMContextAttribute> convertAttributeValues(Map<String, Value> values,
+			List<TemplateAttribute> tplAttributes) {
+
+		List<MDMContextAttribute> listAttrs = new ArrayList<>();
+		for (MDMAttribute attr : super.convertAttributeValues(values)) {
+			TemplateAttribute tplAttr = null;
+
+			if (tplAttributes != null && !tplAttributes.isEmpty()) {
+				tplAttr = tplAttributes.stream().filter(tpl -> tpl.getName().equals(attr.getName())).findFirst()
+						.orElse(null);
+			}
+
+			listAttrs.add(toContextAttribute(attr, tplAttr));
+		}
+
+		// clear unneeded elements
+		listAttrs.removeIf(attr -> attr.getName().equals(BaseEntity.ATTR_NAME)
+				|| attr.getName().equals(BaseEntity.ATTR_MIMETYPE) || attr.getName().equals(Sortable.ATTR_SORT_INDEX));
+
+		// pre-sort attributes by sort index
+		Collections.sort(listAttrs, Comparator.comparing(MDMContextAttribute::getSortIndex,
+				Comparator.nullsFirst(Comparator.naturalOrder())));
+
+		return listAttrs;
+	}
+
+	private MDMContextAttribute toContextAttribute(MDMAttribute attr, TemplateAttribute tplAttr) {
+		Integer sortIndex = null;
+		Boolean optional = null;
+		Boolean readOnly = null;
+		String description = null;
+		if (tplAttr != null) {
+			sortIndex = tplAttr.getCatalogAttribute().getSortIndex();
+			description = tplAttr.getCatalogAttribute().getDescription();
+			optional = (Boolean) tplAttr.isOptional();
+			readOnly = (Boolean) tplAttr.isValueReadOnly();
+		}
+		return new MDMContextAttribute(attr, sortIndex, readOnly, optional, description);
+	}
+
+	/**
+	 * Converts all relations to MDMContextRelations. The potential ContextType of
+	 * the children is assumed to be the parent's one.
+	 *
+	 * @param entity to get {@link MDMContextRelation}s for
+	 * @return a list of {@link MDMContextRelation}s
+	 */
+	private List<MDMContextRelation> convertRelations(Entity entity, TemplateComponent tplCmp) {
+
+		String parentId = tplCmp.getParentTemplateComponent().map(p -> p.getID()).orElse(null);
+
+		return convertRelations(entity).stream().map(m -> new MDMContextRelation(m, parentId))
+				.collect(Collectors.toList());
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMContextRelation.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMContextRelation.java
new file mode 100644
index 0000000..2d37981
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMContextRelation.java
@@ -0,0 +1,68 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.entity;
+
+import java.util.List;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+
+/**
+ * Relation (Entity for relation information)
+ *
+ * @author Juergen Kleck, Peak Solution GmbH
+ *
+ */
+public class MDMContextRelation extends MDMRelation {
+
+	private String parentId;
+
+	/**
+	 * Default constructor used for entity deserialization
+	 */
+	public MDMContextRelation() {
+
+	}
+
+	/**
+	 * Constructor
+	 *
+	 * @param name        name of the relation
+	 * @param type        type of the relation
+	 * @param entityType  type of the related entity
+	 * @param contextType ContextType of the entity if the entityType has one
+	 * @param ids         ids of the related entities
+	 * @param parentId    the parent template id
+	 */
+	public MDMContextRelation(String name, RelationType type, String entityType, ContextType contextType,
+			List<String> ids, String parentId) {
+		super(name, type, entityType, contextType, ids);
+		this.parentId = parentId;
+	}
+
+	/**
+	 * Constructor
+	 *
+	 * @param relation MDMRelation
+	 * @param parentId parentId
+	 */
+	public MDMContextRelation(MDMRelation relation, String parentId) {
+		super(relation);
+		this.parentId = parentId;
+	}
+
+	public String getParentId() {
+		return parentId;
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMEntity.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMEntity.java
new file mode 100644
index 0000000..c7d959a
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMEntity.java
@@ -0,0 +1,290 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.entity;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.mdm.api.base.adapter.Core;
+import org.eclipse.mdm.api.base.model.BaseEntity;
+import org.eclipse.mdm.api.base.model.Deletable;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.businessobjects.utils.Serializer;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.vavr.collection.HashMap;
+
+/**
+ * MDMEntity (Entity for a business object (contains a list of
+ * {@link MDMAttribute}s)
+ *
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ */
+@Schema(description = "Representation of a MDM entity")
+public class MDMEntity {
+
+	/**
+	 * name of the MDM business object
+	 */
+	private final String name;
+	/**
+	 * id of the MDM business object
+	 */
+	private final String id;
+	/**
+	 * type as String of the MDM business object (e.g. TestStep)
+	 */
+	private final String type;
+	/**
+	 * source type name of the business object at the data source
+	 */
+	private final String sourceType;
+	/**
+	 * source name (e.g. MDM Environment name)
+	 */
+	private final String sourceName;
+	/**
+	 * list of attribute to transfer
+	 */
+	private List<MDMAttribute> attributes;
+
+	/**
+	 * list of relations to transfer
+	 */
+	private List<MDMRelation> relations;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param entity the business object
+	 */
+	public MDMEntity(Entity entity) {
+		this.name = entity.getName();
+		this.id = entity.getID();
+		this.type = entity.getClass().getSimpleName();
+		this.sourceType = entity.getTypeName();
+		this.sourceName = entity.getSourceName();
+		this.attributes = convertAttributeValues(entity.getValues());
+		this.relations = convertRelations(entity);
+	}
+
+	/**
+	 * Constructor.
+	 *
+	 * @param name       Name of the Entity
+	 * @param id         ID of the Entity
+	 * @param type       Type of the Entity
+	 * @param sourceType Source type of the Entity
+	 * @param sourceName Source name of the Entity
+	 * @param attributes Attributes of the Entity
+	 */
+	public MDMEntity(String name, String id, String type, String sourceType, String sourceName,
+			List<MDMAttribute> attributes) {
+		this(name, id, type, sourceType, sourceName, attributes, Collections.emptyList());
+	}
+
+	/**
+	 * Constructor.
+	 *
+	 * @param name       Name of the Entity
+	 * @param id         ID of the Entity
+	 * @param type       Type of the Entity
+	 * @param sourceType Source type of the Entity
+	 * @param sourceName Source name of the Entity
+	 * @param attributes Attributes of the Entity
+	 * @param relations  Relations of the Entity
+	 */
+	public MDMEntity(String name, String id, String type, String sourceType, String sourceName,
+			List<MDMAttribute> attributes, List<? extends MDMRelation> relations) {
+		this.name = name;
+		this.id = id;
+		this.type = type;
+		this.sourceType = sourceType;
+		this.sourceName = sourceName;
+		if (attributes != null) {
+			this.attributes = new ArrayList<>(attributes);
+		} else {
+			this.attributes = new ArrayList<>();
+		}
+		if (relations != null) {
+			this.relations = new ArrayList<>(relations);
+		} else {
+			this.relations = new ArrayList<>();
+		}
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public String getId() {
+		return this.id;
+	}
+
+	public String getType() {
+		return this.type;
+	}
+
+	public String getSourceType() {
+		return this.sourceType;
+	}
+
+	public String getSourceName() {
+		return this.sourceName;
+	}
+
+	public List<? extends MDMAttribute> getAttributes() {
+		return Collections.unmodifiableList(this.attributes);
+	}
+
+	public List<? extends MDMRelation> getRelations() {
+		return Collections.unmodifiableList(this.relations);
+	}
+
+	/**
+	 * converts the MDM business object values to string values
+	 *
+	 * @param values values of a MDM business object
+	 * @return list with converted attribute values
+	 */
+	protected List<MDMAttribute> convertAttributeValues(Map<String, Value> values) {
+		List<MDMAttribute> listAttrs = new ArrayList<>();
+		Set<java.util.Map.Entry<String, Value>> set = values.entrySet();
+
+		for (java.util.Map.Entry<String, Value> entry : set) {
+
+			if (entry.getKey().equals(BaseEntity.ATTR_ID)) {
+				continue;
+			}
+
+			if (!entry.getValue().isValid()) {
+				String dt = entry.getValue().getValueType().toString();
+				listAttrs.add(new MDMAttribute(entry.getKey(), "", "", dt));
+				continue;
+			}
+
+			if (entry.getValue().getValueType().isSequence()) {
+				listAttrs.add(sequenceType2Attribute(entry.getKey(), entry.getValue()));
+			} else {
+				listAttrs.add(singleType2Attribute(entry.getKey(), entry.getValue()));
+			}
+		}
+
+		return listAttrs;
+	}
+
+	/**
+	 * converts a single type MDM business object value to a attribute
+	 *
+	 * @param name        name of the attribute value
+	 * @param singleValue single MDM business object value
+	 * @return the converted attribute value
+	 */
+	protected MDMAttribute singleType2Attribute(String name, Value singleValue) {
+		Object value = Serializer.serializeValue(singleValue);
+		String unit = singleValue.getUnit();
+		String dt = singleValue.getValueType().toString();
+		return new MDMAttribute(name, value, unit, dt);
+	}
+
+	/**
+	 * converts a sequence type MDM business object value to a attribute
+	 *
+	 * @param name          name of the attribute value
+	 * @param sequenceValue sequence MDM business object value
+	 * @return the converted attribute value
+	 */
+	protected MDMAttribute sequenceType2Attribute(String name, Value sequenceValue) {
+
+		if (sequenceValue.getValueType().isStringSequence()) {
+			return stringSeq2Attribute(name, sequenceValue);
+		} else if (sequenceValue.getValueType().isFileLinkSequence()) {
+			String unit = sequenceValue.getUnit();
+			String dt = sequenceValue.getValueType().toString();
+			return new MDMAttribute(name, Serializer.serializeValue(sequenceValue), unit, dt);
+		}
+
+		String dt = sequenceValue.getValueType().toString();
+		String defValue = "sequence type '" + dt + "' not implemented yet";
+		return new MDMAttribute(name, defValue, "", dt);
+	}
+
+	/**
+	 * converts a string sequence MDM business object value to a attribute The
+	 * result is a separated string (separator: ';')
+	 *
+	 * @param name  name of the attribute value
+	 * @param value string sequence MDM business object value
+	 * @return the converted attribute value
+	 */
+	protected MDMAttribute stringSeq2Attribute(String name, Value value) {
+		String[] stringSeq = value.extract();
+		StringBuffer sb = new StringBuffer();
+
+		for (String stringSeqValue : stringSeq) {
+			sb.append(";").append(stringSeqValue);
+		}
+
+		String stringValue = sb.toString().replaceFirst(";", "");
+		String unit = value.getUnit();
+		String dt = value.getValueType().toString();
+		return new MDMAttribute(name, stringValue, unit, dt);
+	}
+
+	/**
+	 * Converts all relations to MDMRelations. The potential ContextType of the
+	 * children is assumed to be the parent's one.
+	 *
+	 * @param entity to get
+	 *               {@link org.eclipse.mdm.businessobjects.entity.MDMRelation}s for
+	 * @return a list of {@link org.eclipse.mdm.businessobjects.entity.MDMRelation}s
+	 */
+	protected List<MDMRelation> convertRelations(Entity entity) {
+		// write out children
+		Core core = ServiceUtils.getCore(entity);
+		// get children hash (type is key)
+		return HashMap.ofAll(core.getChildrenStore().getCurrent())
+				// if we don't check the size we crash, some elements may not have a relation
+				.filter(entry -> entry._2.size() > 0)
+				// create child relations (the ContextType is assumed to be same as the parent's
+				// one
+				.filterValues(l -> l.size() > 0)
+				.map(entry -> new MDMRelation(null, MDMRelation.RelationType.CHILDREN, entry._1.getSimpleName(),
+						ServiceUtils.getContextType(entry._2.get(0)),
+						// call get id on all related entities
+						io.vavr.collection.List.ofAll(entry._2).map(Deletable::getID).asJava()))
+				// append related entities from the mutable store
+				.appendAll(io.vavr.collection.List.ofAll(core.getMutableStore().getCurrent()).
+				// convert list to map: use simple class name as this is the MDM entity type in
+				// conjunction with the ContextType
+						groupBy(e -> e.getClass().getSimpleName() + "_" + ServiceUtils.getContextType(e))
+						// create relation for every entry
+						.map(entry -> new MDMRelation(null, MDMRelation.RelationType.MUTABLE,
+								entry._2.get(0).getClass().getSimpleName(),
+								ServiceUtils.getContextType(entry._2.get(0)), entry._2.map(Entity::getID).asJava())))
+				.appendAll(io.vavr.collection.List.ofAll(core.getPermanentStore().getCurrent())
+						.groupBy(e -> e.getClass().getSimpleName())
+						// create relation for every entry
+						.map(entry -> new MDMRelation(null, MDMRelation.RelationType.PARENT, entry._1,
+								ServiceUtils.getContextType(entry._2.get(0)), entry._2.map(Entity::getID).asJava())))
+				.asJava();
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMEntityResponse.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMEntityResponse.java
new file mode 100644
index 0000000..afada80
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMEntityResponse.java
@@ -0,0 +1,84 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.entity;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.eclipse.mdm.api.base.model.Entity;
+
+/**
+ * EntryResponse (Container for {@link MDMEntity}s)
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class MDMEntityResponse {
+
+	/** type of all content entries (e.g. TestStep) */
+	private final String type;
+	/** transferable data content */
+	private final List<MDMEntity> data;
+
+	/**
+	 * Constructor (for a list of business objects {@link MDMEntity}s)
+	 * 
+	 * @param type    type of all containging {@link MDMEntity}s
+	 * @param entries list of {@link MDMEntity}
+	 */
+	// TODO move to Vavr List
+	public <T extends Entity> MDMEntityResponse(Class<? extends Entity> type, List<T> businessObjects) {
+		this.type = type.getSimpleName();
+		this.data = toTransferable(businessObjects);
+	}
+
+	/**
+	 * Constructor (for a single business object {@link MDMEntity})
+	 * 
+	 * @param type           type of the {@link MDMEntity}
+	 * @param businessObject single {@link MDMEntity}
+	 */
+	public <T extends Entity> MDMEntityResponse(Class<? extends Entity> type, T businessObject) {
+		List<T> businessObjects = new ArrayList<>();
+		businessObjects.add(businessObject);
+		this.type = type.getSimpleName();
+		this.data = toTransferable(businessObjects);
+	}
+
+	public String getType() {
+		return this.type;
+	}
+
+	public List<MDMEntity> getData() {
+		return Collections.unmodifiableList(this.data);
+	}
+
+	private <T extends Entity> List<MDMEntity> toTransferable(List<T> businessObjects) {
+		List<MDMEntity> mdmEntityList = new ArrayList<MDMEntity>();
+		for (Entity businessObject : businessObjects) {
+			MDMEntity mdmEntity = new MDMEntity(businessObject);
+			mdmEntityList.add(mdmEntity);
+		}
+		return mdmEntityList;
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMFileLink.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMFileLink.java
new file mode 100644
index 0000000..97e57e8
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMFileLink.java
@@ -0,0 +1,70 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.entity;
+
+import org.eclipse.mdm.api.base.model.FileLink;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+/**
+ * MDMFileLink (Entity for a {@link FileLink})
+ * 
+ */
+@Schema(description = "Representation of a MDM FileLink")
+public class MDMFileLink {
+
+	private final String remotePath;
+
+	private final String mimeType;
+
+	private final String description;
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param remotePath
+	 * @param mimeType
+	 * @param description
+	 */
+	public MDMFileLink(String remotePath, String mimeType, String description) {
+		this.remotePath = remotePath;
+		this.mimeType = mimeType;
+		this.description = description;
+	}
+
+	/**
+	 * @return the remotePath
+	 */
+	@Schema(description = "The remote path of the FileLink")
+	public String getRemotePath() {
+		return remotePath;
+	}
+
+	/**
+	 * @return the mimeType
+	 */
+	@Schema(description = "The mimetype of the FileLink")
+	public String getMimeType() {
+		return mimeType;
+	}
+
+	/**
+	 * @return the description
+	 */
+	@Schema(description = "The description of the FileLink")
+	public String getDescription() {
+		return description;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMRelation.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMRelation.java
new file mode 100644
index 0000000..9c93727
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/MDMRelation.java
@@ -0,0 +1,100 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.entity;
+
+import java.util.List;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+
+/**
+ * Relation (Entity for relation informations)
+ * 
+ * @author Alexander Nehmer, science + computing (ATOS SE)
+ *
+ */
+public class MDMRelation {
+
+	/** name of the relation */
+	private String name;
+	/** type of the relation */
+	private RelationType type;
+	/** type of the related entity */
+	private String entityType;
+	/** ContextType if the entityType has one */
+	private ContextType contextType;
+	/** ids of the related entities */
+	private List<String> ids;
+
+	public enum RelationType {
+		CHILDREN, MUTABLE, PARENT;
+	}
+
+	/**
+	 * Default constructor used for entity deserialization
+	 */
+	public MDMRelation() {
+
+	}
+
+	/**
+	 * Constructor
+	 * 
+	 * @param name        name of the relation
+	 * @param type        type of the relation
+	 * @param entityType  type of the related entity
+	 * @param contextType ContextType of the entity if the entityType has one
+	 * @param ids         ids of the related entities
+	 */
+	public MDMRelation(String name, RelationType type, String entityType, ContextType contextType, List<String> ids) {
+		this.name = name;
+		this.type = type;
+		this.entityType = entityType;
+		this.contextType = contextType;
+		this.ids = ids;
+	}
+
+	/**
+	 * Copy constructor
+	 * 
+	 * @param relation relation to copy
+	 */
+	public MDMRelation(MDMRelation relation) {
+		this.name = relation.getName();
+		this.type = relation.getType();
+		this.entityType = relation.getEntityType();
+		this.contextType = relation.getContextType();
+		this.ids = relation.getIds();
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public RelationType getType() {
+		return type;
+	}
+
+	public String getEntityType() {
+		return entityType;
+	}
+
+	public ContextType getContextType() {
+		return contextType;
+	}
+
+	public List<String> getIds() {
+		return ids;
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/SearchAttribute.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/SearchAttribute.java
new file mode 100644
index 0000000..46a787b
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/SearchAttribute.java
@@ -0,0 +1,82 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.entity;
+
+/**
+ * SearchAttibute (Entity for {@link SearchAttribute}s defined at a
+ * {@link SearchDefinition})
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+public class SearchAttribute {
+
+	private final String boType;
+	private final String attrName;
+	private final String valueType;
+	private final String criteria;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param boType    name of MDM business object (e.g. TestStep)
+	 * @param attrName  name of an attribute for the MDM business object (e.g. Name)
+	 * @param valueType value type of this attribute (e.g. String)
+	 * @param criteria  default criteria
+	 */
+	public SearchAttribute(String boType, String attrName, String valueType, String criteria) {
+		this.boType = boType;
+		this.attrName = attrName;
+		this.valueType = valueType;
+		this.criteria = criteria;
+	}
+
+	/**
+	 * returns the name of the MDM business object (e.g. TestStep)
+	 * 
+	 * @return the name of the MDM business object (e.g. TestStep)
+	 */
+	public String getBoType() {
+		return this.boType;
+	}
+
+	/**
+	 * returns the name of an attribute for the MDM business object (e.g. Name)
+	 * 
+	 * @return the name of an attribute for the MDM business object (e.g. Name)
+	 */
+	public String getAttrName() {
+		return this.attrName;
+	}
+
+	/**
+	 * returns the value type of this attribute (e.g. String)
+	 * 
+	 * @return the value type of this attribute (e.g. String)
+	 */
+	public String getValueType() {
+		return this.valueType;
+	}
+
+	/**
+	 * returns the default criteria
+	 * 
+	 * @return the default criteria
+	 */
+	public String getCriteria() {
+		return this.criteria;
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/SearchAttributeResponse.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/SearchAttributeResponse.java
new file mode 100644
index 0000000..3dd629c
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/SearchAttributeResponse.java
@@ -0,0 +1,58 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.entity;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ * SearchDefinitionResponse (Container for {@link SearchAttribute}s)
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class SearchAttributeResponse {
+
+	/** transferable data content */
+	private List<SearchAttribute> data;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param searchAttributes list of {@link SearchAttribute}s to transfer
+	 */
+	public SearchAttributeResponse(List<SearchAttribute> searchAttributes) {
+		data = new ArrayList<>(searchAttributes);
+	}
+
+	/**
+	 * Constructor
+	 */
+	public SearchAttributeResponse() {
+		data = new ArrayList<>();
+	}
+
+	public List<SearchAttribute> getData() {
+		return Collections.unmodifiableList(this.data);
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/SearchDefinition.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/SearchDefinition.java
new file mode 100644
index 0000000..d6ee13a
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/SearchDefinition.java
@@ -0,0 +1,85 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.entity;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * SearchDefinition (Entity with a list of defined {@link SearchAttribute}s)
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+public class SearchDefinition {
+
+	private final String name;
+	private final String resultType;
+	private List<SearchAttribute> attributeList;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param name       name of this search definition
+	 * @param resultType result type by executing this defined search (e.g.
+	 *                   TestStep)
+	 */
+	public SearchDefinition(String name, String resultType) {
+		this.name = name;
+		this.resultType = resultType;
+		this.attributeList = new ArrayList<>();
+	}
+
+	/**
+	 * adds an {@link SearchAttribute} to this SearchDefinition
+	 * 
+	 * @param boType    name of MDM business object (e.g. TestStep)
+	 * @param attrName  name of an attribute for the MDM business object (e.g. Name)
+	 * @param valueType value type of this attribute (e.g. String)
+	 * @param criteria  default criteria
+	 */
+	public void addSearchAttribute(String boType, String attrName, String valueType, String criteria) {
+		this.attributeList.add(new SearchAttribute(boType, attrName, valueType, criteria));
+	}
+
+	/**
+	 * returns the name of this search definition
+	 * 
+	 * @return the name of this search definition
+	 */
+	public String getName() {
+		return this.name;
+	}
+
+	/**
+	 * returns the result type of this search definition
+	 * 
+	 * @return the result type of this search definition
+	 */
+	public String getResultType() {
+		return this.resultType;
+	}
+
+	/**
+	 * lists the defined {@link SearchAttribute}s for this search definition
+	 * 
+	 * @return the defined {@link SearchAttribute}s for ths search definition
+	 */
+	public List<SearchAttribute> listSearchAttributes() {
+		return Collections.unmodifiableList(this.attributeList);
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/SearchDefinitionResponse.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/SearchDefinitionResponse.java
new file mode 100644
index 0000000..b0fc3e6
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/SearchDefinitionResponse.java
@@ -0,0 +1,57 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.entity;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ * SearchDefinitionResponse (Container for {@link SearchDefinition}s)
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class SearchDefinitionResponse {
+
+	/** transferable data content */
+	private List<SearchDefinition> data;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param searchDefinitions list of {@link SearchDefinition}s to transfer
+	 */
+	public SearchDefinitionResponse(List<SearchDefinition> searchDefinitions) {
+		this.data = new ArrayList<>(searchDefinitions);
+	}
+
+	/**
+	 * Constructor
+	 */
+	public SearchDefinitionResponse() {
+		this.data = new ArrayList<>();
+	}
+
+	public List<SearchDefinition> getData() {
+		return Collections.unmodifiableList(this.data);
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/User.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/User.java
new file mode 100644
index 0000000..7051983
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/entity/User.java
@@ -0,0 +1,35 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.entity;
+
+import java.util.List;
+
+public class User {
+	private String username;
+	private List<String> roles;
+	
+	public String getUsername() {
+		return username;
+	}
+	public void setUsername(String username) {
+		this.username = username;
+	}
+	public List<String> getRoles() {
+		return roles;
+	}
+	public void setRoles(List<String> roles) {
+		this.roles = roles;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/service/ContextService.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/service/ContextService.java
new file mode 100644
index 0000000..3eaf779
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/service/ContextService.java
@@ -0,0 +1,569 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.service;
+
+import static org.eclipse.mdm.businessobjects.control.ContextActivity.CONTEXT_GROUP_MEASURED;
+import static org.eclipse.mdm.businessobjects.control.ContextActivity.CONTEXT_GROUP_ORDERED;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.NoSuchElementException;
+import java.util.stream.Collectors;
+
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.Transaction;
+import org.eclipse.mdm.api.base.model.ContextComponent;
+import org.eclipse.mdm.api.base.model.ContextDescribable;
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.EntityFactory;
+import org.eclipse.mdm.api.dflt.model.TemplateComponent;
+import org.eclipse.mdm.api.dflt.model.TemplateRoot;
+import org.eclipse.mdm.api.dflt.model.TemplateTestStep;
+import org.eclipse.mdm.businessobjects.control.ContextActivity;
+import org.eclipse.mdm.businessobjects.control.MDMEntityAccessException;
+import org.eclipse.mdm.businessobjects.entity.MDMContextAttribute;
+import org.eclipse.mdm.businessobjects.entity.MDMContextEntity;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.Serializer;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+
+import com.google.common.base.Strings;
+
+import io.vavr.Lazy;
+import io.vavr.Value;
+import io.vavr.collection.HashMap;
+import io.vavr.collection.List;
+import io.vavr.collection.Map;
+import io.vavr.control.Try;
+
+/**
+ * Class providing basic data access methods to contexts.
+ * 
+ * @author Johannes Stamm, PeakSolution GmbH Nuernberg
+ *
+ */
+@Stateless
+public class ContextService {
+
+	@Inject
+	private ConnectorService connectorService;
+
+	@EJB
+	private EntityService entityService;
+
+	/**
+	 * Vavr conform version of contextActivity getTestStepContext function.
+	 * 
+	 * returns the ordered and measurement context for a {@link TestStep}. If no
+	 * {@link ContextType}s are defined for this method call, the method returns all
+	 * context informations of the available {@link ContextType}s. Otherwise you can
+	 * specify a list of {@link ContextType}s.
+	 * 
+	 * Possible {@link ContextType}s are {@link ContextType}.UNITUNDERTEST,
+	 * {@link ContextType}.TESTSEQUENCE and {@link ContextType}.TESTEQUIPMENT.
+	 * 
+	 * @param sourceName      name of the source (MDM {@link Environment} name)
+	 * @param testId          the id of {@link TestStep} context is looked up for
+	 * @param includeVariable true then teststep variable data is included, false
+	 *                        only test constant data is included
+	 * @param contextTypes    list of {@link ContextType}s
+	 * @return the ordered and measured context data as context object for the
+	 *         identified {@link TestStep}
+	 */
+	public Try<Map<String, Map<ContextType, ContextRoot>>> getTestContext(Value<String> sourceName,
+			Value<String> testId, boolean includeVariable, ContextType... contextTypes) {
+		Try<Test> test = entityService.find(sourceName, Test.class, testId);
+		return getTestContext(sourceName, test, includeVariable, contextTypes);
+	}
+
+	/**
+	 * Vavr conform version of contextActivity getTestStepContext function.
+	 *
+	 * returns the ordered and measurement context for a {@link TestStep}. If no
+	 * {@link ContextType}s are defined for this method call, the method returns all
+	 * context informations of the available {@link ContextType}s. Otherwise you can
+	 * specify a list of {@link ContextType}s.
+	 *
+	 * Possible {@link ContextType}s are {@link ContextType}.UNITUNDERTEST,
+	 * {@link ContextType}.TESTSEQUENCE and {@link ContextType}.TESTEQUIPMENT.
+	 *
+	 * @param sourceName   name of the source (MDM {@link Environment} name)
+	 * @param testStepId   the id of {@link TestStep} context is looked up for
+	 * @param contextTypes list of {@link ContextType}s
+	 * @return the ordered and measured context data as context object for the
+	 *         identified {@link TestStep}
+	 */
+	public Try<Map<String, Map<ContextType, ContextRoot>>> getTestStepContext(Value<String> sourceName,
+			Value<String> testStepId, ContextType... contextTypes) {
+		return getTestStepContext(sourceName, entityService.find(sourceName, TestStep.class, testStepId), contextTypes);
+	}
+
+	/**
+	 * Vavr conform version of contextActivity getTestStepContext function.
+	 * 
+	 * returns the ordered and measurement context for a {@link TestStep}. If no
+	 * {@link ContextType}s are defined for this method call, the method returns all
+	 * context informations of the available {@link ContextType}s. Otherwise you can
+	 * specify a list of {@link ContextType}s.
+	 * 
+	 * Possible {@link ContextType}s are {@link ContextType}.UNITUNDERTEST,
+	 * {@link ContextType}.TESTSEQUENCE and {@link ContextType}.TESTEQUIPMENT.
+	 * 
+	 * @param sourceName   name of the source (MDM {@link Environment} name)
+	 * @param testStep     {@link Try} of the {@link TestStep}
+	 * @param contextTypes list of {@link ContextType}s
+	 * @return the ordered and measured context data as context object for the
+	 *         identified {@link TestStep}
+	 */
+	private Try<Map<String, Map<ContextType, ContextRoot>>> getTestStepContext(Value<String> sourceName,
+			Try<TestStep> testStep, ContextType... contextTypes) {
+
+		Try<Map<ContextType, ContextRoot>> contextOrdered = getEntityManager(sourceName)
+				.map(e -> HashMap.ofAll(e.loadContexts(testStep.get(), contextTypes)));
+
+		Try<Map<ContextType, ContextRoot>> contextMeasured = getEntityManager(sourceName).map(
+				e -> HashMap.ofAll(e.loadContexts(findMeasurements(sourceName, testStep).get().get(), contextTypes)));
+
+		return Try
+				.of(() -> Lazy
+						.of(() -> HashMap.of(CONTEXT_GROUP_ORDERED,
+								contextOrdered.recover(NoSuchElementException.class, t -> HashMap.empty()).get(),
+								CONTEXT_GROUP_MEASURED,
+								contextMeasured.recover(NoSuchElementException.class, t -> HashMap.empty()).get()))
+						.get());
+	}
+
+	/**
+	 * Vavr conform version of contextActivity getTestContext function.
+	 *
+	 * returns the ordered and measurement context for a {@link Test}. If no
+	 * {@link ContextType}s are defined for this method call, the method returns all
+	 * context informations of the available {@link ContextType}s. Otherwise you can
+	 * specify a list of {@link ContextType}s.
+	 *
+	 * Possible {@link ContextType}s are {@link ContextType}.UNITUNDERTEST,
+	 * {@link ContextType}.TESTSEQUENCE and {@link ContextType}.TESTEQUIPMENT.
+	 *
+	 * @param sourceName      name of the source (MDM {@link Environment} name)
+	 * @param test            {@link Try} of the {@link Test}
+	 * @param includeVariable true then teststep variable data is included, false
+	 *                        only test constant data is included
+	 * @param contextTypes    list of {@link ContextType}s
+	 * @return the ordered and measured context data as context object for the
+	 *         identified {@link TestStep}
+	 */
+	private Try<Map<String, Map<ContextType, ContextRoot>>> getTestContext(Value<String> sourceName, Try<Test> test,
+			boolean includeVariable, ContextType... contextTypes) {
+
+		// init an empty hashmap
+		HashMap<ContextType, ContextRoot> mapOrdered = HashMap.empty();
+		HashMap<ContextType, ContextRoot> mapMeasured = HashMap.empty();
+
+		if (test.isSuccess()) {
+
+			java.util.List<TestStep> list = getEntityManager(sourceName).get().loadChildren(test.get(), TestStep.class);
+
+			// merge all attributes from all test steps together
+			for (TestStep testStep : list) {
+				Try<Map<ContextType, ContextRoot>> contextOrdered = getEntityManager(sourceName)
+						.map(e -> HashMap.ofAll(e.loadContexts(testStep, contextTypes)));
+
+				if (contextOrdered.isSuccess()) {
+					mapOrdered = mapOrdered.merge(contextOrdered.get());
+				}
+
+				Try<Map<ContextType, ContextRoot>> contextMeasured = getEntityManager(sourceName).map(e -> HashMap
+						.ofAll(e.loadContexts(findMeasurements(sourceName, testStep).get().get(), contextTypes)));
+
+				if (contextMeasured.isSuccess()) {
+					mapMeasured = mapMeasured.merge(contextMeasured.get());
+				}
+			}
+
+			// filter data out to reduce traffic in the json rest service
+			if (!includeVariable) {
+				mapOrdered.values().forEach(ctxRoot -> {
+					java.util.List<ContextComponent> removals = new ArrayList<>();
+					ctxRoot.getContextComponents().forEach(ctxCmp -> {
+						if (TemplateComponent.of(ctxCmp).isPresent()) {
+							org.eclipse.mdm.api.base.model.Value attr = TemplateComponent.of(ctxCmp).get()
+									.getValue("TestStepSeriesVariable");
+							if (attr.isValid() && ((Boolean) attr.extract()).booleanValue()) {
+								removals.add(ctxCmp);
+							}
+						}
+					});
+					for (ContextComponent ctxCmp : removals) {
+						ctxRoot.removeContextComponent(ctxCmp.getName());
+					}
+				});
+				mapMeasured.values().forEach(ctxRoot -> {
+					java.util.List<ContextComponent> removals = new ArrayList<>();
+					ctxRoot.getContextComponents().forEach(ctxCmp -> {
+						if (TemplateComponent.of(ctxCmp).isPresent()) {
+							org.eclipse.mdm.api.base.model.Value attr = TemplateComponent.of(ctxCmp).get()
+									.getValue("TestStepSeriesVariable");
+							if (attr.isValid() && ((Boolean) attr.extract()).booleanValue()) {
+								removals.add(ctxCmp);
+							}
+						}
+					});
+					for (ContextComponent ctxCmp : removals) {
+						ctxRoot.removeContextComponent(ctxCmp.getName());
+					}
+				});
+			}
+		}
+
+		// set final for follow-up lambda
+		final HashMap<ContextType, ContextRoot> tmpMapOrdered = mapOrdered;
+		final HashMap<ContextType, ContextRoot> tmpMapMeasured = mapMeasured;
+
+		// convert to try class object
+		Try<Map<ContextType, ContextRoot>> contextOrdered = Try.of(() -> tmpMapOrdered);
+		Try<Map<ContextType, ContextRoot>> contextMeasured = Try.of(() -> tmpMapMeasured);
+
+		return Try
+				.of(() -> Lazy
+						.of(() -> HashMap.of(CONTEXT_GROUP_ORDERED,
+								contextOrdered.recover(NoSuchElementException.class, t -> HashMap.empty()).get(),
+								CONTEXT_GROUP_MEASURED,
+								contextMeasured.recover(NoSuchElementException.class, t -> HashMap.empty()).get()))
+						.get());
+	}
+
+	/**
+	 * Vavr conform version of contextActivity getMeasurementContext function.
+	 * 
+	 * returns the ordered and measurement context for a {@link Measurement}. If no
+	 * {@link ContextType}s are defined for this method call, the method returns all
+	 * context informations of the available {@link ContextType}s. Otherwise you can
+	 * specify a list of {@link ContextType}s.
+	 * 
+	 * Possible {@link ContextType}s are {@link ContextType}.UNITUNDERTEST,
+	 * {@link ContextType}.TESTSEQUENCE and {@link ContextType}.TESTEQUIPMENT.
+	 * 
+	 * @param sourceName    name of the source (MDM {@link Environment} name)
+	 * @param measurementId the id of {@link Measurement} context is looked up for
+	 * @param contextTypes  list of {@link ContextType}s
+	 * @return the ordered and measured context data as context object for the
+	 *         identified {@link Measurement}
+	 */
+	public Try<Map<String, Map<ContextType, ContextRoot>>> getMeasurementContext(Value<String> sourceName,
+			Value<String> measurementId, ContextType... contextTypes) {
+		return getMeasurementContext(sourceName, entityService.find(sourceName, Measurement.class, measurementId),
+				contextTypes);
+	}
+
+	/**
+	 * Vavr conform version of contextActivity getTestStepContext function.
+	 * 
+	 * returns the ordered and measurement context for a {@link Measurement}. If no
+	 * {@link ContextType}s are defined for this method call, the method returns all
+	 * context informations of the available {@link ContextType}s. Otherwise you can
+	 * specify a list of {@link ContextType}s.
+	 * 
+	 * Possible {@link ContextType}s are {@link ContextType}.UNITUNDERTEST,
+	 * {@link ContextType}.TESTSEQUENCE and {@link ContextType}.TESTEQUIPMENT.
+	 * 
+	 * @param sourceName   name of the source (MDM {@link Environment} name)
+	 * @param measurement  {@link Try} of the {@link Measurement}
+	 * @param contextTypes list of {@link ContextType}s
+	 * @return the ordered and measured context data as context object for the
+	 *         identified {@link Measurement}
+	 */
+	private Try<Map<String, Map<ContextType, ContextRoot>>> getMeasurementContext(Value<String> sourceName,
+			Try<Measurement> measurement, ContextType... contextTypes) {
+
+		Try<Map<ContextType, ContextRoot>> contextOrdered = getEntityManager(sourceName)
+				.map(e -> HashMap.ofAll(e.loadContexts(findTestStep(sourceName, measurement).get(), contextTypes)));
+
+		Try<Map<ContextType, ContextRoot>> contextMeasured = getEntityManager(sourceName)
+				.map(e -> HashMap.ofAll(e.loadContexts(measurement.get(), contextTypes)));
+
+		return Try.of(() -> Lazy.of(() -> HashMap.of(CONTEXT_GROUP_ORDERED, contextOrdered.get(),
+				CONTEXT_GROUP_MEASURED, contextMeasured.get())).get());
+	}
+
+	/**
+	 * 
+	 * @param sourceName
+	 * @return
+	 */
+	private Try<EntityManager> getEntityManager(Value<String> sourceName) {
+		return Try.of(() -> Lazy.of(() -> connectorService.getContextByName(sourceName.get()).getEntityManager()
+				.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"))).get());
+	}
+
+	/**
+	 * 
+	 * @param sourceName
+	 * @param testStep
+	 * @return
+	 */
+	private Try<List<Measurement>> findMeasurements(Value<String> sourceName, Try<TestStep> testStep) {
+		return getEntityManager(sourceName).map(
+				e -> Lazy.of(() -> List.ofAll(e.loadChildren(testStep.get(), TestStep.CHILD_TYPE_MEASUREMENT))).get());
+	}
+
+	/**
+	 *
+	 * @param sourceName
+	 * @param testStep
+	 * @return
+	 */
+	private Try<List<Measurement>> findMeasurements(Value<String> sourceName, TestStep testStep) {
+		return getEntityManager(sourceName)
+				.map(e -> Lazy.of(() -> List.ofAll(e.loadChildren(testStep, TestStep.CHILD_TYPE_MEASUREMENT))).get());
+	}
+
+	/**
+	 * 
+	 * @param sourceName
+	 * @param measurement
+	 * @return
+	 */
+	private Try<TestStep> findTestStep(Value<String> sourceName, Try<Measurement> measurement) {
+		return getEntityManager(sourceName)
+				.map(e -> Lazy.of(() -> e.loadParent(measurement.get(), Measurement.PARENT_TYPE_TESTSTEP).get()).get());
+	}
+
+	/**
+	 * Updates the context of the given ContextDescribable.
+	 * 
+	 * @param body               update data
+	 * @param contextDescribable ContextDescribable to update
+	 * @param contextTypes       contextTypes which whould be updated. Empty means
+	 *                           all contextTypes.
+	 * @return
+	 */
+	public DescribableContexts updateContext(String body, ContextDescribable contextDescribable,
+			ContextType... contextTypes) {
+		// extract request body
+		RequestBody rqBody = RequestBody.create(body);
+
+		Try<Map<String, Object>> contextMap = rqBody.getValueMapSupplier()
+				.map(dataMap -> dataMap.get("data")
+						.getOrElseThrow(() -> new MDMEntityAccessException("Missing attribute 'data'")))
+				.map(this::transformList).map(List::get).map(this::transformMap);
+
+		DescribableContexts ec = updateContext(getTestStep(contextDescribable), contextMap,
+				getContextTypes(contextTypes));
+		persist(ec);
+		return ec;
+	}
+
+	private DescribableContexts updateContext(TestStep testStep, Try<Map<String, Object>> contextMap,
+			ContextType[] contextTypes) {
+		Map<ContextType, Object> orderedMap = contextMap.get().get(ContextActivity.CONTEXT_GROUP_ORDERED)
+				.map(this::transformMap).getOrElse(HashMap.empty())
+				.mapKeys(t -> ServiceUtils.getContextTypeSupplier(t).get())
+				.filterKeys(t -> Arrays.asList(contextTypes).contains(t));
+
+		DescribableContexts ec = new DescribableContexts();
+		ec.setTestStep(testStep);
+		ec.setOrdered(updateContextDescribableContext(testStep, orderedMap, contextTypes));
+
+		Map<ContextType, Object> measuredMap = contextMap.get().get(ContextActivity.CONTEXT_GROUP_MEASURED)
+				.map(this::transformMap).getOrElse(HashMap.empty())
+				.mapKeys(t -> ServiceUtils.getContextTypeSupplier(t).get())
+				.filterKeys(t -> Arrays.asList(contextTypes).contains(t));
+
+		ec.setMeasurements(getEntityManager(testStep.getSourceName()).loadChildren(testStep, Measurement.class));
+		ec.getAnyMeasurement().map(m -> updateContextDescribableContext(m, measuredMap, contextTypes))
+				.ifPresent(ec::setMeasured);
+
+		return ec;
+	}
+
+	private java.util.Map<ContextType, ContextRoot> updateContextDescribableContext(
+			ContextDescribable contextDescribable, Map<ContextType, Object> rootMap, ContextType[] contextTypes) {
+		java.util.Map<ContextType, ContextRoot> existingRootMap = getEntityManager(contextDescribable.getSourceName())
+				.loadContexts(contextDescribable, contextTypes);
+
+		for (ContextType contextType : contextTypes) {
+			ContextRoot existingRoot = existingRootMap.computeIfAbsent(contextType,
+					ct -> createContextRoot(contextDescribable, ct));
+
+			rootMap.get(contextType).forEach(newContextRoot -> updateContextRoot(existingRoot, newContextRoot));
+		}
+		return existingRootMap;
+	}
+
+	private ContextRoot createContextRoot(ContextDescribable contextDescribable, ContextType contextType) {
+		EntityFactory factory = getEntityFactory(contextDescribable.getSourceName());
+
+		TemplateRoot templateRoot = findTemplateRoot(contextDescribable, contextType);
+
+		if (contextDescribable instanceof Measurement) {
+			return factory.createContextRoot((Measurement) contextDescribable, templateRoot);
+		} else if (contextDescribable instanceof TestStep) {
+			return factory.createContextRoot((TestStep) contextDescribable, templateRoot);
+		} else {
+			throw new MDMEntityAccessException("Only entities TestStep and Measurement are supported!");
+		}
+	}
+
+	private void updateContextRoot(ContextRoot existingRoot, Object newContextRoot) {
+		transformList(newContextRoot).map(this::transformMap).map(this::transformToMDMEntity).forEach(mdmEntity -> {
+			ContextComponent comp = existingRoot.getContextComponent(mdmEntity.getName())
+					.orElseGet(() -> getEntityFactory(existingRoot.getSourceName())
+							.createContextComponent(mdmEntity.getName(), existingRoot));
+
+			updateContextComponent(comp, mdmEntity.getAttributes());
+		});
+	}
+
+	private void updateContextComponent(ContextComponent contextComponent,
+			java.util.List<MDMContextAttribute> nameValues) {
+		nameValues.forEach(attribute -> Serializer.applyValue(contextComponent.getValue(attribute.getName()),
+				attribute.getValue()));
+	}
+
+	private TemplateRoot findTemplateRoot(ContextDescribable contextDescribable, ContextType contextType) {
+		TestStep testStep;
+		if (contextDescribable instanceof Measurement) {
+			testStep = getTestStep((Measurement) contextDescribable);
+		} else if (contextDescribable instanceof TestStep) {
+			testStep = (TestStep) contextDescribable;
+		} else {
+			throw new MDMEntityAccessException("Only entities TestStep and Measurement are supported!");
+		}
+		TemplateTestStep tpl = TemplateTestStep.of(testStep).orElseThrow(
+				() -> new MDMEntityAccessException("Cannot find TemplateTestStep for TestStep: " + testStep));
+
+		return tpl.getTemplateRoot(contextType).orElseThrow(() -> new MDMEntityAccessException(
+				"Cannot find TemplateRoot for ContextType " + contextType + " on Template TestStep " + tpl));
+	}
+
+	public TestStep getTestStep(ContextDescribable contextDescribable) {
+		if (contextDescribable instanceof TestStep) {
+			return (TestStep) contextDescribable;
+		} else {
+			return getTestStep((Measurement) contextDescribable);
+		}
+	}
+
+	private TestStep getTestStep(Measurement measurement) {
+		return getEntityManager(measurement.getSourceName()).loadParent(measurement, TestStep.class).orElseThrow(
+				() -> new MDMEntityAccessException("Cannot find parent TestStep of Measurement: " + measurement));
+	}
+
+	private EntityManager getEntityManager(String sourceName) {
+		return connectorService.getContextByName(sourceName).getEntityManager()
+				.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present!"));
+	}
+
+	private EntityFactory getEntityFactory(String sourceName) {
+		return connectorService.getContextByName(sourceName).getEntityFactory()
+				.orElseThrow(() -> new MDMEntityAccessException("Entity factory not present!"));
+	}
+
+	private ContextType[] getContextTypes(ContextType[] types) {
+		if (types.length == 0) {
+			return ContextType.values();
+		} else {
+			return types;
+		}
+	}
+
+	public void persist(DescribableContexts ec) {
+		Transaction t = null;
+		try {
+			// start transaction to persist ValueList
+			t = getEntityManager(ec.getTestStep().getSourceName()).startTransaction();
+
+			java.util.Map<Boolean, java.util.List<Entity>> map = ec.getEntities().stream()
+					.collect(Collectors.groupingBy(this::isPersisted));
+
+			t.create(map.getOrDefault(Boolean.FALSE, Collections.emptyList()));
+			t.update(map.getOrDefault(Boolean.TRUE, Collections.emptyList()));
+
+			// commit the transaction
+			t.commit();
+		} catch (Exception e) {
+			if (t != null) {
+				t.abort();
+			}
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	private boolean isPersisted(Entity e) {
+		return !Strings.isNullOrEmpty(e.getID()) && !"0".equals(e.getID());
+	}
+
+	@SuppressWarnings("unchecked")
+	private Map<String, Object> transformMap(Object obj) {
+		if (obj instanceof java.util.Map) {
+			return HashMap.ofAll(java.util.Map.class.cast(obj));
+		} else {
+			throw new MDMEntityAccessException(String.format("Expected instance of '%s', but got '%s'",
+					java.util.Map.class.getName(), obj.getClass().getName()));
+		}
+	}
+
+	/**
+	 * Casts an {@link Object} holding a {@link java.util.List<Object>} to a
+	 * {@link io.vavr.collection.List<Object>}
+	 * 
+	 * @param obj the {@link Object} to cast
+	 * @return the {@link io.vavr.collection.List<Object>}
+	 */
+	@SuppressWarnings("unchecked")
+	public List<Object> transformList(Object obj) {
+		if (obj instanceof java.util.List) {
+			return List.ofAll(java.util.List.class.cast(obj));
+		} else {
+			throw new MDMEntityAccessException(String.format("Expected instance of '%s', but got '%s'",
+					java.util.List.class.getName(), obj.getClass().getName()));
+		}
+	}
+
+	public MDMContextEntity transformToMDMEntity(Map<String, Object> component) {
+		return new MDMContextEntity(
+				component.get("name").map(Object::toString)
+						.getOrElseThrow(() -> new MDMEntityAccessException("Missing attribute 'name' in MDMEntity")),
+				component.get("id").map(Object::toString).getOrElse(""),
+				component.get("type").map(Object::toString).getOrElse(""),
+				component.get("sourceType").map(Object::toString).getOrElse(""),
+				component.get("sourceName").map(Object::toString).getOrElse(""),
+				transformList(component.get("attributes").getOrElseThrow(
+						() -> new MDMEntityAccessException("Missing attribute 'attributes' in MDMEntity")))
+								.map(this::transformMap)
+								.map(m -> new MDMContextAttribute(
+										m.get("name").map(Object::toString)
+												.getOrElseThrow(() -> new MDMEntityAccessException(
+														"Missing attribute 'name' in MDMAttribute")),
+										m.get("value").map(Object::toString)
+												.getOrElseThrow(() -> new MDMEntityAccessException(
+														"Missing attribute 'value' in MDMAttribute")),
+										m.get("unit").map(Object::toString).getOrElse(""),
+										m.get("datatype").map(Object::toString).getOrElse(""), null, null, null, null))
+								.toJavaList());
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/service/DataAccessHelper.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/service/DataAccessHelper.java
new file mode 100644
index 0000000..15e3c0e
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/service/DataAccessHelper.java
@@ -0,0 +1,129 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.service;
+
+import java.util.Arrays;
+import java.util.function.Consumer;
+
+import org.eclipse.mdm.api.base.Transaction;
+import org.eclipse.mdm.api.base.model.Deletable;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.businessobjects.control.MDMEntityAccessException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.vavr.CheckedFunction2;
+
+/**
+ * Helper class providing functions to realize transactional data operations
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+public final class DataAccessHelper {
+
+	private static final Logger LOG = LoggerFactory.getLogger(DataAccessHelper.class);
+
+	/**
+	 * Just hide the default constructor
+	 */
+	private DataAccessHelper() {
+	}
+
+	/**
+	 * Returns a function that executes one transactional operation within a
+	 * transaction.
+	 * 
+	 * @return Function that executes a transactional operation on an entity within
+	 *         a transaction.
+	 */
+	// TODO anehmer on 2017-11-22: extend this method to handle lists of objects
+	public static <T extends Entity> T execute(EntityManager em, T entity,
+			CheckedFunction2<Transaction, Entity, Entity> operation) {
+		Transaction t = null;
+		try {
+			// start transaction to persist ValueList
+			t = em.startTransaction();
+			// perform the transactional operation
+			@SuppressWarnings("unchecked")
+			T processedEntity = (T) operation.apply(t, entity);
+			// commit the transaction
+			t.commit();
+			// return the processed entity
+			return processedEntity;
+		} catch (Throwable e) {
+			if (t != null) {
+				t.abort();
+			}
+			throw new MDMEntityAccessException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * Function that creates an {@link Entity} and returns it.
+	 */
+	public static final CheckedFunction2<Transaction, Entity, Entity> DELETE = (transaction, entity) -> {
+		if (entity instanceof Deletable) {
+			// TODO anehmer on 2017-11-22: call to delete() should return entity
+			transaction.delete(Arrays.asList((Deletable) entity));
+		}
+		// if entity cannot be deleted
+		else {
+			throw new MDMEntityAccessException("Entity to delete is no Deletable");
+		}
+		return entity;
+	};
+
+	/**
+	 * Function that creates the given {@link Entity} and returns the updated
+	 * entity.
+	 */
+	public static final CheckedFunction2<Transaction, Entity, Entity> CREATE = (transaction, entity) -> {
+		// TODO anehmer on 2017-11-22: call to create() should return entity
+		transaction.create(Arrays.asList(entity));
+		return entity;
+	};
+
+	/**
+	 * Function that updates the given {@link Entity} it is executed upon and
+	 * returns the updated entity.
+	 */
+	public static final CheckedFunction2<Transaction, Entity, Entity> UPDATE = (transaction, entity) -> {
+		// TODO anehmer on 2017-11-22: call to update() should return entity
+		transaction.update(Arrays.asList(entity));
+		return entity;
+	};
+
+	/**
+	 * Handles a {@link Throwable} by loggging the exception message and rethrowing
+	 * a {@link MDMEntityAccessException}
+	 */
+	// TODO should be replaced in Resources by buildErrorResponse()
+	public static final Consumer<? super Throwable> rethrowAsMDMEntityAccessException = e -> {
+		// TODO anehmer on 2017-11-09: check if logging is necessary depending on how we
+		// handle error logging and client response in general
+		LOG.error(e.getMessage(), e);
+		throw new MDMEntityAccessException(e.getMessage(), e);
+	};
+
+	/**
+	 * Function that handles an occurred exception without rethrowing it
+	 */
+	// TODO anehmer on 2017-11-22: remove method and logger
+	public static final Consumer<? super Throwable> handleException = e -> {
+		LOG.error(e.getMessage(), e);
+	};
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/service/DescribableContexts.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/service/DescribableContexts.java
new file mode 100644
index 0000000..7e6affc
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/service/DescribableContexts.java
@@ -0,0 +1,98 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.service;
+
+import java.util.ArrayList;
+import java.util.EnumMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.TestStep;
+
+/**
+ * DescribableContexts hold Context information for a TestStep and child
+ * Measurements.
+ *
+ */
+public class DescribableContexts {
+
+	private TestStep testStep;
+	private List<Measurement> measurements = new ArrayList<>();
+
+	private Map<ContextType, ContextRoot> orderedContext = new EnumMap<>(ContextType.class);
+	private Map<ContextType, ContextRoot> measuredContext = new EnumMap<>(ContextType.class);
+
+	public TestStep getTestStep() {
+		return testStep;
+	}
+
+	public void setTestStep(TestStep testStep) {
+		this.testStep = testStep;
+	}
+
+	public List<Measurement> getMeasurements() {
+		return measurements;
+	}
+
+	public void setMeasurements(List<Measurement> measurements) {
+		this.measurements = measurements;
+	}
+
+	public void setOrdered(Map<ContextType, ContextRoot> orderedContext) {
+		this.orderedContext = orderedContext;
+	}
+
+	public void setMeasured(Map<ContextType, ContextRoot> measuredContext) {
+		this.measuredContext = measuredContext;
+	}
+
+	public Map<ContextType, ContextRoot> getMeasuredContext() {
+		return measuredContext;
+	}
+
+	public Map<ContextType, ContextRoot> getOrderedContext() {
+		return orderedContext;
+	}
+
+	/**
+	 * @return a list with all entities (TestStep, Measurements, ContextRoots)
+	 */
+	public List<Entity> getEntities() {
+		List<Entity> entities = new ArrayList<>();
+
+		entities.addAll(orderedContext.values());
+		entities.addAll(measuredContext.values());
+		entities.add(getTestStep());
+		entities.addAll(getMeasurements());
+
+		return entities;
+	}
+
+	/**
+	 * @return optional Measurement if existing
+	 */
+	public Optional<Measurement> getAnyMeasurement() {
+		if (measurements.isEmpty()) {
+			return Optional.empty();
+		} else {
+			return Optional.of(measurements.get(0));
+		}
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/service/EntityService.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/service/EntityService.java
new file mode 100644
index 0000000..6977e24
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/service/EntityService.java
@@ -0,0 +1,739 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.service;
+
+import static io.vavr.API.$;
+import static io.vavr.API.Case;
+import static io.vavr.API.Tuple;
+import static io.vavr.Predicates.instanceOf;
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.ENTITYATTRIBUTE_NAME;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.Core;
+import org.eclipse.mdm.api.base.adapter.EntityStore;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.BaseEntity;
+import org.eclipse.mdm.api.base.model.ContextComponent;
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.EnumRegistry;
+import org.eclipse.mdm.api.base.model.EnumerationValue;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.CatalogAttribute;
+import org.eclipse.mdm.api.dflt.model.CatalogComponent;
+import org.eclipse.mdm.api.dflt.model.CatalogSensor;
+import org.eclipse.mdm.api.dflt.model.EntityFactory;
+import org.eclipse.mdm.api.dflt.model.TemplateAttribute;
+import org.eclipse.mdm.api.dflt.model.TemplateComponent;
+import org.eclipse.mdm.api.dflt.model.TemplateRoot;
+import org.eclipse.mdm.api.dflt.model.TemplateSensor;
+import org.eclipse.mdm.api.dflt.model.TemplateTest;
+import org.eclipse.mdm.api.dflt.model.TemplateTestStepUsage;
+import org.eclipse.mdm.api.dflt.model.ValueList;
+import org.eclipse.mdm.api.dflt.model.ValueListValue;
+import org.eclipse.mdm.businessobjects.control.I18NActivity;
+import org.eclipse.mdm.businessobjects.control.MDMEntityAccessException;
+import org.eclipse.mdm.businessobjects.control.NavigationActivity;
+import org.eclipse.mdm.businessobjects.control.SearchActivity;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.eclipse.mdm.businessobjects.utils.EntityNotFoundException;
+import org.eclipse.mdm.businessobjects.utils.ReflectUtil;
+import org.eclipse.mdm.businessobjects.utils.RequestBody;
+import org.eclipse.mdm.businessobjects.utils.Serializer;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.vavr.CheckedFunction0;
+import io.vavr.Function0;
+import io.vavr.Tuple;
+import io.vavr.Tuple2;
+import io.vavr.Value;
+import io.vavr.collection.HashMap;
+import io.vavr.collection.List;
+import io.vavr.collection.Map;
+import io.vavr.collection.Seq;
+import io.vavr.collection.Set;
+import io.vavr.collection.Stream;
+import io.vavr.control.Option;
+import io.vavr.control.Try;
+
+/**
+ * Class providing basic data access methods to {@link Entity}s.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+@Stateless
+public class EntityService {
+
+	@Inject
+	private ConnectorService connectorService;
+
+	@EJB
+	private SearchActivity searchActivity;
+
+	@EJB
+	private NavigationActivity navigationActivity;
+
+	@EJB
+	private I18NActivity i18nActivity;
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(EntityService.class);
+
+	/**
+	 * Converts a {@code value} into a {@link Value}. If {@code value} is
+	 * {@code null}, {@code Value.isEmpty() == true}.
+	 * 
+	 * @param value the value to wrap in a {@link Value}
+	 * @return the created {@link Value}
+	 */
+	// TODO anehmer on 2017-11-26: rename to toValue()?
+	public static <T> Value<T> V(T value) {
+		return Option.of(value);
+	}
+
+	/**
+	 * Converts the given string values into a {@link Seq} of {@link Value}s
+	 * wrapping the value.
+	 * 
+	 * @param value the {@link Value}s to put in a {@link Seq}
+	 * @return the created {@link Seq} of {@link Value}s
+	 */
+	public static Seq<Value<String>> SL(String... values) {
+		return List.of(values).map(Option::of);
+	}
+
+	/**
+	 * Converts the given string {@link Value}s into a {@link Seq} of string
+	 * {@link Value}s.
+	 * 
+	 * @param value the {@link Value}s to put in a {@link Seq}
+	 * @return the created {@link Seq} of {@link Value}s
+	 */
+	@SafeVarargs
+	public static Seq<Value<String>> SL(Value<String>... values) {
+		return List.of(values);
+	}
+
+	/**
+	 * Converts the given {@link Value}s into a {@link Seq} of {@link Value}s.
+	 * 
+	 * @param value the {@link Value}s to put in a {@link Seq}
+	 * @return the created {@link Seq} of {@link Value}s
+	 */
+	@SafeVarargs
+	public static Seq<Value<?>> L(Value<?>... values) {
+		return List.of(values);
+	}
+
+	/**
+	 * @see #find(Value, Class, Value, Value, Value...)
+	 */
+	public <T extends Entity> Try<T> find(Value<String> sourceNameSupplier, Class<T> entityClass,
+			Value<String> idSupplier) {
+		return find(sourceNameSupplier, entityClass, idSupplier, (Value<ContextType>) null, null);
+	}
+
+	/**
+	 * @see #find(Value, Class, Value, Value, Value...)
+	 */
+	public <T extends Entity> Try<T> find(Value<String> sourceNameSupplier, Class<T> entityClass,
+			Value<String> idSupplier, Seq<Value<String>> parentIdSuppliers) {
+		return find(sourceNameSupplier, entityClass, idSupplier, (Value<ContextType>) null, parentIdSuppliers);
+	}
+
+	/**
+	 * @see #find(Value, Class, Value, Value, Value...)
+	 */
+	public <T extends Entity> Try<T> find(Value<String> sourceNameSupplier, Class<T> entityClass,
+			Value<String> idSupplier, Value<ContextType> contextTypeSupplier) {
+		return find(sourceNameSupplier, entityClass, idSupplier, contextTypeSupplier, null);
+	}
+
+	/**
+	 * Returns the specified entity by given {@code entityClass} and given
+	 * {@code id}. If the {@code entityClass} is either {@link CatalogAttribute},
+	 * {@link TemplateCompont}, {@link TemplateAttributeAttribute} or
+	 * {@link ContextComponent} the respective root entities
+	 * {@link CatalogComponent}, {@link TemplateRoot} or {@link ContextRoot} are
+	 * used to get the entity to find.
+	 * 
+	 * @param sourceNameSupplier  {@link Value} with the name of the source (MDM
+	 *                            {@link Environment} name)
+	 * @param entityClass         entityType
+	 * @param idSupplier          {@link Value} with id of entity to find
+	 * @param contextTypeSupplier {@link Value} with the contextType of entity to
+	 *                            find. Can be {@code null} if {@code EntityType}
+	 *                            has no {@code ContextType}.
+	 * @param parentIdSuppliers   {@link Value}s with the id(s) of parent(s). For
+	 *                            {@link CatalogAttribute} the parentId must be the
+	 *                            id of the {@link CatalogComponent}, for
+	 *                            {@link TemplateComponent} it must be the id of the
+	 *                            {@link TemplateRoot}, for
+	 *                            {@link TemplateAttribute} it must be the id of the
+	 *                            {@link TemplateRoot} first and also the
+	 *                            {@link TemplateComponent}, for a nested
+	 *                            {@link TemplateComponent} it must be the id of the
+	 *                            {@link TemplateRoot} first and the id of the
+	 *                            parent {@link TemplateComponent} second, for a
+	 *                            {@link TemplateAttribute} within a nested
+	 *                            {@link TemplateComponent} it must be the id of the
+	 *                            {@link TemplateRoot} first, the id of the parent
+	 *                            {@link TemplateComponent} second and the id of the
+	 *                            {@link TemplateComponent} last and for
+	 *                            {@link ContextComponent} it must be the id of the
+	 *                            {@link ContextRoot}.
+	 * @return {@link Try} with the found entity
+	 */
+	// TODO anehmer on 2017-11-22: complete javadoc for ValueListValue and
+	// TemplateTestStepUsage
+	// TODO anehmer on 2017-11-22: add comment for parentIds for TplSensors and
+	// nested TplSensors as well as for TplSensorAttrs and nested TplSensorAttrs
+	@SuppressWarnings("unchecked")
+	public <T extends Entity> Try<T> find(Value<String> sourceNameSupplier, Class<T> entityClass,
+			Value<String> idSupplier, Value<ContextType> contextTypeSupplier, Seq<Value<String>> parentIdSuppliers) {
+
+		// validate parentIds count
+		Map<Class<?>, Integer> minParentsForEntity = HashMap.empty();
+		minParentsForEntity = minParentsForEntity.put(Tuple(CatalogAttribute.class, 1))
+				.put(Tuple(CatalogSensor.class, 1)).put(Tuple(TemplateComponent.class, 1))
+				.put(Tuple(TemplateAttribute.class, 2)).put(Tuple(TemplateSensor.class, 2))
+				.put(Tuple(ValueListValue.class, 1)).put(Tuple(TemplateTestStepUsage.class, 1));
+
+		// return failure if number of parentIds do not correspond with the minimu
+		// required by the entity type
+		Option<Integer> minParents = minParentsForEntity.get(entityClass);
+		// TODO anehmer on 2017-11-25: add entity types to message
+		if (minParents.isDefined() && (parentIdSuppliers == null || minParents.get() > parentIdSuppliers.size())) {
+			return Try.failure(new IllegalArgumentException("ParentId(s) of " + entityClass.getSimpleName()
+					+ " not set appropriately. Expected minimum: " + minParents.get()));
+		}
+
+		// if the find is contextType specific
+		if (contextTypeSupplier != null && !contextTypeSupplier.isEmpty()) {
+			if (entityClass.equals(CatalogAttribute.class)) {
+				// get CatalogAttribute from CatalogComponent
+				if (parentIdSuppliers.size() == 1) {
+					return find(sourceNameSupplier, CatalogComponent.class, parentIdSuppliers.get(0),
+							contextTypeSupplier)
+									.map(catComp -> (T) getChild(CatalogAttribute.class, idSupplier,
+											catComp::getCatalogAttributes));
+				}
+				// get the CatalogAttribute from a CatalogSensor
+				else if (parentIdSuppliers.size() == 2) {
+					return find(sourceNameSupplier, CatalogSensor.class, parentIdSuppliers.get(1), contextTypeSupplier,
+							parentIdSuppliers.dropRight(1))
+									.map(catComp -> (T) getChild(CatalogAttribute.class, idSupplier,
+											catComp::getCatalogAttributes));
+				}
+			}
+
+			// get CatalogSensor from CatalogComponent
+			else if (entityClass.equals(CatalogSensor.class)) {
+				return find(sourceNameSupplier, CatalogComponent.class, parentIdSuppliers.get(0), contextTypeSupplier)
+						.map(catComp -> (T) getChild(CatalogSensor.class, idSupplier, catComp::getCatalogSensors));
+			}
+
+			// get TemplateComponent from TemplateRoot or parent TemplateComponent(s)
+			else if (entityClass.equals(TemplateComponent.class)) {
+				// if nested TplComp has to be found
+				if (parentIdSuppliers.size() > 1) {
+					return find(sourceNameSupplier, TemplateComponent.class,
+							parentIdSuppliers.get(parentIdSuppliers.size() - 1), contextTypeSupplier,
+							parentIdSuppliers.dropRight(1))
+									.map(tplComp -> (T) getChild(TemplateComponent.class, idSupplier,
+											tplComp::getTemplateComponents));
+				}
+				// if non-nested TplComp has to be found: exit condition of recursive call
+				return find(sourceNameSupplier, TemplateRoot.class, parentIdSuppliers.get(0), contextTypeSupplier).map(
+						tplRoot -> (T) getChild(TemplateComponent.class, idSupplier, tplRoot::getTemplateComponents));
+			}
+
+			// get TemplateAttributes from TemplateComponent
+			else if (entityClass.equals(TemplateAttribute.class)) {
+				Try<TemplateComponent> tplCompTry = find(sourceNameSupplier, TemplateComponent.class,
+						parentIdSuppliers.get(parentIdSuppliers.size() - 1), contextTypeSupplier,
+						parentIdSuppliers.dropRight(1));
+				// if TemplateSensorAttribute has to be found
+				if (!tplCompTry.isFailure()) {
+					return tplCompTry.map(tplComp -> (T) getChild(TemplateAttribute.class, idSupplier,
+							tplComp::getTemplateAttributes));
+				} else {
+					return find(sourceNameSupplier, TemplateSensor.class,
+							parentIdSuppliers.get(parentIdSuppliers.size() - 1), contextTypeSupplier,
+							parentIdSuppliers.dropRight(1))
+									.map(tplComp -> (T) getChild(TemplateAttribute.class, idSupplier,
+											tplComp::getTemplateAttributes));
+				}
+			}
+
+			// get TemplateSensor from TemplateComponent
+			else if (entityClass.equals(TemplateSensor.class)) {
+				return find(sourceNameSupplier, TemplateComponent.class,
+						parentIdSuppliers.get(parentIdSuppliers.size() - 1), contextTypeSupplier,
+						parentIdSuppliers.dropRight(1)).map(
+								tplComp -> (T) getChild(TemplateSensor.class, idSupplier, tplComp::getTemplateSensors));
+			}
+
+			// get ContextComponent from ContextRoot
+			else if (entityClass.equals(ContextComponent.class)) {
+				// TODO anehmer on 2017-11-09: implement (also for nested ContextComponents)
+				throw new RuntimeException("NOT IMPLEMENTED YET");
+			}
+
+			// get root nested entities (CatalogComponent, TemplateRoot, ContextRoot)
+			return getEntityManager(sourceNameSupplier)
+					.mapTry(em -> em.load(entityClass, contextTypeSupplier.get(), idSupplier.get()));
+		}
+
+		// get ValueListValue from ValueList
+		else if (entityClass.equals(ValueListValue.class)) {
+			return find(sourceNameSupplier, ValueList.class, parentIdSuppliers.get(0))
+					.map(valueList -> (T) getChild(ValueListValue.class, idSupplier, valueList::getValueListValues));
+		}
+
+		// get TemplateTestStepUsage from TemplateTest
+		else if (entityClass.equals(TemplateTestStepUsage.class)) {
+			return find(sourceNameSupplier, TemplateTest.class, parentIdSuppliers.get(0))
+					.map(tplTest -> (T) getChild(TemplateTestStepUsage.class, idSupplier,
+							tplTest::getTemplateTestStepUsages));
+		}
+
+		// for all other cases
+		return getEntityManager(sourceNameSupplier).map(em -> em.load(entityClass, idSupplier.get()));
+	}
+
+	/**
+	 * Gets the child with the given {@code childId} or an EntityNotFoundException
+	 * if the child was not found
+	 * 
+	 * @param childClass      class of child to construct exception on failure
+	 * @param childIdSupplier supplier of the id of child to find
+	 * @param childSupplier   function that gets all children
+	 * @return the found child
+	 */
+	private <T extends Entity> T getChild(Class<T> childClass, Value<String> childIdSupplier,
+			Function0<java.util.List<T>> childSupplier) {
+		return Stream.ofAll(childSupplier.apply())
+				.find(childEntity -> childEntity.getID().equals(childIdSupplier.get()))
+				.getOrElseThrow(() -> new EntityNotFoundException(childClass, childIdSupplier.get()));
+	}
+
+	/**
+	 * Returns a {@link Try} of all {@link Entity}s if no filter is available.
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param entityClass class of the {@link Entity} to find
+	 * @param filter      filter string to filter the {@link Entity} result. Can be
+	 *                    null.
+	 * @return a {@link Try} of the list of found {@link Entity}s
+	 */
+	// TODO anehmer on 2017-11-26: make filter Value<String>
+	public <T extends Entity> Try<List<T>> findAll(Value<String> sourceNameSupplier, Class<T> entityClass,
+			String filter) {
+		return findAll(sourceNameSupplier, entityClass, filter, null);
+	}
+
+	/**
+	 * Returns a {@link Try} of the matching {@link Entity}s of the given
+	 * contextType using the given filter or all {@link Entity}s of the given
+	 * contextType provided by the {@code contextTypeSupplier} if no filter is
+	 * available.
+	 * 
+	 * @param sourceNameSupplier  {@link Value} with the name of the source (MDM
+	 *                            {@link Environment} name)
+	 * @param entityClass         class of the {@link Entity} to find
+	 * @param filter              filter string to filter the {@link Entity} result
+	 * @param contextTypeSupplier a {@link Value} with the contextType of entity to
+	 *                            find. Can be {@code null} if {@code EntityType}
+	 *                            has no {@code ContextType}.
+	 * @return a {@link Try} of the list of found {@link Entity}s
+	 */
+	// TODO anehmer on 2017-11-26: make filter Value<String>
+	public <T extends Entity> Try<List<T>> findAll(Value<String> sourceNameSupplier, Class<T> entityClass,
+			String filter, Value<ContextType> contextTypeSupplier) {
+		// TODO anehmer on 2017-11-22: do we need to implement the navigationActivity
+		// filter shortcut like in ChannelGroupService.getChannelGroups()
+		if (filter == null || filter.trim().length() <= 0) {
+			return Try.of(getLoadAllEntitiesMethod(getEntityManager(sourceNameSupplier).get(), entityClass,
+					contextTypeSupplier)).map(javaList -> List.ofAll(javaList));
+		} else {
+			// TODO anehmer on 2017-11-15: not tested
+			return Try.of(() -> this.searchActivity.search(connectorService.getContextByName(sourceNameSupplier.get()),
+					entityClass, filter)).map(javaList -> List.ofAll(javaList));
+		}
+	}
+
+	/**
+	 * Returns the method to load all entities of type {@code entityClass}. If a
+	 * {@code ContextType} is given the appropriate method in
+	 * {@link org.eclipse.mdm.api.dflt.EntityManager} is used
+	 * 
+	 * @param entityManager entityManager to load entities with
+	 * @param entityClass   class of entites to load
+	 * @param contextType   {@link ContextType} of entities of null if none
+	 * @return the appropriate loadAllEntities() method
+	 */
+	private <T extends Entity> CheckedFunction0<java.util.List<T>> getLoadAllEntitiesMethod(EntityManager entityManager,
+			Class<T> entityClass, Value<ContextType> contextType) {
+		// if contextType is specified
+		if (contextType != null && !contextType.isEmpty()) {
+			return (() -> entityManager.loadAll(entityClass, contextType.get()));
+		}
+		return (() -> entityManager.loadAll(entityClass));
+	}
+
+	/**
+	 * Creates a new {@link Entity} of type entityClass. The method searches the
+	 * {@link EntityFactory} for a suitable create() method by matching the return
+	 * parameter and the given entity class. If more than one method is found, the
+	 * first one is taken. The argument are provided by {@link Try<Object>}s so that
+	 * any exceptions thrown throughout retrieval will be wrapped in the returned
+	 * {@link Try}.
+	 * 
+	 * @param entityClass       class of the {@link Entity} to create
+	 * @param sourceName        name of the source (MDM {@link Environment} name)
+	 * @param argumentSuppliers varargs of {@link Try<?>s that supply the create()
+	 * method arguments
+	 * @return a {@link Try} with the created {@link Entity}
+	 */
+	@SuppressWarnings("unchecked")
+	public <T extends Entity> Try<T> create(Value<String> sourceNameSupplier, Class<T> entityClass,
+			Seq<Value<?>> argumentSuppliers) {
+
+		// get corresponding create method for entityClass from EntityFactory
+		return Try.of(() -> connectorService.getContextByName(sourceNameSupplier.get()).getEntityFactory())
+				.mapTry(factory -> (T) Stream.of(EntityFactory.class.getMethods())
+						// find method with the return type matching entityClass
+						.filter(m -> m.getReturnType().equals(entityClass))
+						.filter(m -> satisfiesParameters(m.getParameterTypes(),
+								argumentSuppliers.map(s -> s.get().getClass())))
+						.getOrElseThrow(
+								() -> new NoSuchMethodException("No matching create()-method found for EntityType "
+										+ entityClass.getSimpleName() + " taking the parameters "
+										+ argumentSuppliers.map(s -> s.get().getClass().getName())
+												.collect(Collectors.joining(", "))))
+						// invoke with given arguments
+						.invoke(factory.get(), argumentSuppliers.map(Value::get).toJavaArray()))
+				.mapFailure(Case($(instanceOf(InvocationTargetException.class)),
+						t -> ((InvocationTargetException) t).getTargetException()), Case($(), t -> t))
+				.map(e -> DataAccessHelper.execute(getEntityManager(sourceNameSupplier).get(), e,
+						DataAccessHelper.CREATE));
+	}
+
+	/**
+	 * Checks if the given parameter types are all assignable from the required
+	 * parameters
+	 * 
+	 * @param parameterTypes
+	 * @param requiredParameters
+	 * @return true if the given parameter types are all assignable from the
+	 *         required parameters
+	 */
+	boolean satisfiesParameters(Class<?>[] parameterTypes, Seq<Class<?>> requiredParameters) {
+		boolean result = parameterTypes.length == requiredParameters.length();
+		result &= List.of(parameterTypes).zip(requiredParameters)
+				.filter(t -> !ReflectUtil.isAssignableTo(t._2(), t._1())).isEmpty();
+		return result;
+	}
+
+	/**
+	 * Updates the given {@link Entity} with the values of the given map provided by
+	 * the {@code valueMapSupplier}.
+	 * 
+	 * @param sourceName       name of the source (MDM {@link Environment} name)
+	 * @param entity           the entity to update
+	 * @param valueMapSupplier {@link Supplier<Map<String, Object>> of a map of
+	 * values to update the entity with according to matching attribute values by
+	 * name case sensitive
+	 * @return a {@link Try} of the updated entity
+	 */
+	public <T extends Entity> Try<T> update(Value<String> sourceNameSupplier, Try<T> entity,
+			Value<Map<String, Object>> valueMapSupplier) {
+		// return updated entity
+		return
+		// update entity values
+		entity.map(e -> updateEntityValues(e, valueMapSupplier.get(), sourceNameSupplier))
+				// persist entity
+				.map(e -> DataAccessHelper.execute(getEntityManager(sourceNameSupplier).get(), e.get(),
+						DataAccessHelper.UPDATE));
+	}
+
+	/**
+	 * Deletes the given {@link Entity} {@code valueMapSupplier}.
+	 * 
+	 * @param sourceName name of the source (MDM {@link Environment} name)
+	 * @param entity     the entity to delete
+	 * @return a {@link Try} of the deleted entity
+	 */
+	public <T extends Entity> Try<T> delete(Value<String> sourceNameSupplier, Try<T> entity) {
+		return entity.map(
+				e -> DataAccessHelper.execute(getEntityManager(sourceNameSupplier).get(), e, DataAccessHelper.DELETE));
+	}
+
+	/**
+	 * Returns a {@link Try} of the the {@link SearchAttribute}s for the given
+	 * entityClass
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param entityClass class of the {@link Entity} to get the
+	 *                    {@link SearchAttribute}s for
+	 * 
+	 * @return a {@link Try} with the {@link SearchAttribute}s
+	 */
+	public <T extends Entity> Try<List<SearchAttribute>> getSearchAttributesSupplier(Value<String> sourceNameSupplier,
+			Class<T> entityClass) {
+		return Try.of(() -> List.ofAll(this.searchActivity
+				.listAvailableAttributes(connectorService.getContextByName(sourceNameSupplier.get()), entityClass)));
+	}
+
+	/**
+	 * Returns a {@link Try} of the localized {@link Entity} type name
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param entityClass class of the {@link Entity} to be localized
+	 * 
+	 * @return a {@link Try} with the localized {@link Entity} type name
+	 */
+	public <T extends Entity> Try<Map<EntityType, String>> getLocalizeTypeSupplier(Value<String> sourceNameSupplier,
+			Class<T> entityClass) {
+		return Try.of(() -> HashMap.ofAll(this.i18nActivity.localizeType(sourceNameSupplier.get(), entityClass)));
+	}
+
+	/**
+	 * Returns a {@link Try} of the localized {@link Entity} attributes
+	 * 
+	 * @param sourceName  name of the source (MDM {@link Environment} name)
+	 * @param entityClass class of the {@link Entity} to be localized
+	 * @return a {@link Try} with the the localized {@link Entity} attributes
+	 */
+	public <T extends Entity> Try<Map<Attribute, String>> getLocalizeAttributesSupplier(
+			Value<String> sourceNameSupplier, Class<T> entityClass) {
+		return Try.of(() -> HashMap.ofAll(this.i18nActivity.localizeAttributes(sourceNameSupplier.get(), entityClass)));
+	}
+
+	/**
+	 * Returns a {@link Try} of an {@link EnumerationValue} for the name supplied by
+	 * the {@code enumValueNameSupplier}
+	 * 
+	 * @param enumValueNameSupplier supplies the name of the
+	 *                              {@link EnumerationValue} to get
+	 * @return a {@link Try} with the resolved {@link EnumerationValue}
+	 */
+	public Try<EnumerationValue> getEnumerationValueSupplier(Try<?> enumValueNameSupplier) {
+		return Try.of(() -> EnumRegistry.getInstance().get(EnumRegistry.VALUE_TYPE)
+				.valueOf(enumValueNameSupplier.get().toString()));
+	}
+
+	/**
+	 * Gets the EntityManager from the ConnectorService with the given source name
+	 * provided by the {@code sourceNameSupplier}.
+	 * 
+	 * @param sourceNameSupplier {@link Value} with the name of the datasource to
+	 *                           get EntityManager for
+	 * @return the found EntityManager. Throws {@link MDMEntityAccessException} if
+	 *         not found.
+	 */
+	private Try<EntityManager> getEntityManager(Value<String> sourceNameSupplier) {
+		return Try.of(() -> this.connectorService.getContextByName(sourceNameSupplier.get()).getEntityManager()
+				.orElseThrow(() -> new MDMEntityAccessException("Entity manager not present")));
+	}
+
+	/**
+	 * Updates the given {@link Entity} with the values from the given valueMap. All
+	 * matching attributes (case sensitive) are updated as well as the referenced
+	 * relations by the id of the given
+	 * {@link org.eclipse.mdm.api.base.model.Entity} and the simple class name as
+	 * the key (the data model attribute name is the reference, case sensitive).
+	 * 
+	 * @param entity   the entity to update
+	 * @param valueMap values to update the entity with according to matching
+	 *                 attribute names. The keys are compared case sensitive.
+	 * @return a {@link Try} with the the updated entity
+	 */
+	@SuppressWarnings("unchecked")
+	public <T extends Entity> Try<T> updateEntityValues(T entity, Map<String, Object> valueMap,
+			Value<String> sourceNameSupplier) {
+
+		HashMap<String, org.eclipse.mdm.api.base.model.Value> entityValues = HashMap.ofAll(entity.getValues());
+
+		// update primitive values where the key from the valueMap has a matching entity
+		// value and collect the updated keys
+		Set<String> updatedPrimitiveValues = valueMap
+				.filter((valueMapEntryKey, valueMapEntryValue) -> entityValues.containsKey(valueMapEntryKey)
+						&& !(valueMapEntryValue instanceof java.util.Map))
+				.map((entityValueEntryKey, entityValueEntryValue) -> {
+					entityValues.get(entityValueEntryKey)
+							.forEach(value -> Serializer.applyValue(value, entityValueEntryValue));
+					return new Tuple2<>(entityValueEntryKey, entityValueEntryValue);
+				}).keySet();
+
+		// update enumeration values
+		Set<String> updatedEnumerationValues = valueMap
+				.filter((valueMapEntryKey, valueMapEntryValue) -> entityValues.containsKey(valueMapEntryKey)
+						&& (valueMapEntryValue instanceof java.util.Map))
+				.map((entityValueEntryKey, entityValueEntryValue) -> {
+					entityValues.get(entityValueEntryKey).forEach(value -> {
+						// get key-value-pairs that identify the enum und enumValue
+						String enumName = ((java.util.Map<String, String>) entityValueEntryValue).get("Enumeration");
+						String enumValueName = ((java.util.Map<String, String>) entityValueEntryValue)
+								.get("EnumerationValue");
+
+						if (enumName == null || enumValueName == null) {
+							throw new IllegalArgumentException("EnumerationValue is set by providing a map "
+									+ "containing the keys 'Enumeration' and 'EnumerationValue' "
+									+ "and the respective names as the values");
+						}
+
+						// find enumeration and the enumeration value
+						Option.of(EnumRegistry.getInstance()
+								// get enum
+								.get(enumName)).onEmpty(() -> {
+									throw new IllegalArgumentException("Enumeration [" + enumName + "] not found");
+								})
+								// get enumValue
+								.map(enumeration -> enumeration.valueOf(enumValueName))
+								// if enumValue is not found, null is returned
+								.filter(Objects::nonNull).onEmpty(() -> {
+									throw new IllegalArgumentException("EnumerationValue [" + enumValueName
+											+ "] not found in Enumeration [" + enumName + "]");
+								})
+								// set enumValue
+								.map(enumValue -> {
+									value.set(enumValue);
+									return enumValue;
+								});
+
+					});
+					return new Tuple2<>(entityValueEntryKey, entityValueEntryValue);
+				}).keySet();
+
+		// update the relations and gather the updated keys
+		// use only those keys that have not been updated yet and can be resolved as
+		// class names. If so, try to update accordingly named relation with the entity
+		// found by its id given as the value
+		Set<String> updatedRelations = valueMap
+				.filter((valueMapEntryKey, valueMapEntryValue) -> !updatedPrimitiveValues.contains(valueMapEntryKey)
+						&& !updatedEnumerationValues.contains(valueMapEntryKey))
+				.filter((relatedEntityClassName, relatedEntityId) -> {
+					EntityStore store = getMutableStore(entity);
+
+					ContextType contextType = null;
+					// determine if class has a context type
+					for (ContextType ct : ContextType.values()) {
+						int index = relatedEntityClassName.toUpperCase().indexOf(ct.name());
+						if (index > 0) {
+							contextType = ct;
+							// cut out ContextType
+							relatedEntityClassName = relatedEntityClassName.substring(0, index)
+									+ relatedEntityClassName.substring(index + ct.name().length());
+						}
+					}
+
+					// to have final variables for Try
+					final String processedRelatedEntityClassName = relatedEntityClassName;
+					final ContextType contextTypeIfPresent = contextType;
+
+					// load class from model packages
+					Try<Class<Entity>> updateTry = Try
+							.of(() -> (Class<Entity>) Class
+									.forName("org.eclipse.mdm.api.base.model." + processedRelatedEntityClassName))
+							.orElse(Try.of(() -> (Class<Entity>) Class
+									.forName("org.eclipse.mdm.api.dflt.model." + processedRelatedEntityClassName)))
+							// update related entity by first finding the related entity by its id
+							// use find and store.set() with ContextType if needed
+							.andThenTry(entityClass -> {
+								if (contextTypeIfPresent == null) {
+									store.set(find(sourceNameSupplier, entityClass, V(relatedEntityId.toString()))
+											.onFailure(e -> LOGGER.error(e.getMessage())).get());
+								} else {
+									store.set(
+											find(sourceNameSupplier, entityClass, V(relatedEntityId.toString()),
+													V(contextTypeIfPresent))
+															.onFailure(e -> LOGGER.error(e.getMessage())).get(),
+											contextTypeIfPresent);
+								}
+							}).onFailure(e -> LOGGER.error("Entity of type [" + processedRelatedEntityClassName
+									+ "] and ID " + relatedEntityId + " not found", e));
+
+					return updateTry.isSuccess() ? true : false;
+				}).keySet();
+
+		// return Try.Failure if there are keys that are not present in the entity and
+		// thus are not updated
+		String unmappedKeys = valueMap.filterKeys(key -> !updatedPrimitiveValues.contains(key)
+				&& !updatedEnumerationValues.contains(key) && !updatedRelations.contains(key)).map(Tuple::toString)
+				.collect(Collectors.joining(", "));
+
+		if (unmappedKeys != null && !unmappedKeys.isEmpty()) {
+			return Try.failure(
+					new IllegalArgumentException("ValueMap to update entity contains the following keys that either "
+							+ "have no match in the entity values or relations to update "
+							+ "or an error occurred while finding the related entity: " + unmappedKeys));
+		} else {
+			return Try.of(() -> entity);
+		}
+	}
+
+	/**
+	 * Get the mutableStore from {@link org.eclipse.mdm.api.base.adapter.Core} of
+	 * given {@link org.eclipse.mdm.api.base.model.Entity}
+	 * 
+	 * @param e Entity to get Core of
+	 * @return Core of given Entity
+	 */
+	private static EntityStore getMutableStore(Entity e) {
+		return Try.of(() -> {
+			Method getMetod;
+			try {
+				getMetod = BaseEntity.class.getDeclaredMethod("getCore");
+				getMetod.setAccessible(true);
+			} catch (NoSuchMethodException | SecurityException x) {
+				throw new IllegalStateException(
+						"Unable to load 'getCore()' in class '" + BaseEntity.class.getSimpleName() + "'.", x);
+			}
+			Core core = (Core) getMetod.invoke(e);
+			return core.getMutableStore();
+		}).get();
+	}
+
+	public Seq<Value<?>> extractRequestBody(String body, String sourceName) {
+		return extractRequestBody(body, sourceName, List.empty());
+	}
+
+	// TODO: Clarify which input should be handled.
+	// TODO: Improve error msg?
+	public Seq<Value<?>> extractRequestBody(String body, String sourceName,
+			List<Class<? extends Entity>> entityClasses) {
+		RequestBody requestBody = RequestBody.create(body);
+		List<Try<?>> name = List.of(requestBody.getStringValueSupplier(ENTITYATTRIBUTE_NAME));
+		return entityClasses
+				.map(clazz -> find(V(sourceName), clazz, requestBody.getStringValueSupplier(clazz.getSimpleName())))
+				.foldLeft(name, (l, e) -> l.append(e)).filter(Try::isSuccess).map(Try::toOption);
+	}
+
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/EntityNotFoundException.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/EntityNotFoundException.java
new file mode 100755
index 0000000..b4bc1bd
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/EntityNotFoundException.java
@@ -0,0 +1,49 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.utils;
+
+import org.eclipse.mdm.api.base.model.Entity;
+
+/**
+ * Exception thrown if entity could not be retrieved from the datastore
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+public class EntityNotFoundException extends RuntimeException {
+
+	private static final long serialVersionUID = 6862157710262117670L;
+
+	/**
+	 * Default constructor with causing exception
+	 * 
+	 * @param entityClass Class of entity that could not be found
+	 * @param id          id of entity that could not be found
+	 * @param x           the cause of the exception
+	 */
+	public EntityNotFoundException(Class<? extends Entity> entityClass, String id, Throwable x) {
+		super(entityClass.getSimpleName() + " with ID " + id + " not found.", x);
+	}
+
+	/**
+	 * Default constructor without causing exception
+	 * 
+	 * @param entityClass Class of entity that could not be found
+	 * @param id          id of entity that could not be found
+	 */
+	public EntityNotFoundException(Class<? extends Entity> entityClass, String id) {
+		super(entityClass.getSimpleName() + " with ID " + id + " not found.");
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/EntityTypeUtil.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/EntityTypeUtil.java
new file mode 100644
index 0000000..536eb77
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/EntityTypeUtil.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+package org.eclipse.mdm.businessobjects.utils;
+
+import org.eclipse.mdm.api.base.model.ContextDescribable;
+import org.eclipse.mdm.api.base.model.FilesAttachable;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.businessobjects.control.MDMEntityAccessException;
+
+public class EntityTypeUtil {
+	
+	private static final String ENTITYTYPE_TEST = "TEST";
+	private static final String ENTITYTYPE_TESTSTEP = "TESTSTEP";
+	private static final String ENTITYTYPE_MEASUREMENT = "MEASUREMENT";
+
+	public static Class<? extends FilesAttachable> getFilesAttachableClassByEntityType(String entityType) {
+		Class<? extends FilesAttachable> response;
+		switch (entityType.toUpperCase()) {
+			case ENTITYTYPE_TEST:
+				response = Test.class;
+				break;
+			case ENTITYTYPE_TESTSTEP:
+				response = TestStep.class;
+				break;
+			case ENTITYTYPE_MEASUREMENT:
+				response = Measurement.class;
+				break;
+			default:
+				throw new MDMEntityAccessException("Given entity type is unknown or not implementing FilesAttachable interface.");
+		}
+		return response;
+	}
+	
+	public static Class<? extends ContextDescribable> getContextDescribableClassByEntityType(String entityType) {
+		Class<? extends ContextDescribable> response;
+		switch (entityType.toUpperCase()) {
+			case ENTITYTYPE_TESTSTEP:
+				response = TestStep.class;
+				break;
+			case ENTITYTYPE_MEASUREMENT:
+				response = Measurement.class;
+				break;
+			default:
+				throw new MDMEntityAccessException("Given entity type is unknown or not implementing ContextDescribable interface.");
+		}
+		return response;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/ISODateDeseralizer.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/ISODateDeseralizer.java
new file mode 100755
index 0000000..e3882e2
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/ISODateDeseralizer.java
@@ -0,0 +1,66 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.utils;
+
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.regex.Pattern;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonTokenId;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer;
+
+/**
+ * JSON Deserializer for ISO 8601 compliant dates with format
+ * 
+ * <pre>
+ * yyyy-MM-dd'T'HH:mm:ss'Z'
+ * </pre>
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+class ISODateDeseralizer extends UntypedObjectDeserializer {
+
+	private static final long serialVersionUID = 1L;
+
+	transient DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");
+
+	// use pattern for the dateformat as we only compile this
+	private static final Pattern pattern = Pattern.compile("\\d{4}-\\d{2}-\\d{2}T\\d{2}\\:\\d{2}\\:\\d{2}Z");
+
+	/**
+	 * Deserialize JSON and try to parse every String as an ISO8601 date
+	 */
+	@Override
+	public Object deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
+		// try to parse every string as a date
+		// TODO anehmer on 2018-04-30: this approach could lead to a performance leak as
+		// every incoming string is tried to be converted into a date though the
+		// approach is very generic
+		// Optimized with pre-compiled pattern to avoid random exception throwing
+		if (jp.getCurrentTokenId() == JsonTokenId.ID_STRING && jp.getTextLength() > 0 && pattern.matcher(jp.getText()).matches()) {
+			try {
+				return LocalDateTime.parse(jp.getText(), dateFormatter);
+			} catch (Exception e) {
+				return super.deserialize(jp, ctxt);
+			}
+		} else {
+			return super.deserialize(jp, ctxt);
+		}
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/JsonMessageBodyProvider.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/JsonMessageBodyProvider.java
new file mode 100644
index 0000000..20c21c5
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/JsonMessageBodyProvider.java
@@ -0,0 +1,130 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.utils;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.lang.reflect.Type;
+import java.nio.charset.Charset;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.MessageBodyReader;
+import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Provider;
+
+import com.google.common.base.Charsets;
+import com.google.protobuf.GeneratedMessageV3;
+import com.google.protobuf.Message;
+import com.google.protobuf.util.JsonFormat;
+import com.google.protobuf.util.JsonFormat.Parser;
+import com.google.protobuf.util.JsonFormat.Printer;
+
+/**
+ * MessageBodyProvider for handling json payloads.
+ * 
+ */
+@Provider
+@Consumes(MediaType.APPLICATION_JSON)
+@Produces(MediaType.APPLICATION_JSON)
+public class JsonMessageBodyProvider implements MessageBodyReader<Message>, MessageBodyWriter<Message> {
+
+	private static final Charset charset = Charsets.UTF_8;
+	private Printer jsonPrinter = JsonFormat.printer();
+	private Parser jsonParser = JsonFormat.parser();
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.ws.rs.ext.MessageBodyReader#isReadable(java.lang.Class,
+	 * java.lang.reflect.Type, java.lang.annotation.Annotation[],
+	 * javax.ws.rs.core.MediaType)
+	 */
+	@Override
+	public boolean isReadable(final Class<?> type, final Type genericType, final Annotation[] annotations,
+			final MediaType mediaType) {
+		return Message.class.isAssignableFrom(type);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.ws.rs.ext.MessageBodyReader#readFrom(java.lang.Class,
+	 * java.lang.reflect.Type, java.lang.annotation.Annotation[],
+	 * javax.ws.rs.core.MediaType, javax.ws.rs.core.MultivaluedMap,
+	 * java.io.InputStream)
+	 */
+	@Override
+	public Message readFrom(final Class<Message> type, final Type genericType, final Annotation[] annotations,
+			final MediaType mediaType, final MultivaluedMap<String, String> httpHeaders, final InputStream entityStream)
+			throws IOException {
+		try {
+			final Method newBuilder = type.getMethod("newBuilder");
+			final GeneratedMessageV3.Builder<?> builder = (GeneratedMessageV3.Builder<?>) newBuilder.invoke(type);
+			jsonParser.merge(new InputStreamReader(entityStream, charset), builder);
+			return builder.build();
+		} catch (Exception e) {
+			throw new WebApplicationException(e);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.ws.rs.ext.MessageBodyWriter#getSize(java.lang.Object,
+	 * java.lang.Class, java.lang.reflect.Type, java.lang.annotation.Annotation[],
+	 * javax.ws.rs.core.MediaType)
+	 */
+	@Override
+	public long getSize(final Message m, final Class<?> type, final Type genericType, final Annotation[] annotations,
+			final MediaType mediaType) {
+		return -1;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.ws.rs.ext.MessageBodyWriter#isWriteable(java.lang.Class,
+	 * java.lang.reflect.Type, java.lang.annotation.Annotation[],
+	 * javax.ws.rs.core.MediaType)
+	 */
+	@Override
+	public boolean isWriteable(final Class<?> type, final Type genericType, final Annotation[] annotations,
+			final MediaType mediaType) {
+		return Message.class.isAssignableFrom(type);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.ws.rs.ext.MessageBodyWriter#writeTo(java.lang.Object,
+	 * java.lang.Class, java.lang.reflect.Type, java.lang.annotation.Annotation[],
+	 * javax.ws.rs.core.MediaType, javax.ws.rs.core.MultivaluedMap,
+	 * java.io.OutputStream)
+	 */
+	@Override
+	public void writeTo(final Message m, final Class<?> type, final Type genericType, final Annotation[] annotations,
+			final MediaType mediaType, final MultivaluedMap<String, Object> httpHeaders,
+			final OutputStream entityStream) throws IOException {
+		entityStream.write(jsonPrinter.print(m).getBytes(charset));
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/MDMExceptionMapper.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/MDMExceptionMapper.java
new file mode 100644
index 0000000..99fd5d5
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/MDMExceptionMapper.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+package org.eclipse.mdm.businessobjects.utils;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+import javax.ws.rs.ext.ExceptionMapper;
+import javax.ws.rs.ext.Provider;
+
+import com.google.common.base.Throwables;
+
+@Provider
+public class MDMExceptionMapper implements ExceptionMapper<Throwable> {
+	@Override
+	public Response toResponse(Throwable t) {
+		return Response.status(Status.INTERNAL_SERVER_ERROR).entity(Throwables.getStackTraceAsString(t)).build();
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/PreviewException.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/PreviewException.java
new file mode 100644
index 0000000..d7ad550
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/PreviewException.java
@@ -0,0 +1,33 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.businessobjects.utils;
+
+/**
+ * Thrown to indicate errors while calculating preview values.
+ *
+ */
+public class PreviewException extends RuntimeException {
+
+	private static final long serialVersionUID = -6305539444033722516L;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param message The error message.
+	 */
+	public PreviewException(String message) {
+		super(message);
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/PreviewHelper.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/PreviewHelper.java
new file mode 100644
index 0000000..7f13d26
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/PreviewHelper.java
@@ -0,0 +1,271 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.businessobjects.utils;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.List;
+
+import org.eclipse.mdm.protobuf.Mdm;
+import org.eclipse.mdm.protobuf.Mdm.DateArray;
+import org.eclipse.mdm.protobuf.Mdm.DoubleArray;
+import org.eclipse.mdm.protobuf.Mdm.MeasuredValues;
+import org.eclipse.mdm.protobuf.Mdm.MeasuredValues.Builder;
+import org.eclipse.mdm.protobuf.Mdm.PreviewValuesList;
+import org.eclipse.mdm.protobuf.Mdm.ScalarType;
+
+import com.google.common.primitives.Bytes;
+import com.google.common.primitives.Ints;
+import com.google.protobuf.Timestamp;
+
+/**
+ * Helper class to calculate preview values.
+ *
+ */
+public class PreviewHelper {
+	/**
+	 * Calcluates the preview values for numerical datatypes. For non numberical
+	 * datatypes an empty MeasuredValues object is returned.
+	 * 
+	 * @param measuredValues List of measuredValues containing the mass data for the
+	 *                       preview.
+	 * @param numberOfChunks number of requested chunks for the preview
+	 * @return calculated preview values
+	 */
+	public PreviewValuesList calculatePreview(List<MeasuredValues> measuredValues, int numberOfChunks) {
+		return measuredValues.stream().map(mv -> calculatePreview(mv, numberOfChunks))
+				.reduce(Mdm.PreviewValuesList.newBuilder(), (pl1, pl2) -> {
+					pl1.addAllMin(pl2.getMinList());
+					pl1.addAllMax(pl2.getMaxList());
+					pl1.addAllAvg(pl2.getAvgList());
+					return pl1;
+				}).build();
+	}
+
+	/**
+	 * Calculate preview for one {@link MeasuredValues}
+	 * 
+	 * @param measuredValues measured values
+	 * @param numberOfChunks number of chunks
+	 * @return a builder with the preview values set
+	 */
+	protected Mdm.PreviewValuesList.Builder calculatePreview(Mdm.MeasuredValues measuredValues, int numberOfChunks) {
+		Mdm.MeasuredValues.Builder mv = Mdm.MeasuredValues.newBuilder(measuredValues).setScalarType(ScalarType.DOUBLE);
+
+		switch (mv.getValuesCase()) {
+		case BOOLEAN_ARRAY:
+			return createEmpty(mv.clearBooleanArray());
+		case BYTE_ARRAY:
+			byte[] bytes = measuredValues.getByteArray().getValues().toByteArray();
+			return calculate(mv, numberOfChunks, Bytes.asList(bytes), measuredValues.getFlagsList());
+		case BYTE_STREAM_ARRAY:
+			return createEmpty(mv.clearByteStreamArray());
+		case DATE_ARRAY:
+			List<Timestamp> timestamps = measuredValues.getDateArray().getValuesList();
+			return calculateDate(mv, numberOfChunks, timestamps, measuredValues.getFlagsList());
+		case DOUBLE_ARRAY:
+			return calculate(mv, numberOfChunks, measuredValues.getDoubleArray().getValuesList(),
+					measuredValues.getFlagsList());
+		case DOUBLE_COMPLEX_ARRAY:
+			return createEmpty(mv.clearDoubleComplexArray());
+		case FLOAT_ARRAY:
+			return calculate(mv, numberOfChunks, measuredValues.getFloatArray().getValuesList(),
+					measuredValues.getFlagsList());
+		case FLOAT_COMPLEX_ARRAY:
+			return createEmpty(mv.clearFloatComplexArray());
+		case INTEGER_ARRAY:
+			return calculate(mv, numberOfChunks, measuredValues.getIntegerArray().getValuesList(),
+					measuredValues.getFlagsList());
+		case LONG_ARRAY:
+			return calculate(mv, numberOfChunks, measuredValues.getLongArray().getValuesList(),
+					measuredValues.getFlagsList());
+		case SHORT_ARRAY:
+			return calculate(mv, numberOfChunks, measuredValues.getShortArray().getValuesList(),
+					measuredValues.getFlagsList());
+		case STRING_ARRAY:
+			return createEmpty(mv.clearStringArray());
+		case VALUES_NOT_SET:
+			throw new PreviewException(
+					"Property 'values' of MeasuredValues with name '" + measuredValues.getName() + "' not set.");
+		default:
+			throw new PreviewException(
+					"The value '" + mv.getValuesCase().name() + "' for Property 'values' of MeasuredValues with name '"
+							+ measuredValues.getName() + "' is not supported.");
+		}
+	}
+
+	/**
+	 * Returns an empty builder.
+	 * 
+	 * @param mv
+	 * @return a builder with no values or flags set
+	 */
+	private Mdm.PreviewValuesList.Builder createEmpty(Builder mv) {
+		return Mdm.PreviewValuesList.newBuilder().addMin(mv.clearFlags().clearLength())
+				.addMax(mv.clearFlags().clearLength()).addAvg(mv.clearFlags().clearLength());
+	}
+
+	/**
+	 * Calculates min, max and avg for the given values for all data types except
+	 * DT_DATE (@see this{@link #calculateDate(Builder, int, List, List)})
+	 * 
+	 * @param builder                 a builder to apply the values to.
+	 * @param requestedNumberOfChunks number of chunks to calculate
+	 * @param values                  measurement values
+	 * @param flags                   list with flags
+	 * @return an builder with the calculated values.
+	 */
+	private Mdm.PreviewValuesList.Builder calculate(Mdm.MeasuredValues.Builder builder, int requestedNumberOfChunks,
+			List<? extends Number> values, List<Boolean> flags) {
+
+		if (requestedNumberOfChunks < 1) {
+			throw new PreviewException("Number of chunks requested must be positive!");
+		}
+
+		// numberOfChunks cannot be larger than length of data
+		int numberOfChunks = Math.min(requestedNumberOfChunks, values.size());
+
+		double chunkSize = values.size() / (double) numberOfChunks;
+
+		DoubleArray.Builder minValues = DoubleArray.newBuilder();
+		DoubleArray.Builder avgValues = DoubleArray.newBuilder();
+		DoubleArray.Builder maxValues = DoubleArray.newBuilder();
+
+		for (int chunkIndex = 0; chunkIndex < numberOfChunks; chunkIndex++) {
+			double min = Double.MAX_VALUE;
+			double sum = 0;
+			double max = Double.MIN_VALUE;
+			int count = 0;
+
+			int startIndex = Ints.checkedCast(Math.round(chunkIndex * chunkSize));
+			int endIndex = Ints.checkedCast(Math.round((chunkIndex + 1) * chunkSize));
+
+			for (int valueIndex = startIndex; valueIndex < endIndex; valueIndex++) {
+				if (valueIndex >= flags.size() || flags.get(valueIndex)) {
+					double value = values.get(valueIndex).doubleValue();
+					sum += value;
+					min = Math.min(min, value);
+					max = Math.max(max, value);
+					count++;
+				}
+			}
+
+			minValues.addValues(min);
+			avgValues.addValues(sum / count);
+			maxValues.addValues(max);
+		}
+
+		builder = builder.setLength(numberOfChunks);
+		return PreviewValuesList.newBuilder().addMin(builder.setDoubleArray(minValues))
+				.addAvg(builder.setDoubleArray(avgValues)).addMax(builder.setDoubleArray(maxValues));
+	}
+
+	/**
+	 * Calculates min, max and avg for the given values for all data type DT_DATE.
+	 * 
+	 * @param builder                 a builder to apply the values to.
+	 * @param requestedNumberOfChunks number of chunks to calculate
+	 * @param values                  measurement values
+	 * @param flags                   list with flags
+	 * @return an builder with the calculated values.
+	 */
+	private Mdm.PreviewValuesList.Builder calculateDate(Mdm.MeasuredValues.Builder builder, int numberOfChunks,
+			List<Timestamp> timestamps, List<Boolean> flags) {
+
+		if (numberOfChunks < 1) {
+			throw new PreviewException("Number of chunks requested must be positive!");
+		}
+
+		// numberOfChunks cannot be larger than length of data
+		numberOfChunks = Math.min(numberOfChunks, timestamps.size());
+
+		double chunkSize = timestamps.size() / (double) numberOfChunks;
+
+		DateArray.Builder minValues = DateArray.newBuilder();
+		DateArray.Builder avgValues = DateArray.newBuilder();
+		DateArray.Builder maxValues = DateArray.newBuilder();
+
+		for (int chunkIndex = 0; chunkIndex < numberOfChunks; chunkIndex++) {
+
+			double sumSeconds = 0.0;
+			double sumNanos = 0.0;
+
+			Timestamp max = Timestamp.newBuilder().setSeconds(0L).setNanos(0).build();
+			Timestamp min = Timestamp.newBuilder().setSeconds(Long.MAX_VALUE).setNanos(Integer.MAX_VALUE).build();
+			int count = 0;
+
+			int startIndex = Ints.checkedCast(Math.round(chunkIndex * chunkSize));
+			int endIndex = Ints.checkedCast(Math.round((chunkIndex + 1) * chunkSize));
+
+			for (int valueIndex = startIndex; valueIndex < endIndex; valueIndex++) {
+				if (valueIndex >= flags.size() || flags.get(valueIndex)) {
+					Timestamp value = timestamps.get(valueIndex);
+					sumSeconds += value.getSeconds();
+					sumNanos += value.getNanos();
+					min = min(min, value);
+					max = max(max, value);
+					count++;
+				}
+			}
+			minValues.addValues(min);
+			maxValues.addValues(max);
+
+			BigDecimal c = BigDecimal.valueOf(count);
+			// calculate average and remainder
+			BigDecimal[] avg = BigDecimal.valueOf(sumSeconds).add(BigDecimal.valueOf(sumNanos * 1E-9))
+					.divideAndRemainder(c);
+
+			// the remainder will be converted to nanoseconds
+			avgValues.addValues(Timestamp.newBuilder().setSeconds(avg[0].longValue())
+					.setNanos(avg[1].multiply(BigDecimal.valueOf(1E9)).divide(c, RoundingMode.HALF_UP).intValue()));
+		}
+
+		return PreviewValuesList.newBuilder().addMin(builder.setDateArray(minValues))
+				.addAvg(builder.setDateArray(avgValues)).addMax(builder.setDateArray(maxValues));
+	}
+
+	/**
+	 * Returns the smaller of the given timestamps.
+	 * 
+	 * @param t1 first timestamp
+	 * @param t2 second timestamp
+	 * @return t1, if t1 before t2 else t2
+	 */
+	private Timestamp min(Timestamp t1, Timestamp t2) {
+		if (t1.getSeconds() < t2.getSeconds()) {
+			return t1;
+		} else if (t1.getSeconds() > t2.getSeconds()) {
+			return t2;
+		} else {
+			return t1.getNanos() <= t2.getNanos() ? t1 : t2;
+		}
+	}
+
+	/**
+	 * Returns the larger of the given timestamps.
+	 * 
+	 * @param t1 first timestamp
+	 * @param t2 second timestamp
+	 * @return t1, if t1 after t2 else t2
+	 */
+	private Timestamp max(Timestamp t1, Timestamp t2) {
+		if (t1.getSeconds() > t2.getSeconds()) {
+			return t1;
+		} else if (t1.getSeconds() < t2.getSeconds()) {
+			return t2;
+		} else {
+			return t1.getNanos() >= t2.getNanos() ? t1 : t2;
+		}
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/ProtobufConverter.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/ProtobufConverter.java
new file mode 100644
index 0000000..f3d58b4
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/ProtobufConverter.java
@@ -0,0 +1,442 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.utils;
+
+import java.io.ByteArrayOutputStream;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.ZoneOffset;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import org.eclipse.mdm.api.base.ServiceNotProvidedException;
+import org.eclipse.mdm.api.base.massdata.ReadRequest;
+import org.eclipse.mdm.api.base.massdata.ReadRequest.ValuesMode;
+import org.eclipse.mdm.api.base.massdata.ReadRequestBuilder;
+import org.eclipse.mdm.api.base.model.AxisType;
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.DoubleComplex;
+import org.eclipse.mdm.api.base.model.FloatComplex;
+import org.eclipse.mdm.api.base.model.MeasuredValues;
+import org.eclipse.mdm.api.base.model.MeasuredValues.ValueIterator;
+import org.eclipse.mdm.api.base.model.ScalarType;
+import org.eclipse.mdm.api.base.model.Unit;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.protobuf.Mdm;
+import org.eclipse.mdm.protobuf.Mdm.BooleanArray;
+import org.eclipse.mdm.protobuf.Mdm.ByteArray;
+import org.eclipse.mdm.protobuf.Mdm.ByteStreamArray;
+import org.eclipse.mdm.protobuf.Mdm.DateArray;
+import org.eclipse.mdm.protobuf.Mdm.DoubleArray;
+import org.eclipse.mdm.protobuf.Mdm.DoubleComplexArray;
+import org.eclipse.mdm.protobuf.Mdm.FloatArray;
+import org.eclipse.mdm.protobuf.Mdm.FloatComplexArray;
+import org.eclipse.mdm.protobuf.Mdm.IntegerArray;
+import org.eclipse.mdm.protobuf.Mdm.LongArray;
+import org.eclipse.mdm.protobuf.Mdm.MeasuredValuesList;
+import org.eclipse.mdm.protobuf.Mdm.ShortArray;
+import org.eclipse.mdm.protobuf.Mdm.StringArray;
+
+import com.google.common.base.Strings;
+import com.google.common.primitives.Doubles;
+import com.google.protobuf.ByteString;
+import com.google.protobuf.Timestamp;
+
+/**
+ * Helper class for converting between protobuf and mdm types.
+ *
+ */
+public class ProtobufConverter {
+
+	/**
+	 * Converted a DateArray to an array of {@link LocalDateTime}
+	 * 
+	 * @param dateArray
+	 * @param zoneId
+	 * @return array of {@link LocalDateTime}
+	 */
+	public static LocalDateTime[] convertDates(DateArray dateArray, ZoneId zoneId) {
+		LocalDateTime[] strings = new LocalDateTime[dateArray.getValuesCount()];
+		for (int i = 0; i < dateArray.getValuesCount(); i++) {
+			Timestamp ts = dateArray.getValues(i);
+			strings[i] = Instant.ofEpochSecond(ts.getSeconds(), ts.getNanos()).atZone(zoneId).toLocalDateTime();
+		}
+		return strings;
+	}
+
+	/**
+	 * Converts a {@link StringArray} to an array of strings
+	 * 
+	 * @param stringArray
+	 * @return array of strings
+	 */
+	public static String[] convertStrings(StringArray stringArray) {
+		String[] strings = new String[stringArray.getValuesCount()];
+		for (int i = 0; i < stringArray.getValuesCount(); i++) {
+			strings[i] = stringArray.getValues(i);
+		}
+		return strings;
+	}
+
+	/**
+	 * Converts a list of {@link org.eclipse.mdm.protobuf.Mdm.FloatComplex} to an
+	 * array of {@link FloatComplex}
+	 * 
+	 * @param valuesList
+	 * @return array of {@link FloatComplex}
+	 */
+	public static FloatComplex[] convertFloatComplex(List<org.eclipse.mdm.protobuf.Mdm.FloatComplex> valuesList) {
+		FloatComplex[] floatComplexes = new FloatComplex[valuesList.size()];
+		for (int i = 0; i < valuesList.size(); i++) {
+			floatComplexes[i] = new FloatComplex(valuesList.get(i).getRe(), valuesList.get(i).getIm());
+		}
+		return floatComplexes;
+	}
+
+	/**
+	 * Converts a list of {@link org.eclipse.mdm.protobuf.Mdm.DoubleComplex} to an
+	 * array of {@link DoubleComplex}
+	 * 
+	 * @param valuesList
+	 * @return array of {@link DoubleComplex}
+	 */
+	public static DoubleComplex[] convertDoubleComplex(List<org.eclipse.mdm.protobuf.Mdm.DoubleComplex> valuesList) {
+		DoubleComplex[] doubleComplexes = new DoubleComplex[valuesList.size()];
+		for (int i = 0; i < valuesList.size(); i++) {
+			doubleComplexes[i] = new DoubleComplex(valuesList.get(i).getRe(), valuesList.get(i).getIm());
+		}
+		return doubleComplexes;
+	}
+
+	/**
+	 * Converts a list of {@link ByteString} to an array of array of byte.
+	 * 
+	 * @param valuesList
+	 * @return array of array of byte.
+	 */
+	public static byte[][] convertByteStreams(List<ByteString> valuesList) {
+		byte[][] byteStreams = new byte[valuesList.size()][];
+		for (int i = 0; i < valuesList.size(); i++) {
+			byteStreams[i] = valuesList.get(i).toByteArray();
+		}
+		return byteStreams;
+	}
+
+	/**
+	 * Converts an {@link org.eclipse.mdm.protobuf.Mdm.AxisType} to {@link AxisType}
+	 * 
+	 * @param axisType
+	 * @return converted {@link AxisType}
+	 */
+	public static AxisType convert(Mdm.AxisType axisType) {
+		switch (axisType) {
+		case X_AXIS:
+			return AxisType.X_AXIS;
+		case Y_AXIS:
+			return AxisType.Y_AXIS;
+		case XY_AXIS:
+			return AxisType.XY_AXIS;
+		default:
+			throw new RuntimeException("Invalid value for AxisType: " + axisType.name());
+		}
+	}
+
+	/**
+	 * Converts an {@link org.eclipse.mdm.protobuf.Mdm.ScalarType} to a
+	 * {@link ScalarType}.
+	 * 
+	 * @param scalarType
+	 * @return converted {@link ScalarType}
+	 */
+	public static ScalarType convert(Mdm.ScalarType scalarType) {
+		switch (scalarType) {
+		case STRING:
+			return ScalarType.STRING;
+		case DATE:
+			return ScalarType.DATE;
+		case BOOLEAN:
+			return ScalarType.BOOLEAN;
+		case BYTE:
+			return ScalarType.BYTE;
+		case SHORT:
+			return ScalarType.SHORT;
+		case INTEGER:
+			return ScalarType.INTEGER;
+		case LONG:
+			return ScalarType.LONG;
+		case FLOAT:
+			return ScalarType.FLOAT;
+		case DOUBLE:
+			return ScalarType.DOUBLE;
+		case BYTE_STREAM:
+			return ScalarType.BYTE_STREAM;
+		case FLOAT_COMPLEX:
+			return ScalarType.FLOAT_COMPLEX;
+		case DOUBLE_COMPLEX:
+			return ScalarType.DOUBLE_COMPLEX;
+		case ENUMERATION:
+			return ScalarType.ENUMERATION;
+		case FILE_LINK:
+			return ScalarType.FILE_LINK;
+		case BLOB:
+			return ScalarType.BLOB;
+		case UNKNOWN:
+			return ScalarType.UNKNOWN;
+		default:
+			throw new RuntimeException("Invalid value for ScalarType: " + scalarType.name());
+		}
+	}
+
+	/**
+	 * Converts a list of {@link MeasuredValues} to a {@link MeasuredValuesList}
+	 * 
+	 * @param measuredValues
+	 * @return converted {@link MeasuredValuesList}
+	 */
+	public static MeasuredValuesList convert(List<MeasuredValues> measuredValues) {
+		MeasuredValuesList.Builder builder = MeasuredValuesList.newBuilder();
+		for (MeasuredValues m : measuredValues) {
+			builder.addValues(convert(m));
+		}
+		return builder.build();
+	}
+
+	/**
+	 * Converts {@link MeasuredValues} to
+	 * {@link org.eclipse.mdm.protobuf.Mdm.MeasuredValues}
+	 * 
+	 * @param m
+	 * @return converted {@link org.eclipse.mdm.protobuf.Mdm.MeasuredValues}
+	 */
+	public static Mdm.MeasuredValues convert(MeasuredValues m) {
+
+		Mdm.MeasuredValues.Builder builder = Mdm.MeasuredValues.newBuilder().setName(m.getName()).setUnit(m.getUnit())
+				.setLength(m.getLength()).setAxisType(convert(m.getAxisType())).setIndependent(m.isIndependent())
+				.setScalarType(Mdm.ScalarType.valueOf(m.getScalarType().name()))
+				.addAllGenerationParameters(Doubles.asList(m.getGenerationParameters()));
+
+		BooleanArray.Builder flags = BooleanArray.newBuilder();
+		ValueIterator<Object> it = m.iterator();
+
+		if (m.getScalarType().isString()) {
+			StringArray.Builder strings = StringArray.newBuilder();
+			while (it.hasNext()) {
+				flags.addValues(it.isValid());
+				strings.addValues((String) it.next());
+			}
+			builder.setStringArray(strings);
+		} else if (m.getScalarType().isDate()) {
+			DateArray.Builder dates = DateArray.newBuilder();
+			while (it.hasNext()) {
+				flags.addValues(it.isValid());
+				LocalDateTime t = (LocalDateTime) it.next();
+				Instant time = t.toInstant(ZoneOffset.UTC);
+				dates.addValues(
+						Timestamp.newBuilder().setSeconds(time.getEpochSecond()).setNanos(time.getNano()).build());
+			}
+			builder.setDateArray(dates);
+		} else if (m.getScalarType().isBoolean()) {
+			BooleanArray.Builder booleans = BooleanArray.newBuilder();
+			while (it.hasNext()) {
+				flags.addValues(it.isValid());
+				booleans.addValues((boolean) it.next());
+			}
+			builder.setBooleanArray(booleans);
+		} else if (m.getScalarType().isByte()) {
+			ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+			while (it.hasNext()) {
+				flags.addValues(it.isValid());
+				bytes.write((byte) it.next());
+			}
+			builder.setByteArray(ByteArray.newBuilder().setValues(ByteString.copyFrom(bytes.toByteArray())));
+		} else if (m.getScalarType().isShort()) {
+			ShortArray.Builder shorts = ShortArray.newBuilder();
+			while (it.hasNext()) {
+				flags.addValues(it.isValid());
+				shorts.addValues((short) it.next());
+			}
+			builder.setShortArray(shorts);
+		} else if (m.getScalarType().isInteger()) {
+			IntegerArray.Builder ints = IntegerArray.newBuilder();
+			while (it.hasNext()) {
+				flags.addValues(it.isValid());
+				int i = (int) it.next();
+				ints.addValues(i);
+			}
+			builder.setIntegerArray(ints);
+		} else if (m.getScalarType().isLong()) {
+			LongArray.Builder ints = LongArray.newBuilder();
+			while (it.hasNext()) {
+				flags.addValues(it.isValid());
+				ints.addValues((long) it.next());
+			}
+			builder.setLongArray(ints);
+		} else if (m.getScalarType().isFloat()) {
+			FloatArray.Builder floats = FloatArray.newBuilder();
+			while (it.hasNext()) {
+				flags.addValues(it.isValid());
+				floats.addValues((float) it.next());
+			}
+			builder.setFloatArray(floats);
+		} else if (m.getScalarType().isDouble()) {
+			DoubleArray.Builder doubles = DoubleArray.newBuilder();
+			while (it.hasNext()) {
+				flags.addValues(it.isValid());
+				doubles.addValues((double) it.next());
+			}
+			builder.setDoubleArray(doubles);
+		} else if (m.getScalarType().isByteStream()) {
+			ByteStreamArray.Builder bytestrs = ByteStreamArray.newBuilder();
+			while (it.hasNext()) {
+				flags.addValues(it.isValid());
+				bytestrs.addValues(ByteString.copyFrom((byte[]) it.next()));
+			}
+			builder.setByteStreamArray(bytestrs);
+		} else if (m.getScalarType().isFloatComplex()) {
+			FloatComplexArray.Builder floats = FloatComplexArray.newBuilder();
+			while (it.hasNext()) {
+				flags.addValues(it.isValid());
+				floats.addValues(convert((FloatComplex) it.next()));
+			}
+			builder.setFloatComplexArray(floats);
+		} else if (m.getScalarType().isDoubleComplex()) {
+			DoubleComplexArray.Builder doubles = DoubleComplexArray.newBuilder();
+			while (it.hasNext()) {
+				flags.addValues(it.isValid());
+				doubles.addValues(convert((DoubleComplex) it.next()));
+			}
+			builder.setDoubleComplexArray(doubles);
+		} else {
+			throw new IllegalArgumentException(
+					"MeasuredValues with scalarType '" + m.getScalarType() + "' not supported!");
+		}
+		builder.addAllFlags(flags.getValuesList());
+
+		return builder.build();
+	}
+
+	/**
+	 * Converts between FloatComplex.
+	 * 
+	 * @param complex
+	 * @return
+	 */
+	public static Mdm.FloatComplex convert(FloatComplex complex) {
+		return Mdm.FloatComplex.newBuilder().setRe(complex.real()).setIm(complex.imaginary()).build();
+	}
+
+	/**
+	 * Converts between DoubleComplex.
+	 * 
+	 * @param complex
+	 * @return
+	 */
+	public static Mdm.DoubleComplex convert(DoubleComplex complex) {
+		return Mdm.DoubleComplex.newBuilder().setRe(complex.real()).setIm(complex.imaginary()).build();
+	}
+
+	/**
+	 * Converts between AxisType.
+	 * 
+	 * @param axisType
+	 * @return
+	 */
+	public static Mdm.AxisType convert(AxisType axisType) {
+		return Mdm.AxisType.valueOf(axisType.name());
+	}
+
+	/**
+	 * Converts between ValuesMode.
+	 * 
+	 * @param valuesMode
+	 * @return
+	 */
+	public static ValuesMode convert(Mdm.ValuesMode valuesMode) {
+		return ValuesMode.valueOf(valuesMode.name());
+	}
+
+	/**
+	 * Converts between ScalarType.
+	 * 
+	 * @param value
+	 * @return
+	 */
+	public static Mdm.ScalarType convert(ScalarType value) {
+		return Mdm.ScalarType.valueOf(value.name());
+	}
+
+	/**
+	 * Converts a {@link org.eclipse.mdm.protobuf.Mdm.ReadRequest} to a
+	 * {@link ReadRequest}
+	 * 
+	 * @param context
+	 * @param protoReadRequest
+	 * @return converted {@link ReadRequest}
+	 */
+	public static ReadRequest convert(ApplicationContext context, Mdm.ReadRequest protoReadRequest) {
+
+		EntityManager em = context.getEntityManager()
+				.orElseThrow(() -> new ServiceNotProvidedException(EntityManager.class));
+
+		ChannelGroup channelGroup = em.load(ChannelGroup.class, protoReadRequest.getChannelGroupId());
+		ReadRequestBuilder rb = ReadRequest.create(channelGroup);
+		if (protoReadRequest.getChannelIdsCount() == 0) {
+			rb = rb.allChannels();
+		} else {
+			// Load Channels and group by ID. If multiple Channels with the same ID are
+			// loaded (which would be incorrect data), only the first one is used.
+			Map<String, Optional<Channel>> channels = em.load(Channel.class, protoReadRequest.getChannelIdsList())
+					.stream().collect(Collectors.groupingBy(Channel::getID, Collectors.reducing((c1, c2) -> c1)));
+
+			// Load Units and group by ID. If multiple Units with the same ID are
+			// loaded (which would be incorrect data), only the first one is used.
+			Map<String, Optional<Unit>> units = em.load(Unit.class, protoReadRequest.getUnitIdsList()).stream()
+					.collect(Collectors.groupingBy(Unit::getID, Collectors.reducing((u1, u2) -> u1)));
+
+			for (int i = 0; i < protoReadRequest.getChannelIdsCount(); i++) {
+				String channelId = protoReadRequest.getChannelIds(i);
+
+				Channel channel = channels.get(channelId).orElseThrow(
+						() -> new IllegalArgumentException("Channel with ID '" + channelId + "' does not exist!"));
+
+				final String unitId;
+				if (i < protoReadRequest.getUnitIdsCount()) {
+					unitId = protoReadRequest.getUnitIds(i);
+				} else {
+					unitId = null;
+				}
+
+				Unit unit;
+
+				if (Strings.isNullOrEmpty(unitId)) {
+					// no unit provided -> use unit from channel
+					unit = channel.getUnit();
+				} else {
+					unit = units.get(unitId).orElseThrow(
+							() -> new IllegalArgumentException("Unit with ID '" + unitId + "' does not exist!"));
+				}
+				rb = rb.channel(channel, unit);
+			}
+		}
+
+		return rb.valuesMode(convert(protoReadRequest.getValuesMode())).values(protoReadRequest.getStartIndex(),
+				protoReadRequest.getRequestSize());
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/ProtobufMessageBodyProvider.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/ProtobufMessageBodyProvider.java
new file mode 100644
index 0000000..0607eca
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/ProtobufMessageBodyProvider.java
@@ -0,0 +1,144 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.utils;
+
+import static org.eclipse.mdm.businessobjects.boundary.ResourceConstants.MEDIATYPE_APPLICATION_PROTOBUF;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Type;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.MessageBodyReader;
+import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Provider;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.io.ByteStreams;
+import com.google.protobuf.AbstractMessage;
+import com.google.protobuf.CodedInputStream;
+import com.google.protobuf.InvalidProtocolBufferException;
+import com.google.protobuf.Message;
+
+/**
+ * MessageBodyProvider for handling protobuf payloads.
+ * 
+ */
+@Provider
+@Consumes({ MEDIATYPE_APPLICATION_PROTOBUF })
+@Produces({ MEDIATYPE_APPLICATION_PROTOBUF })
+public class ProtobufMessageBodyProvider implements MessageBodyReader<Message>, MessageBodyWriter<Message> {
+	private static final Logger LOG = LoggerFactory.getLogger(ProtobufMessageBodyProvider.class);
+
+	private static final int DEFAULT_SIZE_LIMIT = 64 << 20; // 64MB
+	private static final int MAX_SIZE = DEFAULT_SIZE_LIMIT;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.ws.rs.ext.MessageBodyReader#isReadable(java.lang.Class,
+	 * java.lang.reflect.Type, java.lang.annotation.Annotation[],
+	 * javax.ws.rs.core.MediaType)
+	 */
+	@Override
+	public boolean isReadable(final Class<?> type, final Type genericType, final Annotation[] annotations,
+			final MediaType mediaType) {
+		return Message.class.isAssignableFrom(type);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.ws.rs.ext.MessageBodyReader#readFrom(java.lang.Class,
+	 * java.lang.reflect.Type, java.lang.annotation.Annotation[],
+	 * javax.ws.rs.core.MediaType, javax.ws.rs.core.MultivaluedMap,
+	 * java.io.InputStream)
+	 */
+	@Override
+	public Message readFrom(final Class<Message> type, final Type genericType, final Annotation[] annotations,
+			final MediaType mediaType, final MultivaluedMap<String, String> httpHeaders, final InputStream entityStream)
+			throws IOException {
+		try {
+			final Method newBuilder = type.getMethod("newBuilder");
+			final AbstractMessage.Builder<?> builder = (AbstractMessage.Builder<?>) newBuilder.invoke(type);
+
+			CodedInputStream in = CodedInputStream.newInstance(entityStream);
+			in.setSizeLimit(MAX_SIZE);
+
+			byte[] b = ByteStreams.toByteArray(entityStream);
+			LOG.debug("Reading type {} with size {}.", genericType, b.length);
+			return builder.mergeFrom(b).build();
+		} catch (InvalidProtocolBufferException e) {
+			throw new IOException("Could not read Protobuf entity!", e);
+		} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
+			throw new IOException("Could not retrive builder for type " + genericType, e);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.ws.rs.ext.MessageBodyWriter#getSize(java.lang.Object,
+	 * java.lang.Class, java.lang.reflect.Type, java.lang.annotation.Annotation[],
+	 * javax.ws.rs.core.MediaType)
+	 */
+	@Override
+	public long getSize(final Message m, final Class<?> type, final Type genericType, final Annotation[] annotations,
+			final MediaType mediaType) {
+		return -1; // as method is not actually used by JAX-RS
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.ws.rs.ext.MessageBodyWriter#isWriteable(java.lang.Class,
+	 * java.lang.reflect.Type, java.lang.annotation.Annotation[],
+	 * javax.ws.rs.core.MediaType)
+	 */
+	@Override
+	public boolean isWriteable(final Class<?> type, final Type genericType, final Annotation[] annotations,
+			final MediaType mediaType) {
+		return Message.class.isAssignableFrom(type);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.ws.rs.ext.MessageBodyWriter#writeTo(java.lang.Object,
+	 * java.lang.Class, java.lang.reflect.Type, java.lang.annotation.Annotation[],
+	 * javax.ws.rs.core.MediaType, javax.ws.rs.core.MultivaluedMap,
+	 * java.io.OutputStream)
+	 */
+	@Override
+	public void writeTo(final Message m, final Class<?> type, final Type genericType, final Annotation[] annotations,
+			final MediaType mediaType, final MultivaluedMap<String, Object> httpHeaders,
+			final OutputStream entityStream) throws IOException {
+
+		if (LOG.isDebugEnabled()) {
+			LOG.debug("Writing type {} with size {}.", genericType, m.getSerializedSize());
+		}
+		m.writeTo(entityStream);
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/ReflectUtil.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/ReflectUtil.java
new file mode 100644
index 0000000..a56c466
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/ReflectUtil.java
@@ -0,0 +1,63 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.utils;
+
+import io.vavr.collection.HashMap;
+import io.vavr.collection.Map;
+
+/**
+ * Utility class for method reflection
+ * 
+ * @author Johannes Stamm, Peak Solution GmbH Nuernberg
+ *
+ */
+public class ReflectUtil {
+	private static final Map<Class<?>, Class<?>> primitiveWrapperMap = HashMap.of(boolean.class, Boolean.class,
+			byte.class, Byte.class, char.class, Character.class, double.class, Double.class, float.class, Float.class,
+			int.class, Integer.class, long.class, Long.class, short.class, Short.class);
+
+	public static boolean isPrimitiveWrapperOf(Class<?> targetClass, Class<?> primitive) {
+		if (!primitive.isPrimitive()) {
+			throw new IllegalArgumentException("First argument has to be primitive type");
+		}
+		return primitiveWrapperMap.get(primitive).get() == targetClass;
+	}
+
+	/**
+	 * This function returns same value as to.isAssignableFrom(from), except for
+	 * wrapper classes.
+	 * 
+	 * to.isAssignableFrom(from) returns false for wrapper class <-> primitive This
+	 * function returns true in that case.
+	 * 
+	 * @param from class to assign from
+	 * @param to   class to assign to
+	 * @return true if assigning is possible (respecting auto boxing/unboxing) false
+	 *         otherwise
+	 */
+	public static boolean isAssignableTo(Class<?> from, Class<?> to) {
+		if (to.isAssignableFrom(from)) {
+			return true;
+		}
+		if (from.isPrimitive()) {
+			return isPrimitiveWrapperOf(to, from);
+		}
+		if (to.isPrimitive()) {
+			return isPrimitiveWrapperOf(from, to);
+		}
+		return false;
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/RequestBody.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/RequestBody.java
new file mode 100644
index 0000000..61c4841
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/RequestBody.java
@@ -0,0 +1,126 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.utils;
+
+import java.util.NoSuchElementException;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+
+import io.vavr.API;
+import io.vavr.CheckedFunction0;
+import io.vavr.Lazy;
+import io.vavr.collection.HashMap;
+import io.vavr.collection.Map;
+import io.vavr.control.Try;
+
+/**
+ * Class representing the JSON request body as a accessible map of values. The
+ * parsing occurs lazily on first get() on a value and as the {@link Lazy}
+ * result is memoized, the body is only parsed once. Any exceptions due to
+ * parsing or non-existing keys are thrown on get() call.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+public final class RequestBody {
+
+	private Lazy<HashMap<String, Object>> requestBodyMap;
+	private static ObjectMapper mapper;
+
+	static {
+		mapper = new ObjectMapper();
+		SimpleModule simpleModule = new SimpleModule();
+		// disabled deserializer as ContextService.updateContextDescribableContext invokes a parsing of ISO date anyways
+		//simpleModule.addDeserializer(Object.class, new ISODateDeseralizer());
+		mapper.registerModule(simpleModule);
+	}
+
+	/**
+	 * Just hide the default constructor
+	 */
+	private RequestBody() {
+	}
+
+	/**
+	 * Builds RequestBody by using the given function that returns the request body
+	 * as a parsed {@link Map<String, Object>.
+	 * 
+	 * @param requestBodyMapSupplier function that return a {@link Map<String,
+	 *                               Object> with the parsed JSON body
+	 */
+	private RequestBody(CheckedFunction0<HashMap<String, Object>> requestBodyMapSupplier) {
+		// make the function lazily evaluated, so that any parsing exception occur on
+		// first get() on a value
+		// unchecked() makes it possible to trick the compiler to not force us to deal
+		// with the checked exceptions here
+		this.requestBodyMap = Lazy.of(API.unchecked(requestBodyMapSupplier));
+	}
+
+	/**
+	 * Creates a RequestBody
+	 * 
+	 * @param body JSON request body to create RequestBody
+	 * @return the RequestBody
+	 */
+	public static RequestBody create(String requestBodyString) {
+		// create requestbody with a function that parses the json request and
+		// transforms it to a {@link Map<String, Object>
+		return new RequestBody(() -> HashMap
+				.ofAll(mapper.readValue(requestBodyString, new TypeReference<java.util.Map<String, Object>>() {
+				})));
+	}
+
+	/**
+	 * Returns a {@link Try> that holds the string value for the given key. If the
+	 * underlying request body map can be parsed, the appropriate JSON exceptions
+	 * are thrown if get() is called on the {@link Try>. If the key was not found, a
+	 * {@link NoSuchElementException} is thrown correspondingly.
+	 * 
+	 * @param key key to get value for
+	 * @return the string value for the given key
+	 */
+	public Try<String> getStringValueSupplier(String key) {
+		return Try.of(() -> Lazy.of(() -> requestBodyMap.get().get(key).map(Object::toString).onEmpty(() -> {
+			throw new NoSuchElementException("Key [" + key + "] not found in request body.");
+		}).get()).get());
+	}
+
+	/**
+	 * Returns a {@link Try<Object>> that holds the value for the given key. If the
+	 * underlying request body map can be parsed, the appropriate JSON exceptions
+	 * are thrown if get() is called on the {@link Try>. If the key was not found, a
+	 * {@link NoSuchElementException} is thrown correspondingly.
+	 * 
+	 * @param key key to get value for
+	 * @return the value for the given key
+	 */
+	public Try<Object> getValueSupplier(String key) {
+		return Try.of(() -> Lazy.of(() -> requestBodyMap.get().get(key).map(Object::toString).onEmpty(() -> {
+			throw new NoSuchElementException("Key [" + key + "] not found in request body.");
+		}).get()).get());
+	}
+
+	/**
+	 * Returns a {@link Try} of the complete {@link Map<String, Object>} of the
+	 * request body
+	 * 
+	 * @return a {@link Try} of {@link Map<String, Object>} of the request body
+	 */
+	public Try<Map<String, Object>> getValueMapSupplier() {
+		return Try.of(() -> requestBodyMap.get());
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/Serializer.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/Serializer.java
new file mode 100644
index 0000000..998b0aa
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/Serializer.java
@@ -0,0 +1,165 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.businessobjects.utils;
+
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.eclipse.mdm.api.base.model.FileLink;
+import org.eclipse.mdm.api.base.model.MimeType;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.businessobjects.control.MDMEntityAccessException;
+import org.eclipse.mdm.businessobjects.entity.MDMFileLink;
+
+import com.google.common.base.Strings;
+
+/**
+ * Serializer for values.
+ */
+public final class Serializer {
+
+	private static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");
+
+	private Serializer() {
+	}
+
+	public static Object serializeValue(Value value) {
+		if (value.getValueType().isDate()) {
+			return formatter.format(value.extract());
+		} else if (value.getValueType().isFileLink()) {
+			return serializeFileLink(value.extract(ValueType.FILE_LINK));
+		} else if (value.getValueType().isFileLinkSequence()) {
+			return Stream.of(value.extract(ValueType.FILE_LINK_SEQUENCE)).map(Serializer::serializeFileLink)
+					.collect(Collectors.toList());
+		} else {
+			return value.extract().toString();
+		}
+	}
+
+	public static MDMFileLink serializeFileLink(FileLink fileLink) {
+		return new MDMFileLink(fileLink.getRemotePath(), fileLink.getMimeType().toString(), fileLink.getDescription());
+	}
+
+	public static LocalDateTime parseDate(String value) {
+		return LocalDateTime.from(formatter.parse(value));
+	}
+
+	public static void applyValue(org.eclipse.mdm.api.base.model.Value value, Object newValue) {
+		value.set(deserializeValue(value.getValueType(), newValue));
+	}
+
+	public static Object deserializeValue(ValueType<?> type, Object newValue) {
+
+		if (type.isBoolean()) {
+			if (newValue instanceof Number) {
+				return ((Number) newValue).intValue() == 1;
+			} else if (newValue instanceof String) {
+				return Integer.parseInt((String) newValue) == 1;
+			}
+		} else if (type.isByte()) {
+			if (newValue instanceof Number) {
+				return (byte) ((Number) newValue).intValue();
+			} else if (newValue instanceof String) {
+				return Byte.parseByte((String) newValue);
+			}
+		} else if (type.isShort()) {
+			if (newValue instanceof Number) {
+				return (short) ((Number) newValue).intValue();
+			} else if (newValue instanceof String) {
+				return Short.parseShort((String) newValue);
+			}
+		} else if (type.isInteger()) {
+			if (newValue instanceof Number) {
+				return ((Number) newValue).intValue();
+			} else if (newValue instanceof String) {
+				return Integer.parseInt((String) newValue);
+			}
+		} else if (type.isLong()) {
+			if (newValue instanceof Number) {
+				return ((Number) newValue).longValue();
+			} else if (newValue instanceof String) {
+				return Long.parseLong((String) newValue);
+			}
+		} else if (type.isFloat()) {
+			if (newValue instanceof Number) {
+				return ((Number) newValue).floatValue();
+			} else if (newValue instanceof String) {
+				return Float.parseFloat((String) newValue);
+			}
+		} else if (type.isDouble()) {
+			if (newValue instanceof Number) {
+				return ((Number) newValue).doubleValue();
+			} else if (newValue instanceof String) {
+				return Double.parseDouble((String) newValue);
+			}
+		} else if (type.isDate()) {
+			if (newValue instanceof Number) {
+				return LocalDateTime.ofEpochSecond((long) newValue, 0, ZoneOffset.UTC);
+			} else if (newValue instanceof String) {
+				if (Strings.isNullOrEmpty((String) newValue)) {
+					return null;
+				} else {
+					return Serializer.parseDate((String) newValue);
+				}
+			}
+		} else if (type.isFileLink()) {
+			if (newValue instanceof FileLink) {
+				return newValue;
+			} else {
+				return deserializeFileLink(newValue);
+			}
+		} else if (type.isFileLinkSequence()) {
+			if (newValue instanceof FileLink[]) {
+				return newValue;
+			} else if (newValue instanceof List) {
+				if (((List<?>) newValue).isEmpty()) {
+					return new FileLink[0];
+				} else {
+					List<FileLink> fileLinks = new ArrayList<>();
+					for (Object o : (List<?>) newValue) {
+						fileLinks.add(deserializeFileLink(o));
+					}
+					return fileLinks.toArray(new FileLink[0]);
+				}
+			}
+		}
+		// TODO mkoller on 2018-12-06: Missing ValueTypes: ByteStream, Blob,
+		// FloatComplex, DoubleComplex, Enumeration and all sequence
+		// ValueTypes
+		return newValue;
+	}
+
+	private static FileLink deserializeFileLink(Object newValue) {
+
+		if (newValue == null || newValue instanceof String && ((String) newValue).trim().isEmpty()) {
+			return null;
+		} else if (newValue instanceof Map<?, ?>) {
+			Map<?, ?> map = (Map<?, ?>) newValue;
+			String remotePath = Objects.toString(map.get("remotePath"));
+			MimeType mimeType = new MimeType(Objects.toString(map.get("mimeType")));
+			String description = Objects.toString(map.get("description"));
+			return FileLink.newRemote(remotePath, mimeType, description);
+		}
+
+		throw new MDMEntityAccessException("Cannot deserialize FILE_LINK: " + newValue);
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/ServiceUtils.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/ServiceUtils.java
new file mode 100644
index 0000000..d221850
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/businessobjects/utils/ServiceUtils.java
@@ -0,0 +1,345 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.utils;
+
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import javax.ws.rs.core.GenericEntity;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.ServiceNotProvidedException;
+import org.eclipse.mdm.api.base.adapter.Core;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.ModelManager;
+import org.eclipse.mdm.api.base.model.BaseEntity;
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.api.base.query.ComparisonOperator;
+import org.eclipse.mdm.api.base.query.Condition;
+import org.eclipse.mdm.api.base.query.Filter;
+import org.eclipse.mdm.api.base.query.FilterItem;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.*;
+import org.eclipse.mdm.businessobjects.control.FilterParser;
+import org.eclipse.mdm.businessobjects.entity.I18NResponse;
+import org.eclipse.mdm.businessobjects.entity.MDMEntityResponse;
+import org.eclipse.mdm.businessobjects.entity.SearchAttributeResponse;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.slf4j.LoggerFactory;
+
+import io.vavr.Value;
+import io.vavr.collection.Map;
+import io.vavr.collection.Stream;
+import io.vavr.control.Try;
+
+public final class ServiceUtils {
+
+	private ServiceUtils() {
+	}
+
+	/**
+	 * returns true if the given filter String is a parent filter of the given
+	 * parent type
+	 *
+	 * @param em         {@link EntityManager} of the data source
+	 * @param filter     parent filter string to check
+	 * @param parentType class of the parent entity
+	 * @return true if the give filter String is a parent filter
+	 */
+	public static boolean isParentFilter(ApplicationContext context, String filter,
+			Class<? extends Entity> parentType) {
+		ModelManager mm = context.getModelManager()
+				.orElseThrow(() -> new ServiceNotProvidedException(ModelManager.class));
+		EntityType et = mm.getEntityType(parentType);
+
+		Filter f = FilterParser.parseFilterString(mm.listEntityTypes(), filter);
+
+		List<FilterItem> filterItems = f.stream().collect(Collectors.toList());
+
+		if (filterItems.size() == 1 && filterItems.get(0).isCondition()) {
+			Condition c = filterItems.get(0).getCondition();
+			return et.getIDAttribute().equals(c.getAttribute())
+					&& ComparisonOperator.EQUAL.equals(c.getComparisonOperator());
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 * returns the business object ID from a parent filter
+	 *
+	 * @param em         {@link EntityManager} of the data source
+	 * @param filter     parent filter string
+	 * @param parentType parent type to identify the Id attribute name
+	 * @return the extracted business object Id
+	 * @throws IllegalArgumentException if the given filter is not a parent filter,
+	 *                                  this means the filter does not have exactly
+	 *                                  one condition on the parent's ID attribute
+	 *                                  with {@link ComparisonOperator#EQUAL}
+	 */
+	public static String extactIdFromParentFilter(ApplicationContext context, String filter,
+			Class<? extends Entity> parentType) {
+		ModelManager mm = context.getModelManager()
+				.orElseThrow(() -> new ServiceNotProvidedException(ModelManager.class));
+		EntityType et = mm.getEntityType(parentType);
+
+		Filter f = FilterParser.parseFilterString(mm.listEntityTypes(), filter);
+
+		List<FilterItem> filterItems = f.stream().collect(Collectors.toList());
+
+		if (filterItems.size() == 1 && filterItems.get(0).isCondition()) {
+			Condition c = filterItems.get(0).getCondition();
+			if (et.getIDAttribute().equals(c.getAttribute())
+					&& ComparisonOperator.EQUAL.equals(c.getComparisonOperator())) {
+				return c.getValue().extract(ValueType.STRING);
+			}
+		}
+
+		throw new IllegalArgumentException("Cannot extract parent ID. Filter is not a parent filter: " + filter);
+	}
+
+	/**
+	 * Simple workaround for naming mismatch between Adapter and Business object
+	 * names.
+	 * 
+	 * @param entityType entity type
+	 * @return MDM business object name
+	 */
+	public static String workaroundForTypeMapping(EntityType entityType) {
+		switch (entityType.getName()) {
+		case "StructureLevel":
+			return "Pool";
+		case "MeaResult":
+			return "Measurement";
+		case "SubMatrix":
+			return "ChannelGroup";
+		case "MeaQuantity":
+			return "Channel";
+		default:
+			return entityType.getName();
+		}
+	}
+
+	/**
+	 * Builds {@Link Response} from given {@link Entity}
+	 * 
+	 * @param entity {@link Entity} to build {@link Response} from
+	 * @return the build {@link Response}
+	 */
+	public static <T extends Entity> Response buildEntityResponse(T entity, Status status) {
+		if (entity != null) {
+			MDMEntityResponse response = new MDMEntityResponse(entity.getClass(), entity);
+			// TODO anehmer on 2018-02-08: relations should be included in the output
+			GenericEntity<Object> genEntity = new GenericEntity<>(response, response.getClass());
+			return Response.status(status).entity(genEntity).type(MediaType.APPLICATION_JSON).build();
+		} else {
+			return Response.status(Status.NO_CONTENT).type(MediaType.APPLICATION_JSON).build();
+		}
+	}
+
+	/**
+	 * Builds {@Link Response} from given {@link Entity}
+	 * 
+	 * @param entity {@link Entity} to build {@link Response} from
+	 * @return the build {@link Response} or empty response if entities is empty
+	 */
+	public static <T extends Entity> Response buildEntityResponse(io.vavr.collection.List<T> entities, Status status) {
+		if (entities.nonEmpty()) {
+			@SuppressWarnings("unchecked")
+			Class<T> entityClass = (Class<T>) entities.get().getClass();
+			MDMEntityResponse response = new MDMEntityResponse(entityClass, entities.asJava());
+			GenericEntity<Object> genEntity = new GenericEntity<>(response, response.getClass());
+			return Response.status(status).entity(genEntity).type(MediaType.APPLICATION_JSON).build();
+		} else {
+			return Response.status(Status.NO_CONTENT).type(MediaType.APPLICATION_JSON).build();
+		}
+	}
+
+	/**
+	 * Builds {@Link Response} from given {@link Entity}
+	 * 
+	 * @param entity {@link Entity} to build {@link Response} from
+	 * @param clazz  default class of entity. Used for empty collections.
+	 * @return the build {@link Response}
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T extends Entity> Response buildEntityResponse(io.vavr.collection.List<T> entities, Status status,
+			Class<T> clazz) {
+
+		if (entities != null) {
+			Class<T> entityClass;
+			if (entities.nonEmpty()) {
+				entityClass = (Class<T>) entities.get().getClass();
+			} else {
+				entityClass = clazz;
+			}
+			MDMEntityResponse response = new MDMEntityResponse(entityClass, entities.asJava());
+			GenericEntity<Object> genEntity = new GenericEntity<>(response, response.getClass());
+			return Response.status(status).entity(genEntity).type(MediaType.APPLICATION_JSON).build();
+		} else {
+			return Response.status(Status.NO_CONTENT).type(MediaType.APPLICATION_JSON).build();
+		}
+	}
+
+	/**
+	 * Builds {@Link Response} from given {@link Entity}
+	 * 
+	 * @param entity {@link Entity} to build {@link Response} from
+	 * @return the build {@link Response}
+	 */
+	public static <T extends Entity> Response buildErrorResponse(Throwable t, Status status) {
+		return Response.status(status).entity(t).type(MediaType.APPLICATION_JSON).build();
+	}
+
+	/**
+	 * Converts the given object to a {@link Response} with the given {@link Status}
+	 *
+	 * @param response object to convert
+	 * @param status   {@link Status} of the {@link Response}
+	 * @return the created {@link Response}
+	 */
+	public static Response toResponse(Object response, Status status) {
+		GenericEntity<Object> genEntity = new GenericEntity<>(response, response.getClass());
+		return Response.status(status).entity(genEntity).type(MediaType.APPLICATION_JSON).build();
+	}
+
+	/**
+	 * Return the search attributes for the {@link ValueList} type.
+	 * 
+	 * @param sourceNameSupplier {@link Value} with the name of the source (MDM
+	 *                           {@link org.eclipse.mdm.api.base.model.Environment}
+	 *                           name)
+	 * @param entityClass        {@link Entity} class to get localization data for
+	 * @param entityService      {@link EntityService} used to get localization data
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	public static <T extends Entity> Response buildSearchAttributesResponse(Value<String> sourceNameSupplier,
+			Class<T> entityClass, EntityService entityService) {
+		return entityService.getSearchAttributesSupplier(sourceNameSupplier, entityClass)
+				.map(searchAttributes -> ServiceUtils
+						.toResponse(new SearchAttributeResponse(searchAttributes.toJavaList()), Status.OK))
+				.recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * Return the localized type and attributes for the {@link Entity} type.
+	 * 
+	 * @param sourceNameSupplier {@link Value} with the name of the source (MDM
+	 *                           {@link Environment} name)
+	 * @param entityClass        {@link Entity} class to get localization data for
+	 * @param entityService      {@link EntityService} used to get localization data
+	 * @return the {@link Response} with the localized data
+	 */
+	public static <T extends Entity> Response buildLocalizationResponse(Value<String> sourceNameSupplier,
+			Class<T> entityClass, EntityService entityService) {
+		return Try.of(() -> ServiceUtils.toResponse(
+				new I18NResponse(
+						entityService.getLocalizeTypeSupplier(sourceNameSupplier, entityClass).get().toJavaMap(),
+						entityService.getLocalizeAttributesSupplier(sourceNameSupplier, entityClass).get().toJavaMap()),
+				Status.OK)).recover(ServiceUtils.ERROR_RESPONSE_SUPPLIER).getOrElse(ServiceUtils.SERVER_ERROR_RESPONSE);
+	}
+
+	/**
+	 * A Response representing a server error.
+	 */
+	public static final Response SERVER_ERROR_RESPONSE = Response.serverError().build();
+
+	/**
+	 * Builds an error response based on an exception to be sent to the client
+	 */
+	public static final Function<? super Throwable, Response> ERROR_RESPONSE_SUPPLIER = e -> {
+		LoggerFactory.getLogger(ServiceUtils.class).error(e.getMessage(), e);
+		// TODO anehmer on 2017-11-22: customize status according to exception
+		return Response
+				.status(Status.INTERNAL_SERVER_ERROR).entity(e.getStackTrace()[0].getClassName() + "."
+						+ e.getStackTrace()[0].getMethodName() + ": " + e.getMessage())
+				.type(MediaType.APPLICATION_JSON).build();
+	};
+
+	/**
+	 * Returns a {@link Try} to get the {@link ContextType} for the provided name
+	 * 
+	 * @param contextTypeName name of the {@link ContextType}
+	 * @return a {@link Try} of the {@link ContextType} for the given name
+	 */
+	public static Try<ContextType> getContextTypeSupplier(String contextTypeName) {
+		return Stream.of(ContextType.values())
+				.filter(contextType -> contextType.name().equals(contextTypeName.toUpperCase())).toTry();
+	}
+
+	/**
+	 * Converts vavr style context map to java.util style context map
+	 */
+	public static java.util.Map<String, java.util.Map<ContextType, ContextRoot>> contextMapToJava(
+			Map<String, Map<ContextType, ContextRoot>> ctx) {
+		return ctx.bimap(s -> s, m -> m.toJavaMap()).toJavaMap();
+	}
+
+	/**
+	 * Get {@link ContextType} from given entity if it has one. Otherwise return
+	 * null.
+	 * 
+	 * @param entity {@link Entity} to get {@link ContextType} for
+	 * @return {@link ContextType} or null
+	 */
+	public static ContextType getContextType(Entity entity) {
+		if (entity instanceof CatalogAttribute) {
+			return ((CatalogAttribute) entity).getCatalogComponent().map(CatalogComponent::getContextType)
+					.orElseGet(null);
+		} else if (entity instanceof CatalogComponent) {
+			return ((CatalogComponent) entity).getContextType();
+		} else if (entity instanceof TemplateRoot) {
+			return ((TemplateRoot) entity).getContextType();
+		} else if (entity instanceof TemplateComponent) {
+			return ((TemplateComponent) entity).getTemplateRoot().getContextType();
+		} else if (entity instanceof TemplateAttribute) {
+			return ((TemplateAttribute) entity).getTemplateComponent().map(TemplateComponent::getTemplateRoot)
+					.map(TemplateRoot::getContextType).orElseGet(null);
+		}
+
+		return null;
+	}
+
+	/**
+	 * Get the {@link org.eclipse.mdm.api.base.adapter.Core} of given
+	 * {@link org.eclipse.mdm.api.base.model.Entity}
+	 * 
+	 * @param e Entity to get Core of
+	 * @return Core of given Entity
+	 */
+	public static Core getCore(Entity e) {
+		return Try.of(() -> {
+			Method getMetod;
+			try {
+				getMetod = BaseEntity.class.getDeclaredMethod("getCore");
+				getMetod.setAccessible(true);
+			} catch (NoSuchMethodException | SecurityException x) {
+				throw new IllegalStateException(
+						"Unable to load 'getCore()' in class '" + BaseEntity.class.getSimpleName() + "'.", x);
+			}
+			return (Core) getMetod.invoke(e);
+		}).get();
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/boundary/QueryResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/boundary/QueryResource.java
new file mode 100644
index 0000000..c31b283
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/boundary/QueryResource.java
@@ -0,0 +1,69 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.query.boundary;
+
+import java.util.List;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+import org.eclipse.mdm.query.entity.QueryRequest;
+import org.eclipse.mdm.query.entity.QueryResult;
+import org.eclipse.mdm.query.entity.SuggestionRequest;
+import org.eclipse.mdm.query.entity.SuggestionResponse;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+/**
+ * 
+ * @author Matthias Koller, Peak Solution GmbH
+ *
+ */
+@Tag(name = "Query")
+@Path("/")
+public class QueryResource {
+
+	@EJB
+	private QueryService queryService;
+
+	@POST
+	@Path("query")
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public QueryResult query(QueryRequest request) {
+		return new QueryResult(queryService.queryRows(request));
+	}
+
+	@POST
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("suggestions")
+	public Response getSearchAttributes(SuggestionRequest suggestionRequest) {
+		try {
+			List<String> suggestions = queryService.getSuggestions(suggestionRequest);
+			return ServiceUtils.toResponse(new SuggestionResponse(suggestions), Status.OK);
+		} catch (RuntimeException e) {
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/boundary/QueryService.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/boundary/QueryService.java
new file mode 100644
index 0000000..e61086b
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/boundary/QueryService.java
@@ -0,0 +1,178 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.query.boundary;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.ServiceNotProvidedException;
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.ModelManager;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.base.query.Filter;
+import org.eclipse.mdm.api.base.query.Result;
+import org.eclipse.mdm.api.base.search.SearchService;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.businessobjects.control.FilterParser;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+import org.eclipse.mdm.connector.boundary.ConnectorServiceException;
+import org.eclipse.mdm.property.GlobalProperty;
+import org.eclipse.mdm.query.entity.QueryRequest;
+import org.eclipse.mdm.query.entity.Row;
+import org.eclipse.mdm.query.entity.SourceFilter;
+import org.eclipse.mdm.query.entity.SuggestionRequest;
+import org.eclipse.mdm.query.util.Util;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 
+ * @author Matthias Koller, Peak Solution GmbH
+ *
+ */
+@Stateless
+public class QueryService {
+
+	private static final Logger LOG = LoggerFactory.getLogger(QueryService.class);
+
+	@Inject
+	@GlobalProperty(value = "businessobjects.query.maxresultspersource")
+	private String maxResultsPerSource = "1001";
+
+	@Inject
+	ConnectorService connectorService;
+
+	public List<Row> queryRows(QueryRequest request) {
+		List<Row> rows = new ArrayList<>();
+
+		for (SourceFilter filter : request.getFilters()) {
+			try {
+				ApplicationContext context = this.connectorService.getContextByName(filter.getSourceName());
+
+				rows.addAll(queryRowsForSource(context, request.getResultType(), request.getColumns(),
+						filter.getFilter(), filter.getSearchString()));
+			} catch (ConnectorServiceException e) {
+				LOG.warn("Could not retrieve EntityManager for environment '" + filter.getSourceName() + "'!", e);
+			} catch (Exception e) {
+				LOG.warn("Could not retrieve query results for environment '" + filter.getSourceName() + "': "
+						+ e.getMessage(), e);
+			}
+		}
+
+		return rows;
+	}
+
+	public List<String> getSuggestions(SuggestionRequest suggestionRequest) {
+
+		List<String> suggestions = new ArrayList<>();
+
+		for (String envName : suggestionRequest.getSourceNames()) {
+
+			ApplicationContext context = this.connectorService.getContextByName(envName);
+			Optional<ModelManager> mm = context.getModelManager();
+			Optional<org.eclipse.mdm.api.base.query.QueryService> qs = context.getQueryService();
+
+			if (mm.isPresent() && qs.isPresent()) {
+
+				try {
+					EntityType entityType = mm.get().getEntityType(suggestionRequest.getType());
+
+					Attribute attr = entityType.getAttribute(suggestionRequest.getAttrName());
+
+					suggestions.addAll(qs.get().createQuery().select(attr).group(attr).fetch().stream()
+							.map(r -> Objects.toString(r.getValue(attr).extract())).collect(Collectors.toList()));
+
+				} catch (DataAccessException | IllegalArgumentException e) {
+					LOG.warn("Cannot retreive suggestions " + suggestionRequest + " for Environment + " + envName + "!",
+							e);
+				}
+			}
+		}
+		return suggestions;
+	}
+
+	List<Row> queryRowsForSource(ApplicationContext context, String resultEntity, List<String> columns,
+			String filterString, String searchString) throws DataAccessException {
+
+		ModelManager modelManager = context.getModelManager()
+				.orElseThrow(() -> new ServiceNotProvidedException(ModelManager.class));
+
+		SearchService searchService = context.getSearchService()
+				.orElseThrow(() -> new IllegalStateException("neccessary SearchService is not available"));
+
+		Class<? extends Entity> resultType = getEntityClassByNameType(searchService, resultEntity);
+
+		List<EntityType> searchableTypes = searchService.listEntityTypes(resultType);
+		List<Attribute> attributes = columns.stream().map(c -> getAttribute(searchableTypes, c))
+				.filter(Optional::isPresent).map(Optional::get).collect(Collectors.toList());
+
+		Filter filter = FilterParser.parseFilterString(searchableTypes, filterString);
+
+		List<Result> result = searchService.fetchResults(resultType, attributes, filter, searchString);
+
+		return Util.convertResultList(result.subList(0, Math.min(result.size(), getMaxResultsPerSource())), resultType,
+				modelManager.getEntityType(resultType));
+	}
+
+	private Optional<Attribute> getAttribute(List<EntityType> searchableTypes, String c) {
+		String[] parts = c.split("\\.");
+
+		if (parts.length != 2) {
+			throw new IllegalArgumentException("Cannot parse attribute " + c + "!");
+		}
+
+		String type = parts[0];
+		String attributeName = parts[1];
+
+		Optional<EntityType> entityType = searchableTypes.stream()
+				.filter(e -> ServiceUtils.workaroundForTypeMapping(e).equalsIgnoreCase(type)).findFirst();
+
+		if (entityType.isPresent()) {
+			return entityType.get().getAttributes().stream().filter(a -> a.getName().equalsIgnoreCase(attributeName))
+					.findFirst();
+		} else {
+			return Optional.empty();
+		}
+	}
+
+	private Class<? extends Entity> getEntityClassByNameType(SearchService s, String name) {
+
+		for (Class<? extends Entity> entityClass : s.listSearchableTypes()) {
+			if (entityClass.getSimpleName().equalsIgnoreCase(name)) {
+				return entityClass;
+			}
+		}
+		throw new IllegalArgumentException("Invalid Entity '" + name + "'. Allowed values are: "
+				+ s.listSearchableTypes().stream().map(Class::getSimpleName).collect(Collectors.joining(", ")));
+	}
+
+	private int getMaxResultsPerSource() {
+		try {
+			return Integer.parseInt(maxResultsPerSource);
+		} catch (NumberFormatException e) {
+			return 1001;
+		}
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/Column.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/Column.java
new file mode 100644
index 0000000..eb44679
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/Column.java
@@ -0,0 +1,98 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.query.entity;
+
+import java.util.Objects;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.google.common.base.MoreObjects;
+
+/**
+ * 
+ * @author Matthias Koller, Peak Solution GmbH
+ *
+ */
+@JsonInclude(Include.NON_NULL)
+public class Column {
+	private String type;
+	private String attribute;
+	private String value;
+	private String unit;
+
+	public Column(String type, String attribute, String value, String unit) {
+		this.type = type;
+		this.attribute = attribute;
+		this.value = value;
+		this.unit = unit;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public String getAttribute() {
+		return attribute;
+	}
+
+	public void setAttribute(String attribute) {
+		this.attribute = attribute;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+
+	public String getUnit() {
+		return unit;
+	}
+
+	public void setUnit(String unit) {
+		this.unit = unit;
+	}
+
+	@Override
+	public int hashCode() {
+		return Objects.hash(type, attribute, value, unit);
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (obj == null) {
+			return false;
+		}
+
+		if (getClass() != obj.getClass()) {
+			return false;
+		}
+		final Column other = (Column) obj;
+		return Objects.equals(this.type, other.type) && Objects.equals(this.attribute, other.attribute)
+				&& Objects.equals(this.value, other.value) && Objects.equals(this.unit, other.unit);
+	}
+
+	@Override
+	public String toString() {
+		return MoreObjects.toStringHelper(Column.class).add("type", type).add("attribute", attribute)
+				.add("value", value).add("unit", unit).toString();
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/EntityId.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/EntityId.java
new file mode 100644
index 0000000..f69b088
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/EntityId.java
@@ -0,0 +1,51 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.query.entity;
+
+/**
+ * 
+ * @author Matthias Koller, Peak Solution GmbH
+ *
+ */
+public class EntityId {
+	private String source;
+	private String type;
+	private String id;
+
+	public String getSource() {
+		return source;
+	}
+
+	public void setSource(String source) {
+		this.source = source;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/LoadRequest.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/LoadRequest.java
new file mode 100644
index 0000000..6198d87
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/LoadRequest.java
@@ -0,0 +1,43 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.query.entity;
+
+import java.util.List;
+
+/**
+ * 
+ * @author Matthias Koller, Peak Solution GmbH
+ *
+ */
+public class LoadRequest {
+	private List<EntityId> entityIds;
+	private List<String> columns;
+
+	public List<EntityId> getEntityIds() {
+		return entityIds;
+	}
+
+	public void setEntityIds(List<EntityId> entityIds) {
+		this.entityIds = entityIds;
+	}
+
+	public List<String> getColumns() {
+		return columns;
+	}
+
+	public void setColumns(List<String> columns) {
+		this.columns = columns;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/QueryRequest.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/QueryRequest.java
new file mode 100644
index 0000000..a787a5b
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/QueryRequest.java
@@ -0,0 +1,53 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.query.entity;
+
+import java.util.List;
+
+/**
+ * 
+ * @author Matthias Koller, Peak Solution GmbH
+ *
+ */
+public class QueryRequest {
+
+	private List<SourceFilter> filters;
+	private List<String> columns;
+	private String resultType;
+
+	public List<SourceFilter> getFilters() {
+		return filters;
+	}
+
+	public void setFilters(List<SourceFilter> filters) {
+		this.filters = filters;
+	}
+
+	public List<String> getColumns() {
+		return columns;
+	}
+
+	public void setColumns(List<String> columns) {
+		this.columns = columns;
+	}
+
+	public String getResultType() {
+		return resultType;
+	}
+
+	public void setResultType(String resultType) {
+		this.resultType = resultType;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/QueryResult.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/QueryResult.java
new file mode 100644
index 0000000..c365cdc
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/QueryResult.java
@@ -0,0 +1,38 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.query.entity;
+
+import java.util.List;
+
+/**
+ * 
+ * @author Matthias Koller, Peak Solution GmbH
+ *
+ */
+public class QueryResult {
+	private List<Row> rows;
+
+	public QueryResult(List<Row> rows) {
+		this.rows = rows;
+	}
+
+	public List<Row> getRows() {
+		return rows;
+	}
+
+	public void setRows(List<Row> rows) {
+		this.rows = rows;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/Row.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/Row.java
new file mode 100644
index 0000000..38cac0c
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/Row.java
@@ -0,0 +1,101 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.query.entity;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Objects;
+
+import com.google.common.base.MoreObjects;
+
+/**
+ * 
+ * @author Matthias Koller, Peak Solution GmbH
+ *
+ */
+public class Row {
+
+	private String source;
+	private String type;
+	private String id;
+
+	private List<Column> columns = new ArrayList<>();
+
+	public void setSource(String source) {
+		this.source = source;
+	}
+
+	public String getSource() {
+		return source;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public void addColumn(Column col) {
+		columns.add(col);
+	}
+
+	public List<Column> getColumns() {
+		return columns;
+	}
+
+	public void setColumns(List<Column> columns) {
+		this.columns = columns;
+	}
+
+	public void addColumns(Collection<? extends Column> columns) {
+		this.columns.addAll(columns);
+	}
+
+	@Override
+	public int hashCode() {
+		return Objects.hash(source, type, id, columns);
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (obj == null) {
+			return false;
+		}
+
+		if (getClass() != obj.getClass()) {
+			return false;
+		}
+		final Row other = (Row) obj;
+		return Objects.equals(this.source, other.source) && Objects.equals(this.type, other.type)
+				&& Objects.equals(this.id, other.id) && Objects.equals(this.columns, other.columns);
+	}
+
+	@Override
+	public String toString() {
+		return MoreObjects.toStringHelper(Row.class).add("source", source).add("type", type).add("id", id)
+				.add("columns", columns).toString();
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/SourceFilter.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/SourceFilter.java
new file mode 100644
index 0000000..73e1943
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/SourceFilter.java
@@ -0,0 +1,50 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.query.entity;
+
+/**
+ * 
+ * @author Matthias Koller, Peak Solution GmbH
+ *
+ */
+public class SourceFilter {
+	private String sourceName;
+	private String filter;
+	private String searchString;
+
+	public String getSourceName() {
+		return sourceName;
+	}
+
+	public void setSourceName(String sourceName) {
+		this.sourceName = sourceName;
+	}
+
+	public String getFilter() {
+		return filter;
+	}
+
+	public void setFilter(String filter) {
+		this.filter = filter;
+	}
+
+	public String getSearchString() {
+		return searchString;
+	}
+
+	public void setSearchString(String searchString) {
+		this.searchString = searchString;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/SuggestionRequest.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/SuggestionRequest.java
new file mode 100644
index 0000000..12cd685
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/SuggestionRequest.java
@@ -0,0 +1,69 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.query.entity;
+
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ * 
+ * @author Matthias Koller, Peak Solution GmbH
+ *
+ */
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class SuggestionRequest {
+
+	private List<String> sourceNames;
+	private String type;
+	private String attrName;
+
+	public SuggestionRequest() {
+		// empty no arg constructor
+	}
+
+	public SuggestionRequest(List<String> sourceNames, String type, String name) {
+		this.sourceNames = sourceNames;
+		this.type = type;
+		this.attrName = name;
+	}
+
+	public void setSourceNames(List<String> sourceNames) {
+		this.sourceNames = sourceNames;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public void setAttrName(String attrName) {
+		this.attrName = attrName;
+	}
+
+	public List<String> getSourceNames() {
+		return sourceNames;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public String getAttrName() {
+		return attrName;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/SuggestionResponse.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/SuggestionResponse.java
new file mode 100644
index 0000000..bf28305
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/entity/SuggestionResponse.java
@@ -0,0 +1,53 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.query.entity;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ * 
+ * @author Matthias Koller, Peak Solution GmbH
+ *
+ */
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class SuggestionResponse {
+
+	/** transferable data content */
+	private List<String> data;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param searchDefinitions list of {@link Suggestion}s to transfer
+	 */
+	public SuggestionResponse(List<String> suggestions) {
+		this.data = new ArrayList<>(suggestions);
+	}
+
+	public SuggestionResponse() {
+		this.data = new ArrayList<>();
+	}
+
+	public List<String> getData() {
+		return Collections.unmodifiableList(this.data);
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/util/Util.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/util/Util.java
new file mode 100644
index 0000000..f892e42
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/query/util/Util.java
@@ -0,0 +1,71 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.query.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Objects;
+
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.query.Record;
+import org.eclipse.mdm.api.base.query.Result;
+import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
+import org.eclipse.mdm.query.entity.Column;
+import org.eclipse.mdm.query.entity.Row;
+
+import com.google.common.base.Strings;
+
+/**
+ * 
+ * @author Matthias Koller, Peak Solution GmbH
+ *
+ */
+public final class Util {
+
+	private Util() {
+
+	}
+
+	public static List<Row> convertResultList(Collection<Result> results, Class<? extends Entity> resultEntityClass,
+			EntityType type) {
+		List<Row> rows = new ArrayList<>();
+		results.forEach(row -> rows.add(convertResult(row, resultEntityClass, type)));
+		return rows;
+	}
+
+	public static Row convertResult(Result result, Class<? extends Entity> resultEntityClass, EntityType type) {
+		Row row = new Row();
+		row.setSource(type.getSourceName());
+		row.setType(resultEntityClass.getSimpleName());
+		row.setId(result.getRecord(type).getID());
+		result.forEach(record -> row.addColumns(convertRecord(record)));
+		return row;
+	}
+
+	public static List<Column> convertRecord(Record record) {
+		List<Column> columns = new ArrayList<>();
+		record.getValues().values().forEach(value -> columns.add(convertColumn(record, value)));
+		return columns;
+	}
+
+	public static Column convertColumn(Record record, Value value) {
+		return new Column(ServiceUtils.workaroundForTypeMapping(record.getEntityType()), value.getName(),
+				Strings.emptyToNull(Objects.toString(value.extract())), Strings.emptyToNull(value.getUnit()));
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/shoppingbasket/boundary/ShoppingBasketResource.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/shoppingbasket/boundary/ShoppingBasketResource.java
new file mode 100644
index 0000000..3983d39
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/shoppingbasket/boundary/ShoppingBasketResource.java
@@ -0,0 +1,189 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.shoppingbasket.boundary;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+import javax.ws.rs.core.UriInfo;
+
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.Pool;
+import org.eclipse.mdm.api.dflt.model.Project;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+import org.eclipse.mdm.shoppingbasket.entity.BasketItem;
+import org.eclipse.mdm.shoppingbasket.entity.MDMItem;
+import org.eclipse.mdm.shoppingbasket.entity.ShoppingBasket;
+import org.eclipse.mdm.shoppingbasket.entity.ShoppingBasketRequest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.ImmutableMap;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+/**
+ * {@link ShoppingBasketResource} resource
+ *
+ */
+@Tag(name = "ShoppingBasket")
+@Path("/shoppingbasket")
+public class ShoppingBasketResource {
+
+	private static final Logger LOG = LoggerFactory.getLogger(ShoppingBasketResource.class);
+
+	private ConnectorService connectorService;
+
+	@Context
+	private UriInfo uriInfo;
+
+	private static final Map<Class<? extends Entity>, String> ENTITY2FRAGMENT_URI = ImmutableMap
+			.<Class<? extends Entity>, String>builder().put(Project.class, "projects").put(Pool.class, "pools")
+			.put(Test.class, "tests").put(TestStep.class, "teststeps").put(Measurement.class, "measurements")
+			.put(ChannelGroup.class, "channelgroups").put(Channel.class, "channels").build();
+
+	private static final Map<String, Class<? extends Entity>> ENTITYNAME2CLASS = ImmutableMap
+			.<String, Class<? extends Entity>>builder().put("Project", Project.class).put("Pool", Pool.class)
+			.put("Test", Test.class).put("TestStep", TestStep.class).put("Measurement", Measurement.class)
+			.put("ChannelGroup", ChannelGroup.class).put("Channel", Channel.class).build();
+
+	/**
+	 * @param connectorService {@link ConnectorService}
+	 */
+	@Inject
+	ShoppingBasketResource(ConnectorService connectorService) {
+		this.connectorService = connectorService;
+	}
+
+	/**
+	 * Returns a shopping basket XML file containing the requested MDM items
+	 * 
+	 * @param items list with items the shopping basket should contain.
+	 * @return a XML file the the shopping basket information.
+	 */
+	@POST
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Produces(MediaType.APPLICATION_XML)
+	public Response getShoppingbasket(ShoppingBasketRequest items) {
+		try {
+			return Response.ok(convertItemsToShoppingBasket(items), MediaType.APPLICATION_XML_TYPE).build();
+		} catch (RuntimeException e) {
+			LOG.error(e.getMessage(), e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+
+	}
+
+	/**
+	 * Converts a {@link ShoppingBasketRequest} into a {@link ShoppingBasket} by
+	 * generating the link and REST URIs for the given MDM items.
+	 * 
+	 * @param items MDM items to convert
+	 * @return a shopping basket representing the given MDM items
+	 */
+	private ShoppingBasket convertItemsToShoppingBasket(ShoppingBasketRequest items) {
+		List<BasketItem> basketItems = new ArrayList<>();
+		Map<String, List<MDMItem>> itemsBySource = items.getItems().stream()
+				.collect(Collectors.groupingBy(MDMItem::getSource));
+
+		for (Map.Entry<String, List<MDMItem>> entry : itemsBySource.entrySet()) {
+			ApplicationContext context = connectorService.getContextByName(entry.getKey());
+			EntityManager em = context.getEntityManager().orElseThrow(() -> new IllegalArgumentException(
+					"Not connected to ApplicationContext with name " + entry.getKey()));
+
+			List<Entity> entities = entry.getValue().stream().map(i -> getEntity(em, i)).collect(Collectors.toList());
+
+			for (Map.Entry<Entity, String> e : em.getLinks(entities).entrySet()) {
+
+				BasketItem basketItem = new BasketItem();
+				basketItem.setSource(context.getAdapterType());
+				basketItem.setLink(e.getValue());
+				basketItem.setRestURI(getURIForEntity(e.getKey()));
+
+				basketItems.add(basketItem);
+			}
+		}
+
+		ShoppingBasket basket = new ShoppingBasket();
+		basket.setName(items.getName());
+		basket.setItems(basketItems);
+		return basket;
+	}
+
+	/**
+	 * Generate the REST URI for a Entity
+	 * 
+	 * @param entity Entity
+	 * @return the REST URI of the given Entity
+	 */
+	private URI getURIForEntity(Entity entity) {
+		return uriInfo.getBaseUriBuilder().path("environments").path(entity.getSourceName())
+				.path(getURIFragmentForEntity(entity)).path(entity.getID()).build();
+	}
+
+	/**
+	 * Returns the URI fragment of a entity. For example, if entity is an instance
+	 * of {@link TestStep} the string "teststeps" is returned.
+	 * 
+	 * @param entity
+	 * @return the URI fragment of the Entity's EntityType
+	 */
+	private String getURIFragmentForEntity(Entity entity) {
+
+		for (Map.Entry<Class<? extends Entity>, String> entry : ENTITY2FRAGMENT_URI.entrySet()) {
+			if (entry.getKey().isInstance(entity)) {
+				return entry.getValue();
+			}
+		}
+		// fallback to generic fragment
+		return entity.getClass().getSimpleName().toLowerCase() + "s";
+	}
+
+	/**
+	 * Loads the entity specified by the given MDM item.
+	 * 
+	 * @param em   {@link EntityManager} used to load the entity.
+	 * @param item MDM item to load based on its type and id.
+	 * @return the loaded Entity
+	 */
+	private Entity getEntity(EntityManager em, MDMItem item) {
+		for (Map.Entry<String, Class<? extends Entity>> entry : ENTITYNAME2CLASS.entrySet()) {
+			if (item.getType().equals(entry.getKey())) {
+				return em.load(entry.getValue(), item.getId());
+			}
+		}
+		throw new IllegalArgumentException("Cannot load type: " + item.getType());
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/shoppingbasket/entity/BasketItem.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/shoppingbasket/entity/BasketItem.java
new file mode 100644
index 0000000..e9cba05
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/shoppingbasket/entity/BasketItem.java
@@ -0,0 +1,79 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.shoppingbasket.entity;
+
+import java.net.URI;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * BasketItem represents a single item in a shopping basket.
+ *
+ */
+@XmlRootElement(name = "item")
+@XmlType(propOrder = { "source", "restURI", "link" })
+public class BasketItem {
+
+	private String source;
+	private URI restURI;
+	private String link;
+
+	/**
+	 * @return the adapter source of this item
+	 */
+	@XmlElement(name = "source")
+	public String getSource() {
+		return source;
+	}
+
+	/**
+	 * @param type the adapter source of this item
+	 */
+	public void setSource(String source) {
+		this.source = source;
+	}
+
+	/**
+	 * @return rest URI of this item
+	 */
+	@XmlElement(name = "resturi")
+	public URI getRestURI() {
+		return restURI;
+	}
+
+	/**
+	 * @param restURI rest URI of this item
+	 */
+	public void setRestURI(URI restURI) {
+		this.restURI = restURI;
+	}
+
+	/**
+	 * @return link to this item in the adapter's data store
+	 */
+	@XmlElement(name = "link")
+	public String getLink() {
+		return link;
+	}
+
+	/**
+	 * @param link to this item in the adapter's data store
+	 */
+	public void setLink(String link) {
+		this.link = link;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/shoppingbasket/entity/MDMItem.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/shoppingbasket/entity/MDMItem.java
new file mode 100644
index 0000000..5f6ca6f
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/shoppingbasket/entity/MDMItem.java
@@ -0,0 +1,67 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.shoppingbasket.entity;
+
+/**
+ * MDMItem contains all information (source, type, id) to identify a MDM Entity.
+ *
+ */
+public class MDMItem {
+	private String source;
+	private String type;
+	private String id;
+
+	/**
+	 * @return the source
+	 */
+	public String getSource() {
+		return source;
+	}
+
+	/**
+	 * @param source the source to set
+	 */
+	public void setSource(String source) {
+		this.source = source;
+	}
+
+	/**
+	 * @return the type
+	 */
+	public String getType() {
+		return type;
+	}
+
+	/**
+	 * @param type the type to set
+	 */
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	/**
+	 * @return the id
+	 */
+	public String getId() {
+		return id;
+	}
+
+	/**
+	 * @param id the id to set
+	 */
+	public void setId(String id) {
+		this.id = id;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/shoppingbasket/entity/ShoppingBasket.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/shoppingbasket/entity/ShoppingBasket.java
new file mode 100644
index 0000000..c71acc0
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/shoppingbasket/entity/ShoppingBasket.java
@@ -0,0 +1,66 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.shoppingbasket.entity;
+
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * ShoppingBasket contains a list of item and an optional name.
+ *
+ */
+@XmlRootElement(name = "shoppingbasket")
+@XmlType(propOrder = { "name", "items" })
+public class ShoppingBasket {
+	private String name;
+
+	private List<BasketItem> items;
+
+	/**
+	 * @return the name
+	 */
+	@XmlElement(name = "name")
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * @param name the name to set
+	 */
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	/**
+	 * @return the items
+	 */
+
+	@XmlElementWrapper(name = "items")
+	@XmlElement(name = "item")
+	public List<BasketItem> getItems() {
+		return items;
+	}
+
+	/**
+	 * @param items the items to set
+	 */
+	public void setItems(List<BasketItem> items) {
+		this.items = items;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/shoppingbasket/entity/ShoppingBasketRequest.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/shoppingbasket/entity/ShoppingBasketRequest.java
new file mode 100644
index 0000000..17dfc2c
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/shoppingbasket/entity/ShoppingBasketRequest.java
@@ -0,0 +1,61 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.shoppingbasket.entity;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * ShoppingBasketRequest represents a client request to generate a shopping
+ * basket.
+ *
+ */
+public class ShoppingBasketRequest {
+	private String name;
+	private List<MDMItem> items;
+
+	/**
+	 * @return the name
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * @param name the name to set
+	 */
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	/**
+	 * @return the items
+	 */
+	public List<MDMItem> getItems() {
+		return items;
+	}
+
+	/**
+	 * @param items the items to set
+	 */
+	public void setItems(List<MDMItem> items) {
+		if (items == null) {
+			this.items = Collections.emptyList();
+		} else {
+			this.items = items;
+		}
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/shoppingbasket/entity/package-info.java b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/shoppingbasket/entity/package-info.java
new file mode 100644
index 0000000..9b928db
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/java/org/eclipse/mdm/shoppingbasket/entity/package-info.java
@@ -0,0 +1,20 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional information
+ * regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+@XmlSchema(namespace = "http://www.eclipse/openmdm/shoppingbasket/1.0/", xmlns = {
+		@XmlNs(prefix = "", namespaceURI = "http://www.eclipse/openmdm/shoppingbasket/1.0/"), }, elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
+package org.eclipse.mdm.shoppingbasket.entity;
+
+import javax.xml.bind.annotation.XmlNs;
+import javax.xml.bind.annotation.XmlSchema;
diff --git a/org.eclipse.mdm.businessobjects/src/main/proto/mdm.proto b/org.eclipse.mdm.businessobjects/src/main/proto/mdm.proto
new file mode 100644
index 0000000..073d57d
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/proto/mdm.proto
@@ -0,0 +1,374 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+syntax = "proto3";
+
+package org.eclipse.mdm.protobuf;
+
+import "google/protobuf/timestamp.proto";
+
+/**
+ * Specifies if the MeasuredValues contain the final values or the generation parameters.
+ */
+enum ValuesMode {
+		/**
+		 * MeasuredValues will contain the final values, calculated for non-explicit
+		 * sequence representations using generation parameters and, if applicable, the
+		 * raw values. No generation parameters are returned in the resulting
+		 * MeasuredValues, SequenceRepresentation will be EXPLICIT.
+		 */
+		CALCULATED = 0;
+		/**
+		 * MeasuredValues will contain the (raw) values and generation parameters as
+		 * present in the storage.
+		 */
+		STORAGE = 1;
+}
+
+/**
+ * Scalar type enumeration represents the datatype of MeasuredValues.
+ */
+enum ScalarType {
+	STRING = 0;          // MeasuredValues are provided as StringArray
+	DATE = 1;            // MeasuredValues are provided as DateArray
+	BOOLEAN = 2;         // MeasuredValues are provided as BooleanArray
+	BYTE = 3;            // MeasuredValues are provided as ByteArray
+	SHORT = 4;           // MeasuredValues are provided as ShortArray
+	INTEGER = 5;         // MeasuredValues are provided as IntegerArray
+	LONG = 6;            // MeasuredValues are provided as LongArray
+	FLOAT = 7;           // MeasuredValues are provided as FloatArray
+	DOUBLE = 8;          // MeasuredValues are provided as DoubleArray
+	BYTE_STREAM = 9;     // MeasuredValues are provided as ByteStreamArray
+	FLOAT_COMPLEX = 10;  // MeasuredValues are provided as FloatComplexArray
+	DOUBLE_COMPLEX = 11; // MeasuredValues are provided as DoubleComplexArray
+	ENUMERATION = 12;    // not used for MeasuredValues
+	FILE_LINK = 13;      // not used for MeasuredValues
+	BLOB = 14;           // not used for MeasuredValues
+	UNKNOWN = 15;        // not used for MeasuredValues
+}
+
+/**
+ * This is the axis type enumeration as defined in the ASAM ODS NVH model.
+ */
+enum AxisType {
+	X_AXIS = 0;  // A Channel of this type may be displayed as the x-axis.
+	Y_AXIS = 1;  // A Channel of this type may be displayed as the y-axis.
+	XY_AXIS = 2; // A Channel of this type may be displayed as the x- or y-axis.
+}
+
+/**
+ * The sequence representation to describe the storage type of measured values.
+ */
+enum SequenceRepresentation {
+  /**
+	 * Measured values are stored as is and values are therefore immediately
+	 * available.
+	 */
+	EXPLICIT = 0;
+	/**
+	 * Each value x<sub>i</sub> is generated as follows: x<sub>i</sub> = p for i
+	 * &isin; [1, n], n is the total number of values and generation parameter p
+	 * (offset).
+	 */
+	IMPLICIT_CONSTANT = 1;
+	  /**
+	 * Each value x<sub>i</sub> is generated as follows: x<sub>i</sub> =
+	 * p<sub>1</sub>+(i-1)*p<sub>2</sub> for i &isin; [1, n], n is the total number
+	 * of values and generation parameters p<sub>1</sub> (start value) and
+	 * p<sub>2</sub> (increment).
+	 */
+	IMPLICIT_LINEAR = 2;
+	/**
+	 * Each value x<sub>i</sub> is generated as follows: x<sub>i</sub> =
+	 * p<sub>1</sub>+((i-1)mod(p<sub>3</sub>-p<sub>1</sub>)/p<sub>2</sub>)*
+	 * p<sub>2</sub> for i &isin; [1, n], n is the total number of values and
+	 * generation parameters p<sub>1</sub> (start value), p<sub>2</sub> (increment)
+	 * and p<sub>3</sub> (number of values per saw). The expression
+	 * (p<sub>3</sub>-p<sub>1</sub>)/p<sub>2</sub> must be truncated to integer to
+	 * start each saw curve cycle at p<sub>1</sub>.
+	 */
+	IMPLICIT_SAW = 3;
+	/**
+	 * Each value x<sub>i</sub> is generated as follows: x<sub>i</sub> =
+	 * p<sub>1</sub>+p<sub>2</sub>*r<sub>i</sub> for i &isin; [1, n], n is the total
+	 * number of values and generation parameters p<sub>1</sub> (offset),
+	 * p<sub>2</sub> (factor) and the raw value r at position i.
+	 */
+	RAW_LINEAR = 4;
+	/**
+	 * Each value x<sub>i</sub> is generated as follows: x<sub>i</sub> = &sum;
+	 * p<sub>j</sub>*r<sub>i</sub><sup>j-1</sup> = p<sub>2</sub>+p<sub>3
+	 * </sub>*r<sub>i</sub>+p<sub>4</sub>*r<sub>i</sub><sup>2</sup>+... for i &isin;
+	 * [1, n], n is the total number of values and generation parameters
+	 * p<sub>j</sub> for j &isin; [1, p<sub>1</sub>] and the raw value r at position
+	 * i.
+	 */
+	RAW_POLYNOMIAL = 5;
+	/*
+	 * Not used. But keep here to show ordinal sequence.
+	 */
+	FORMULA = 6;
+	/**
+	 * Measured values are stored as is in an external file and values are therefore
+	 * immediately available.
+	 */
+	EXPLICIT_EXTERNAL = 7;
+	/**
+	 * Each value x<sub>i</sub> is generated as follows: x<sub>i</sub> =
+	 * p<sub>1</sub>+p<sub>2</sub>*r<sub>i</sub> for i &isin; [1, n], n is the total
+	 * number of values and generation parameters p<sub>1</sub> (offset),
+	 * p<sub>2</sub> (factor) and the raw value r at position i read from an
+	 * external file.
+	 */
+	RAW_LINEAR_EXTERNAL = 8;
+	/**
+	 * Each value x<sub>i</sub> is generated as follows: x<sub>i</sub> = &sum;
+	 * p<sub>j</sub>*r<sub>i</sub><sup>j-1</sup> = p<sub>2</sub>+p<sub>3
+	 * </sub>*r<sub>i</sub>+p<sub>4</sub>*r<sub>i</sub><sup>2</sup>+... for i &isin;
+	 * [1, n], n is the total number of values and generation parameters
+	 * p<sub>j</sub> for j &isin; [1, p<sub>1</sub>] and the raw value r at position
+	 * i read from an external file.
+	 */
+	RAW_POLYNOMIAL_EXTERNAL = 9;
+	/**
+	 * Each value x<sub>i</sub> is generated as follows: x<sub>i</sub> =
+	 * (p<sub>1</sub>+p<sub>2</sub>*r<sub>i</sub>)*p<sub>3</sub> for i &isin; [1,
+	 * n], n is the total number of values and generation parameters p<sub>1</sub>
+	 * (offset), p<sub>2</sub> (factor), p<sub>2</sub> (calibration) and the raw
+	 * value r at position i.
+	 */
+	RAW_LINEAR_CALIBRATED = 10;
+	/**
+	 * Each value x<sub>i</sub> is generated as follows: x<sub>i</sub> =
+	 * (p<sub>1</sub>+p<sub>2</sub>*r<sub>i</sub>)*p<sub>3</sub> for i &isin; [1,
+	 * n], n is the total number of values and generation parameters p<sub>1</sub>
+	 * (offset), p<sub>2</sub> (factor), p<sub>2</sub> (calibration) and the raw
+	 * value r at position i read from an external file.
+	 */
+	RAW_LINEAR_CALIBRATED_EXTERNAL = 11;
+}
+
+/**
+ * This class provides all required informations to load measured values.
+ */
+ message ReadRequest {
+	string channel_group_id = 1;     // ID of the ChannelGroup which Channel values are requested.
+
+	repeated string channel_ids = 2; // IDs of the channels to load. If empty, all channels are loaded.
+	/**
+	 * IDSs of the units in which the corresponding channel values (i.e. the channels at the same index as in channel_ids)
+	 * are loaded. A missing or empty string is interpreted as the default unit of the channel.
+	 * Superfluous unit IDs are ignored.
+	 */
+	repeated string unit_ids = 3;
+
+	int32 request_size = 4;          // Number of requested values
+	int32 start_index = 5;           // Start index of the requested values
+
+	ValuesMode values_mode = 6;      // Mode in which the values are returned. See description of ValueMode enum.
+}
+
+/**
+ * This message represents a complex value with real and imaginary parts of type float.
+ */
+message FloatComplex {
+	float re = 1; // The real part.
+	float im = 2; // The imaginary part.
+}
+
+/**
+ * This message represents a complex value with real and imaginary parts of type double.
+ */
+message DoubleComplex {
+	double re = 1; // The real part.
+	double im = 2; // The imaginary part.
+}
+
+message StringArray        { repeated string values = 1; }
+message DateArray          { repeated google.protobuf.Timestamp values = 1; }
+message BooleanArray       { repeated bool   values = 1 [packed=true]; }
+message ByteArray          {          bytes  values = 1; }
+message ShortArray         { repeated int32  values = 1 [packed=true]; }
+message IntegerArray       { repeated int32  values = 1 [packed=true]; }
+message LongArray          { repeated int64  values = 1 [packed=true]; }
+message FloatArray         { repeated float  values = 1 [packed=true]; }
+message DoubleArray        { repeated double values = 1 [packed=true]; }
+message ByteStreamArray    { repeated bytes  values = 1; }
+message FloatComplexArray  { repeated FloatComplex  values = 1; }
+message DoubleComplexArray { repeated DoubleComplex values = 1; }
+
+/**
+ * This message represents a sequence of measured values for one Channel.
+ */
+message MeasuredValues {
+	string name = 1;                                         // Name of the channel
+	string unit = 2;                                         // Unit of the values
+	int32 length = 3;                                        // Length of the channel
+
+	SequenceRepresentation sequence_representation = 4;      // The SequenceRepresentation of the measured values.
+	repeated double generation_parameters = 5 [packed=true]; // The generation parameters of the channel
+	bool independent = 6;                                    // The independent flag of the channel
+	AxisType axis_type = 7;                                  // The axis type of the channel
+	ScalarType scalar_type = 8;                              // Scalar type of the channel's values
+	oneof values {
+		StringArray         string_array = 9;                // STRING
+		DateArray           date_array = 10;                 // DATE
+		BooleanArray        boolean_array = 11;              // BOOLEAN
+		ByteArray           byte_array = 12;                 // BYTE
+		ShortArray          short_array = 13;                // SHORT
+		IntegerArray        integer_array = 14;              // INTEGER
+		LongArray           long_array = 15;                 // LONG
+		FloatArray          float_array = 16;                // FLOAT
+		DoubleArray         double_array = 17;               // DOUBLE,
+		ByteStreamArray     byte_stream_array = 18;          // BYTE_STREAM
+		FloatComplexArray   float_complex_array = 19;        // FLOAT_COMPLEX
+		DoubleComplexArray  double_complex_array = 20;       // DOUBLE_COMPLEX
+		// The following datatypes are not supported in ODS for measuredvalues: ENUMERATION, FILE_LINK, BLOB, UNKNOWN
+	}                                                        // the actual measured values
+	repeated bool flags = 21 [packed=true];                  // The flags of the measured values
+}
+
+/**
+ * Container for a list of MeasuredValues
+ */
+message MeasuredValuesList {
+	repeated MeasuredValues values = 1; // List of MeasuredValues
+}
+
+/**
+ * Container for a list of WriteRequests
+ */
+message WriteRequestList {
+	/**
+	 * Holds required data to write mass data.
+	 */
+	message WriteRequest {
+		message ExplicitData {
+			oneof values {
+				StringArray         string_array = 1;          // STRING
+				DateArray           date_array = 2;            // DATE
+				BooleanArray        boolean_array = 3;         // BOOLEAN
+				ByteArray           byte_array = 4;            // BYTE
+				ShortArray          short_array = 5;           // SHORT
+				IntegerArray        integer_array = 6;         // INTEGER
+				LongArray           long_array = 7;            // LONG
+				FloatArray          float_array = 8;           // FLOAT
+				DoubleArray         double_array = 9;          // DOUBLE,
+				ByteStreamArray     byte_stream_array = 10;    // BYTE_STREAM
+				FloatComplexArray   float_complex_array = 11;  // FLOAT_COMPLEX
+				DoubleComplexArray  double_complex_array = 12; // DOUBLE_COMPLEX
+				// The following datatypes are not supported in ODS for measuredvalues: ENUMERATION, FILE_LINK, BLOB, UNKNOWN
+			} // the actual values
+
+			repeated bool flags = 13 [packed=true];            // The flags of the measured values
+		}
+
+		/**
+		 * Configures a WriteRequest to create an implicit linear sequence
+		 * of measured values. See org.eclipse.mdm.api.base.massdata.WriteRequestBuilder.implicitLinear(ScalarType, double, double)
+		 */
+		message ImplicitLinear {
+			ScalarType scalar_type = 1; // Scalar type of the channel's values
+			double start = 2;           // The start value of the line.
+			double increment = 3;       // The gradient of the line.
+		}
+
+		/**
+		 * Configures a WriteRequest to create an implicit saw sequence
+		 * of measured values. See org.eclipse.mdm.api.base.massdata.WriteRequestBuilder.implicitSaw(ScalarType, double, double, double).
+		 */
+		message ImplicitSaw {
+			ScalarType scalar_type = 1; // Scalar type of the channel's values
+			double start = 2;           // The start value of each saw cycle.
+			double increment = 3;       // The increment.
+			double stop = 4;            // The stop value of each saw cycle. The stop value is exclusive.
+		}
+
+		/**
+		 * Configures a WriteRequest to create an implicit constant sequence
+		 * of measured values. See org.eclipse.mdm.api.base.massdata.WriteRequestBuilder.implicitConstant(ScalarType, double).
+		 */
+		message ImplicitConstant {
+			ScalarType scalar_type = 1; // Scalar type of the channel's values
+			double offset = 2;          // The constant value.
+		}
+
+		/**
+		 * Configures the WriteRequest to create a raw linear sequence of
+		 * measured values. See org.eclipse.mdm.api.base.massdata.WriteRequestBuilder.rawLinear(double, double)
+		 */
+		message RawLinear {
+			ScalarType scalar_type = 1; // Scalar type of the channel's values
+			double offset = 2;          // The offset for each value.
+			double factor = 3;          // The factor for each value.
+			ExplicitData values = 4;    // The raw values.
+		}
+
+		/**
+		 * Configures the WriteRequest to create a raw polynomial sequence of
+		 * measured values. See org.eclipse.mdm.api.base.massdata.WriteRequestBuilder.rawPolynomial(double...)
+		 */
+		message RawPolynomial {
+			ScalarType scalar_type = 1;       // Scalar type of the channel's values
+			repeated double coefficients = 2; // At least 2 coefficients must be provided.
+			ExplicitData values = 3;          // The raw values.
+		}
+
+		/**
+		 * Configures the WriteRequest to create a raw linear calibrated sequence of
+		 * measured values. See org.eclipse.mdm.api.base.massdata.WriteRequestBuilder.rawLinearCalibrated(double, double, double)
+		 */
+		message RawLinearCalibrated {
+			ScalarType scalar_type = 1; // Scalar type of the channel's values
+			double offset = 2;          // The offset for each value.
+			double factor = 3;          // The factor for each value.
+			double calibration = 4;     // The calibration factor.
+			ExplicitData values = 5;    // The raw values.
+		}
+
+		string channel_group_id = 1;    // The ChannelGroup for this request.
+		string channel_id = 2;          // The Channel specified mass data will be dedicated to.
+		AxisType axis_type = 3;         // The AxisType of the written mass data.
+		bool independent = 4;           // The independent flag for the Channel
+		oneof data {
+			ExplicitData explicit = 5;
+			ImplicitConstant implicit_constant = 6;
+			ImplicitLinear implicit_linear = 7;
+			ImplicitSaw implicit_saw = 8;
+			RawLinear raw_linear = 9;
+			RawPolynomial raw_polynomial = 10;
+			RawLinearCalibrated raw_linear_calibrated = 11;
+		}                               // The mass data for this Channel
+		string source_unit_id = 12;     // The source Unit ID for the data. (Hint this not implemented as of version 5.1.0M6)
+	}
+	repeated WriteRequest values = 1;   // The List of WriteRequests
+}
+
+/**
+ * Message to request preview values.
+ * Preview values are only provided for numerical Datatypes.
+ * If channels with other Datatypes are requested, an empty MeasuredValues message is returned.
+ */
+message PreviewRequest {
+	ReadRequest read_request = 1; // Read request, which specifies which data should be read.
+	int32 number_of_chunks = 2;   // Number of chunks, e.g. number of values returned by the preview request.
+}
+
+/**
+ * Message containing preview data requested by a PreviewRequest
+ */
+message PreviewValuesList {
+	repeated MeasuredValues min = 1; // minimum values for each chunk
+	repeated MeasuredValues avg = 2; // average values for each chunk
+	repeated MeasuredValues max = 3; // maximum values for each chunk
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/resources/org/eclipse/mdm/businessobjects/control/i18n/locale/localization.properties b/org.eclipse.mdm.businessobjects/src/main/resources/org/eclipse/mdm/businessobjects/control/i18n/locale/localization.properties
new file mode 100644
index 0000000..3d78479
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/resources/org/eclipse/mdm/businessobjects/control/i18n/locale/localization.properties
@@ -0,0 +1,63 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+ 
+Environment = Environment
+Environment.Name = Name
+Environment.MimeType = MimeType
+Environment.Description = Description
+Environment.DateCreated = DateCreated
+Environment.Max_test_level = MaxTestLevels
+Environment.Base_model_version = BaseModelVersion
+Environment.AppModelType = ApplicationModelType
+Environment.AppModelVersion = ApplicationModelVersion
+Environment.Timezone = Timezone
+
+Test = Test
+Test.Name = Name
+Test.MimeType = MimeType
+Test.Description = Description
+Test.DateCreated = DateCreated
+Test.DateClosed = DateClosed
+Test.MDMLinks = Links
+
+TestStep = TestStep
+TestStep.Name = Name
+TestStep.MimeType = MimeType
+TestStep.Description = Description
+TestStep.DateCreated = DateCreated
+TestStep.Optional = Optional
+TestStep.MDMLinks = Links
+
+Measurement = Measurement
+Measurement.Name = Name
+Measurement.MimeType = MimeType
+Measurement.Description = Description
+Measurement.DateCreated = DateCreated
+Measurement.MeasurementBegin = Begin
+Measurement.MeasurementEnd = End
+Measurement.MDMLinks = Links
+
+ChannelGroup = ChannelGroup
+ChannelGroup.Name = Name
+ChannelGroup.MimeType = MimeType
+ChannelGroup.SubMatrixNoRows = Rows
+
+Channel = Channel
+Channel.Name = Name
+Channel.Description = MimeType
+Channel.DataType = DataType
+Channel.Minimum = Minimum
+Channel.Maximum = Maximum
+Channel.Average = Average
+Channel.Deviation = Deviation
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/resources/org/eclipse/mdm/businessobjects/control/i18n/locale/localization_de.properties b/org.eclipse.mdm.businessobjects/src/main/resources/org/eclipse/mdm/businessobjects/control/i18n/locale/localization_de.properties
new file mode 100644
index 0000000..27150c6
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/resources/org/eclipse/mdm/businessobjects/control/i18n/locale/localization_de.properties
@@ -0,0 +1,64 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+Environment = Datenquelle
+Environment.Name = Name
+Environment.MimeType = MimeType
+Environment.Description = Beschreibung
+Environment.DateCreated = Angelegt am:
+Environment.Max_test_level = Testlevels
+Environment.Base_model_version = Basismodell Version
+Environment.AppModelType = Applicationmodell Typ
+Environment.AppModelVersion = Applikationsmodell Version
+Environment.Timezone = Zeitzone
+
+Test = Versuch
+Test.Name = Name
+Test.MimeType = MimeType
+Test.Description = Beschreibung
+Test.DateCreated = Angelegt am:
+Test.DateClosed = Geschlossen am:
+Test.MDMLinks = Links
+
+TestStep = Versuchsschritt
+TestStep.Name = Name
+TestStep.MimeType = MimeType
+TestStep.Description = Beschreibung
+TestStep.DateCreated = Angelegt am:
+TestStep.Optional = Optional
+TestStep.MDMLinks = Links
+
+MeaResult = Messung
+MeaResult.Name = Name
+MeaResult.MimeType = MimeType
+MeaResult.Description = Beschreibung
+MeaResult.DateCreated = Angelegt am:
+MeaResult.MeasurementBegin = Messungsbeginn
+MeaResult.MeasurementEnd = Messungsende
+MeaResult.MDMLinks = Links
+
+SubMatrix = Kanalgruppe
+SubMatrix.Name = Name
+SubMatrix.MimeType = MimeType
+SubMatrix.SubMatrixNoRows = Messpunkte pro Kanal
+
+MeaQuantity = Kanal
+MeaQuantity.Name = Name
+MeaQuantity.Description = MimeType
+MeaQuantity.DataType = Datentyp
+MeaQuantity.Minimum = Minimum
+MeaQuantity.Maximum = Maximum
+MeaQuantity.Average = Durchschnitt
+MeaQuantity.Deviation = Standardabweichung
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/main/resources/shoppingbasket1.0.xsd b/org.eclipse.mdm.businessobjects/src/main/resources/shoppingbasket1.0.xsd
new file mode 100644
index 0000000..3e8211b
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/main/resources/shoppingbasket1.0.xsd
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
+	targetNamespace="http://www.eclipse/openmdm/shoppingbasket/1.0/"
+	xmlns="http://www.eclipse/openmdm/shoppingbasket/1.0/"
+	elementFormDefault="qualified">
+	
+  <xs:element name="shoppingbasket" type="shoppingbasketType"/>
+  <xs:complexType name="itemType">
+    <xs:all>
+      <xs:element type="xs:string" name="source" minOccurs="1" maxOccurs="1"/>
+      <xs:element type="xs:anyURI" name="resturi" minOccurs="1" maxOccurs="1"/>
+      <xs:element type="xs:string" name="link" minOccurs="1" maxOccurs="1"/>
+    </xs:all>
+  </xs:complexType>
+  <xs:complexType name="itemsType">
+    <xs:sequence>
+      <xs:element type="itemType" name="item" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="shoppingbasketType">
+    <xs:all>
+      <xs:element type="xs:string" name="name" minOccurs="0" maxOccurs="1"/>
+      <xs:element type="itemsType" name="items" minOccurs="1" maxOccurs="1"/>
+    </xs:all>
+  </xs:complexType>
+</xs:schema>
+
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/FileLinkActivityTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/FileLinkActivityTest.java
new file mode 100644
index 0000000..8f36ca0
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/FileLinkActivityTest.java
@@ -0,0 +1,310 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasItems;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Optional;
+
+import javax.ejb.EJB;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+import javax.ws.rs.core.Application;
+
+import org.eclipse.mdm.api.base.adapter.ChildrenStore;
+import org.eclipse.mdm.api.base.adapter.Core;
+import org.eclipse.mdm.api.base.adapter.EntityStore;
+import org.eclipse.mdm.api.base.adapter.RelationStore;
+import org.eclipse.mdm.api.base.file.FileService;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Enumeration;
+import org.eclipse.mdm.api.base.model.FileLink;
+import org.eclipse.mdm.api.base.model.MimeType;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.User;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.model.EntityFactory;
+import org.eclipse.mdm.api.dflt.model.Pool;
+import org.eclipse.mdm.api.dflt.model.Project;
+import org.eclipse.mdm.businessobjects.control.FileLinkActivity;
+import org.eclipse.mdm.businessobjects.service.EntityService;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+import org.glassfish.hk2.api.Factory;
+import org.glassfish.hk2.api.Injectee;
+import org.glassfish.hk2.api.InjectionResolver;
+import org.glassfish.hk2.api.ServiceHandle;
+import org.glassfish.hk2.api.ServiceLocator;
+import org.glassfish.hk2.api.TypeLiteral;
+import org.glassfish.hk2.utilities.binding.AbstractBinder;
+import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.test.JerseyTest;
+import org.junit.Before;
+import org.junit.Ignore;
+
+import com.google.common.collect.ImmutableMap;
+
+import io.restassured.RestAssured;
+import io.vavr.control.Try;
+
+public class FileLinkActivityTest extends JerseyTest {
+
+	public static final String ENV = "MDM";
+	public static final FileLink[] FILE_LINKS = new FileLink[] {
+			FileLink.newRemote("dir/test.txt", new MimeType("text/plain"), "Just a text file"),
+			FileLink.newRemote("dir/subdir/test.bin", new MimeType("application/octet-stream"), "A binary file"),
+			FileLink.newRemote("dir/specialCharsßä#&'.bin", new MimeType("application/octet-stream"),
+					"A binary file") };
+
+	private ConnectorService connectorService = mock(ConnectorService.class);
+	private ApplicationContext context = mock(ApplicationContext.class);
+	private FileService fileService = mock(FileService.class);
+
+	private EntityService entityService = mock(EntityService.class);
+
+	@Override
+	protected Application configure() {
+
+		AbstractBinder binder = new AbstractBinder() {
+
+			@Override
+			protected void configure() {
+				bind(EJBInjectResolver.class).to(new TypeLiteral<InjectionResolver<EJB>>() {
+				}).in(Singleton.class);
+				bind(TestService.class).to(TestService.class);
+				bindFactory(new InstanceFactory<EntityService>(entityService)).to(EntityService.class);
+				bindFactory(new InstanceFactory<ConnectorService>(connectorService)).to(ConnectorService.class);
+				bind(FileLinkActivity.class).to(FileLinkActivity.class);
+
+			}
+		};
+
+		return new ResourceConfig(TestResource.class, TestStepResource.class, MeasurementResource.class)
+				.register(binder);
+	}
+
+	@Before
+	public void init() throws IOException {
+		RestAssured.baseURI = target().getUri().toString();
+
+		final Test test = createTest(FILE_LINKS);
+
+		when(entityService.find(any(), eq(Test.class), any())).thenReturn(Try.of(() -> test));
+
+		when(connectorService.getContextByName(eq(ENV))).thenReturn(context);
+		when(context.getFileService()).thenReturn(Optional.of(fileService));
+		when(fileService.openStream(eq(test), eq(FILE_LINKS[0])))
+				.thenReturn(new ByteArrayInputStream("Some text".getBytes()));
+		when(fileService.openStream(eq(test), eq(FILE_LINKS[2])))
+				.thenReturn(new ByteArrayInputStream("xyz".getBytes()));
+	}
+
+	@Ignore
+	@org.junit.Test
+	public void testMDMLinksAttribute() {
+		// request test and check MDMLinks attribute
+		RestAssured.given().pathParam("SOURCENAME", ENV).pathParam("TESTID", "1").when()
+				.get("/environments/{SOURCENAME}/tests/{TESTID}").then().statusCode(200)
+				.body("data.get(0).attributes.find { it.get('name') == 'MDMLinks' }.value.remotePath",
+						hasItems("dir/test.txt", "dir/subdir/test.bin", "dir/specialCharsßä#&'.bin"))
+				.and()
+				.body("data.get(0).attributes.find { it.get('name') == 'MDMLinks' }.value.description",
+						hasItems("Just a text file", "A binary file", "A binary file"))
+				.and().body("data.get(0).attributes.find { it.get('name') == 'MDMLinks' }.value.mimeType",
+						hasItems("text/plain", "application/octet-stream", "application/octet-stream"));
+	}
+
+	@Ignore
+	@org.junit.Test
+	public void testFileDownload() {
+		RestAssured.given().pathParam("SOURCENAME", ENV).pathParam("TESTID", "1")
+				.pathParam("REMOTE_PATH", "dir/test.txt").when()
+				.get("/environments/{SOURCENAME}/tests/{TESTID}/files/{REMOTE_PATH}").then().statusCode(200)
+				.contentType("text/plain").body(equalTo("Some text"));
+	}
+
+	@Ignore
+	@org.junit.Test
+	public void testFileDownloadWithSpecialChars() {
+		RestAssured.given().pathParam("SOURCENAME", ENV).pathParam("TESTID", "1")
+				.pathParam("REMOTE_PATH", "dir/specialCharsßä#&'.bin").when()
+				.get("/environments/{SOURCENAME}/tests/{TESTID}/files/{REMOTE_PATH}").then().statusCode(200)
+				.contentType("application/octet-stream").body(equalTo("xyz"));
+	}
+
+	private Test createTest(FileLink[] fileLinks) {
+		EntityFactory factory = new JUnitEntityFactory() {
+			@Override
+			protected <T extends Entity> Core createCore(Class<T> entityClass) {
+				return new CoreImpl(ImmutableMap.of("Name", ValueType.STRING.create("test"), "DateCreated",
+						ValueType.DATE.create("DateCreated"), "MDMLinks",
+						ValueType.FILE_LINK_SEQUENCE.create("MDMLinks", fileLinks)));
+			}
+		};
+
+		final Project project = factory.createProject("MyProject");
+		final Pool pool = factory.createPool("MyPool", project);
+		return factory.createTest("MyTest", pool);
+	}
+
+	public static class EJBInjectResolver implements InjectionResolver<EJB> {
+
+		@Inject
+		private ServiceLocator locator;
+
+		@Override
+		public Object resolve(Injectee injectee, ServiceHandle<?> root) {
+			return locator.getService(injectee.getRequiredType());
+		}
+
+		@Override
+		public boolean isConstructorParameterIndicator() {
+			return false;
+		}
+
+		@Override
+		public boolean isMethodParameterIndicator() {
+			return false;
+		}
+	}
+
+	private class JUnitEntityFactory extends EntityFactory {
+
+		@Override
+		protected Optional<User> getLoggedInUser() {
+			return Optional.empty();
+		}
+
+		@Override
+		protected <T extends Entity> Core createCore(Class<T> entityClass) {
+			// noop
+			return null;
+		}
+
+		@Override
+		protected void validateEnum(Enumeration<?> enumerationObj) {
+			// noop
+		}
+
+		@Override
+		protected <T extends Entity> Core createCore(Class<T> entityClass, ContextType contextType) {
+			// noop
+			return null;
+		}
+
+		@Override
+		protected <T extends Entity> Core createCore(String name, Class<T> entityClass) {
+			// noop
+			return null;
+		}
+	}
+
+	public class InstanceFactory<T> implements Factory<T> {
+
+		private T instance;
+
+		public InstanceFactory(T instance) {
+			this.instance = instance;
+		}
+
+		@Override
+		public void dispose(T t) {
+		}
+
+		@Override
+		public T provide() {
+			return instance;
+		}
+
+	}
+
+	public class CoreImpl implements Core {
+
+		private Map<String, Value> values;
+		private EntityStore mutableStore;
+
+		public CoreImpl(Map<String, Value> values) {
+			super();
+			this.values = values;
+			this.mutableStore = new EntityStore();
+		}
+
+		@Override
+		public String getSourceName() {
+			return "UnitTestSource";
+		}
+
+		@Override
+		public String getTypeName() {
+			return "UnitTestType";
+		}
+
+		@Override
+		public String getID() {
+			return "4711l";
+		}
+
+		@Override
+		public void setID(String instanceID) {
+
+		}
+
+		@Override
+		public Map<String, Value> getValues() {
+			return values;
+		}
+
+		@Override
+		public void hideValues(Collection<String> names) {
+
+		}
+
+		@Override
+		public Map<String, Value> getAllValues() {
+			return values;
+		}
+
+		@Override
+		public EntityStore getMutableStore() {
+			return mutableStore;
+		}
+
+		@Override
+		public EntityStore getPermanentStore() {
+			return new EntityStore();
+		}
+
+		@Override
+		public ChildrenStore getChildrenStore() {
+			return new ChildrenStore();
+		}
+
+		@Override
+		public RelationStore getNtoMStore() {
+			return new RelationStore();
+		}
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/PoolServiceTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/PoolServiceTest.java
new file mode 100644
index 0000000..c68a44f
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/PoolServiceTest.java
@@ -0,0 +1,189 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
+
+import java.util.Arrays;
+import java.util.Optional;
+
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.ModelManager;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.Pool;
+import org.eclipse.mdm.api.dflt.model.Project;
+import org.eclipse.mdm.businessobjects.control.I18NActivity;
+import org.eclipse.mdm.businessobjects.control.MDMEntityAccessException;
+import org.eclipse.mdm.businessobjects.control.NavigationActivity;
+import org.eclipse.mdm.businessobjects.control.SearchActivity;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class PoolServiceTest {
+
+	ApplicationContext context = Mockito.mock(ApplicationContext.class);
+	EntityManager em = Mockito.mock(EntityManager.class);
+	ModelManager mm = mockModelManager();
+	ConnectorService connectorService = Mockito.mock(ConnectorService.class);
+	SearchActivity searchActivity = Mockito.mock(SearchActivity.class);
+	NavigationActivity navigationActivity = Mockito.mock(NavigationActivity.class);
+	I18NActivity i18nActivity = Mockito.mock(I18NActivity.class);
+
+	PoolService service = new PoolService(connectorService, searchActivity, navigationActivity, i18nActivity);
+
+	@Before
+	public void init() {
+		when(connectorService.getContextByName("MDMTEST")).thenReturn(context);
+		when(context.getEntityManager()).thenReturn(Optional.of(em));
+		when(context.getModelManager()).thenReturn(Optional.of(mm));
+	}
+
+	@Test
+	public void testGetPool() throws DataAccessException {
+		service.getPool("MDMTEST", "1");
+
+		verify(em).load(Pool.class, "1");
+		verifyNoMoreInteractions(searchActivity);
+	}
+
+	@Test
+	public void testGetPoolsEmptyFilter() throws DataAccessException {
+		service.getPools("MDMTEST", "");
+
+		verify(em).loadAll(Mockito.any());
+		verifyNoMoreInteractions(searchActivity);
+	}
+
+	@Test
+	public void testGetPoolsNullFilter() throws DataAccessException {
+		service.getPools("MDMTEST", null);
+
+		verify(em).loadAll(Mockito.any());
+		verifyNoMoreInteractions(searchActivity);
+	}
+
+	@Test(expected = MDMEntityAccessException.class)
+	public void testGetPoolsWrongEnvironment() {
+		doThrow(MDMEntityAccessException.class).when(connectorService).getContextByName("wrongEnvironment");
+
+		service.getPools("wrongEnvironment", "Pool.Name eq 'crash'");
+	}
+
+	@Test
+	public void testGetPoolsParentFilter() {
+		service.getPools("MDMTEST", "Project.Id eq '4711'");
+
+		verify(navigationActivity).getPools("MDMTEST", "4711");
+		verifyZeroInteractions(searchActivity);
+	}
+
+	@Test
+	public void testGetPoolsNoParentFilter() {
+		service.getPools("MDMTEST", "Project.Id eq '4711' or Project.Name eq 'Project A'");
+
+		verify(searchActivity).search(context, Pool.class, "Project.Id eq '4711' or Project.Name eq 'Project A'");
+		verifyZeroInteractions(navigationActivity);
+	}
+
+	@Test
+	public void testGetPools() {
+		service.getPools("MDMTEST", "Pool.Name eq 'crash'");
+
+		verify(searchActivity).search(context, Pool.class, "Pool.Name eq 'crash'");
+	}
+
+	@Test
+	public void testGetSearchAttributes() {
+		service.getSearchAttributes("MDMTEST");
+
+		verify(searchActivity).listAvailableAttributes(context, Pool.class);
+	}
+
+	@Test
+	public void testLocalizeAttributes() {
+		service.localizeAttributes("MDMTEST");
+		verify(i18nActivity).localizeAttributes("MDMTEST", Pool.class);
+	}
+
+	@Test
+	public void testLocalizeType() {
+		service.localizeType("MDMTEST");
+		verify(i18nActivity).localizeType("MDMTEST", Pool.class);
+	}
+
+	private ModelManager mockModelManager() {
+
+		Attribute projectId = mock(Attribute.class);
+		when(projectId.getName()).thenReturn("Id");
+		when(projectId.getValueType()).thenReturn(ValueType.STRING);
+		when(projectId.createValue(any(), any())).thenCallRealMethod();
+		when(projectId.createValue(any(), anyBoolean(), any())).thenCallRealMethod();
+
+		Attribute projectName = mock(Attribute.class);
+		when(projectName.getName()).thenReturn("Name");
+		when(projectName.getValueType()).thenReturn(ValueType.STRING);
+		when(projectName.createValue(any(), any())).thenCallRealMethod();
+		when(projectName.createValue(any(), anyBoolean(), any())).thenCallRealMethod();
+
+		EntityType project = mock(EntityType.class);
+		when(project.getSourceName()).thenReturn("MDMTEST");
+		when(project.getName()).thenReturn("Project");
+		when(project.getAttributes()).thenReturn(Arrays.asList(projectId));
+		when(project.getAttribute("Id")).thenReturn(projectId);
+		when(project.getIDAttribute()).thenReturn(projectId);
+		when(project.getAttribute("Name")).thenReturn(projectName);
+		when(project.getNameAttribute()).thenReturn(projectName);
+
+		Attribute poolId = mock(Attribute.class);
+		when(poolId.getName()).thenReturn("Id");
+		when(poolId.getValueType()).thenReturn(ValueType.LONG);
+
+		Attribute poolName = mock(Attribute.class);
+		when(poolName.getName()).thenReturn("Name");
+		when(poolName.getValueType()).thenReturn(ValueType.STRING);
+
+		EntityType pool = mock(EntityType.class);
+		when(pool.getSourceName()).thenReturn("MDMTEST");
+		when(pool.getName()).thenReturn("Pool");
+		when(pool.getAttributes()).thenReturn(Arrays.asList(poolId, poolName));
+		when(pool.getAttribute("Name")).thenReturn(poolName);
+		when(pool.getIDAttribute()).thenReturn(poolId);
+
+		when(poolId.getEntityType()).thenReturn(pool);
+		when(poolName.getEntityType()).thenReturn(pool);
+
+		ModelManager mmgr = mock(ModelManager.class);
+		when(mmgr.listEntityTypes()).thenReturn(Arrays.asList(project, pool));
+		when(mmgr.getEntityType(Project.class)).thenReturn(project);
+		when(mmgr.getEntityType("Project")).thenReturn(project);
+		when(mmgr.getEntityType(Pool.class)).thenReturn(pool);
+		when(mmgr.getEntityType("Pool")).thenReturn(pool);
+
+		return mmgr;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/ProjectServiceTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/ProjectServiceTest.java
new file mode 100644
index 0000000..21c9dce
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/ProjectServiceTest.java
@@ -0,0 +1,111 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary;
+
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+import java.util.Optional;
+
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.Project;
+import org.eclipse.mdm.businessobjects.control.I18NActivity;
+import org.eclipse.mdm.businessobjects.control.MDMEntityAccessException;
+import org.eclipse.mdm.businessobjects.control.NavigationActivity;
+import org.eclipse.mdm.businessobjects.control.SearchActivity;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class ProjectServiceTest {
+
+	ApplicationContext context = Mockito.mock(ApplicationContext.class);
+	EntityManager em = Mockito.mock(EntityManager.class);
+	ConnectorService connectorService = Mockito.mock(ConnectorService.class);
+	SearchActivity searchActivity = Mockito.mock(SearchActivity.class);
+	NavigationActivity navigationActivity = Mockito.mock(NavigationActivity.class);
+	I18NActivity i18nActivity = Mockito.mock(I18NActivity.class);
+
+	ProjectService service = new ProjectService(connectorService, searchActivity, i18nActivity);
+
+	@Before
+	public void init() {
+		when(context.getEntityManager()).thenReturn(Optional.of(em));
+		when(connectorService.getContextByName("MDMTEST")).thenReturn(context);
+	}
+
+	@Test
+	public void testGetProject() throws DataAccessException {
+		service.getProject("MDMTEST", "1");
+
+		verify(em).load(Project.class, "1");
+		verifyNoMoreInteractions(searchActivity);
+	}
+
+	@Test
+	public void testGetProjectsEmptyFilter() throws DataAccessException {
+		service.getProjects("MDMTEST", "");
+
+		verify(em).loadAll(Mockito.any());
+		verifyNoMoreInteractions(searchActivity);
+	}
+
+	@Test
+	public void testGetProjectsNullFilter() throws DataAccessException {
+		service.getProjects("MDMTEST", null);
+
+		verify(em).loadAll(Mockito.any());
+		verifyNoMoreInteractions(searchActivity);
+	}
+
+	@Test(expected = MDMEntityAccessException.class)
+	public void testGetProjectsWrongEnvironment() {
+		doThrow(MDMEntityAccessException.class).when(connectorService).getContextByName("wrongEnvironment");
+
+		service.getProjects("wrongEnvironment", "Project.Name eq crash");
+	}
+
+	@Test
+	public void testGetProjects() {
+		service.getProjects("MDMTEST", "Project.Name eq crash");
+
+		verify(searchActivity).search(context, Project.class, "Project.Name eq crash");
+	}
+
+	@Test
+	public void testGetSearchAttributes() {
+		service.getSearchAttributes("MDMTEST");
+
+		verify(searchActivity).listAvailableAttributes(context, Project.class);
+	}
+
+	@Test
+	public void testLocalizeAttributes() {
+		service.localizeAttributes("MDMTEST");
+		verify(i18nActivity).localizeAttributes("MDMTEST", Project.class);
+	}
+
+	@Test
+	public void testLocalizeType() {
+		service.localizeType("MDMTEST");
+		verify(i18nActivity).localizeType("MDMTEST", Project.class);
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogAttributeTEQResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogAttributeTEQResourceIntegrationTest.java
new file mode 100644
index 0000000..2bdf496
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogAttributeTEQResourceIntegrationTest.java
@@ -0,0 +1,74 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for CatalogAttributeResource for TestEquipment
+ * {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class CatalogAttributeTEQResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing CatalogAttributeTEQResourceIntegrationTest");
+
+		// prepare test data for creating the CatalogComponent
+		CatalogComponentTEQResourceIntegrationTest.prepareTestData();
+		CatalogComponentTEQResourceIntegrationTest.createEntity();
+
+		// prepare test data for creating the ValueList to reference
+		ValueListResourceIntegrationTest.prepareTestData();
+		ValueListResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(CatalogAttributeTEQResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/catcomps/testequipment/"
+				+ getTestDataValue(CatalogComponentTEQResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/catattrs");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testCatAttrTEQ");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "CatalogAttribute");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json.add(ResourceConstants.ENTITYATTRIBUTE_DATATYPE, new JsonPrimitive("STRING"));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+
+		json = new JsonObject();
+		json.add("ValueList",
+				new JsonPrimitive(getTestDataValue(ValueListResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		putTestDataValue(TESTDATA_UPDATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(CatalogComponentTEQResourceIntegrationTest.class);
+		CatalogComponentTEQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(ValueListResourceIntegrationTest.class);
+		ValueListResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogAttributeTSQResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogAttributeTSQResourceIntegrationTest.java
new file mode 100644
index 0000000..f5a1248
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogAttributeTSQResourceIntegrationTest.java
@@ -0,0 +1,73 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for CatalogAttributeResource for TestSequence {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class CatalogAttributeTSQResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing CatalogAttributeTSQResourceIntegrationTest");
+
+		// prepare test data for creating the CatalogComponent
+		CatalogComponentTSQResourceIntegrationTest.prepareTestData();
+		CatalogComponentTSQResourceIntegrationTest.createEntity();
+
+		// prepare test data for creating the ValueList to reference
+		ValueListResourceIntegrationTest.prepareTestData();
+		ValueListResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(CatalogAttributeTSQResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/catcomps/testsequence/"
+				+ getTestDataValue(CatalogComponentTSQResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/catattrs");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testCatAttrTSQ");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "CatalogAttribute");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json.add(ResourceConstants.ENTITYATTRIBUTE_DATATYPE, new JsonPrimitive("STRING"));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+
+		json = new JsonObject();
+		json.add("ValueList",
+				new JsonPrimitive(getTestDataValue(ValueListResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		putTestDataValue(TESTDATA_UPDATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(CatalogComponentTSQResourceIntegrationTest.class);
+		CatalogComponentTSQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(ValueListResourceIntegrationTest.class);
+		ValueListResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogAttributeUUTResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogAttributeUUTResourceIntegrationTest.java
new file mode 100644
index 0000000..8193565
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogAttributeUUTResourceIntegrationTest.java
@@ -0,0 +1,74 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for CatalogAttributeResource for UnitUnderTest
+ * {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class CatalogAttributeUUTResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing CatalogAttributeUUTResourceIntegrationTest");
+
+		// prepare test data for creating the CatalogComponent
+		CatalogComponentUUTResourceIntegrationTest.prepareTestData();
+		CatalogComponentUUTResourceIntegrationTest.createEntity();
+
+		// prepare test data for creating the ValueList to reference
+		ValueListResourceIntegrationTest.prepareTestData();
+		ValueListResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(CatalogAttributeUUTResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/catcomps/unitundertest/"
+				+ getTestDataValue(CatalogComponentUUTResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/catattrs");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testCatAttrUUT");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "CatalogAttribute");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json.add(ResourceConstants.ENTITYATTRIBUTE_DATATYPE, new JsonPrimitive("STRING"));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+
+		json = new JsonObject();
+		json.add("ValueList",
+				new JsonPrimitive(getTestDataValue(ValueListResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		putTestDataValue(TESTDATA_UPDATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(CatalogComponentUUTResourceIntegrationTest.class);
+		CatalogComponentUUTResourceIntegrationTest.deleteEntity();
+
+		setContextClass(ValueListResourceIntegrationTest.class);
+		ValueListResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogComponentTEQResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogComponentTEQResourceIntegrationTest.java
new file mode 100644
index 0000000..7a342fc
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogComponentTEQResourceIntegrationTest.java
@@ -0,0 +1,49 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for CatalogComponentResource for TestEquipment
+ * {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class CatalogComponentTEQResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing CatalogComponentTEQResourceIntegrationTest");
+
+		// set up test data
+		setContextClass(CatalogComponentTEQResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/catcomps/testequipment");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testCatCompTEQ");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "CatalogComponent");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogComponentTSQResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogComponentTSQResourceIntegrationTest.java
new file mode 100644
index 0000000..c2e12eb
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogComponentTSQResourceIntegrationTest.java
@@ -0,0 +1,48 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for CatalogComponentResource for TestSequence {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class CatalogComponentTSQResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing CatalogComponentTSQResourceIntegrationTest");
+
+		// set up test data
+		setContextClass(CatalogComponentTSQResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/catcomps/testsequence");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testCatCompTSQ");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "CatalogComponent");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogComponentUUTResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogComponentUUTResourceIntegrationTest.java
new file mode 100644
index 0000000..e775c33
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogComponentUUTResourceIntegrationTest.java
@@ -0,0 +1,49 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for CatalogComponentResource for UnitUnderTest
+ * {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class CatalogComponentUUTResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing CatalogComponentUUTResourceIntegrationTest");
+
+		// set up test data
+		setContextClass(CatalogComponentUUTResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/catcomps/unitundertest");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testCatCompUUT");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "CatalogComponent");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogSensorAttributeResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogSensorAttributeResourceIntegrationTest.java
new file mode 100644
index 0000000..41c5026
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogSensorAttributeResourceIntegrationTest.java
@@ -0,0 +1,65 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for CatalogSensorAttributeResource
+ * 
+ * @author Philipp Schweinbenz, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class CatalogSensorAttributeResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing CatalogSensorAttributeResourceIntegrationTest");
+
+		// prepare test data for creating the CatalogSensor
+		CatalogSensorResourceIntegrationTest.prepareTestData();
+		CatalogSensorResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(CatalogSensorAttributeResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/catcomps/testequipment/"
+				+ getTestDataValue(CatalogComponentTEQResourceIntegrationTest.class, TESTDATA_ENTITY_ID)
+				+ "/catsensors/" + getTestDataValue(CatalogSensorResourceIntegrationTest.class, TESTDATA_ENTITY_ID)
+				+ "/catsensorattrs");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testCatSensorAttr");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "CatalogAttribute");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json.add(ResourceConstants.ENTITYATTRIBUTE_DATATYPE, new JsonPrimitive("STRING"));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(CatalogSensorResourceIntegrationTest.class);
+		CatalogSensorResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogComponentTEQResourceIntegrationTest.class);
+		CatalogComponentTEQResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogSensorResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogSensorResourceIntegrationTest.java
new file mode 100755
index 0000000..c55210e
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/CatalogSensorResourceIntegrationTest.java
@@ -0,0 +1,61 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for CatalogSensorResource
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class CatalogSensorResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing CatalogSensorResourceIntegrationTest");
+
+		// prepare test data for creating the CatalogComponent
+		CatalogComponentTEQResourceIntegrationTest.prepareTestData();
+		CatalogComponentTEQResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(CatalogSensorResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI,
+				"/catcomps/testequipment/"
+						+ getTestDataValue(CatalogComponentTEQResourceIntegrationTest.class, TESTDATA_ENTITY_ID)
+						+ "/catsensors");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testCatSensor");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "CatalogSensor");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(CatalogComponentTEQResourceIntegrationTest.class);
+		CatalogComponentTEQResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ChannelGroupResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ChannelGroupResourceIntegrationTest.java
new file mode 100644
index 0000000..4446a25
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ChannelGroupResourceIntegrationTest.java
@@ -0,0 +1,64 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for {@ChannelGroupResource}.
+ * 
+ * @author Johannes Stamm, Peak Solution GmbH Nuernberg
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class ChannelGroupResourceIntegrationTest extends EntityResourceIntegrationTest {
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing ChannelGroupResourceIntegrationTest");
+
+		// prepare test data for creating the parent Measurement
+		MeasurementResourceIntegrationTest.prepareTestData();
+		MeasurementResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(ChannelGroupResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/channelgroups");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testChannelGroup");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "ChannelGroup");
+		putTestDataValue(TESTDATA_NUMBER_OF_VALUES, "42");
+
+		// json object for teststep entity
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NUMBER_OF_VALUES,
+				new JsonPrimitive(getTestDataValue(TESTDATA_NUMBER_OF_VALUES)));
+		json.add("Measurement",
+				new JsonPrimitive(getTestDataValue(MeasurementResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		// call tearDownAfterClass() of parent entity
+		setContextClass(MeasurementResourceIntegrationTest.class);
+		MeasurementResourceIntegrationTest.tearDownAfterClass();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ChannelResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ChannelResourceIntegrationTest.java
new file mode 100644
index 0000000..d62bee1
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ChannelResourceIntegrationTest.java
@@ -0,0 +1,66 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for {@ChannelResource}.
+ * 
+ * @author Johannes Stamm, Peak Solution GmbH Nuernberg
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class ChannelResourceIntegrationTest extends EntityResourceIntegrationTest {
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing ChannelGroupResourceIntegrationTest");
+
+		// prepare test data for creating the parent Measurement
+		MeasurementResourceIntegrationTest.prepareTestData();
+		MeasurementResourceIntegrationTest.createEntity();
+		// prepare test data for creating Quantity
+		QuantityResourceIntegrationTest.prepareTestData();
+		QuantityResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(ChannelResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/channels");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testChannel");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "Channel");
+
+		// json object for teststep entity
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json.add("Measurement",
+				new JsonPrimitive(getTestDataValue(MeasurementResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		json.add("Quantity",
+				new JsonPrimitive(getTestDataValue(QuantityResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		// call tearDownAfterClass() of parent entity
+		setContextClass(MeasurementResourceIntegrationTest.class);
+		MeasurementResourceIntegrationTest.tearDownAfterClass();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ContextDescribableResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ContextDescribableResourceIntegrationTest.java
new file mode 100644
index 0000000..cebc995
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ContextDescribableResourceIntegrationTest.java
@@ -0,0 +1,195 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import static io.restassured.RestAssured.given;
+import static org.hamcrest.Matchers.allOf;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasEntry;
+import static org.hamcrest.Matchers.hasItem;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.hamcrest.Matchers.nullValue;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Assume;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+
+import io.restassured.http.ContentType;
+import io.restassured.response.ExtractableResponse;
+import io.restassured.response.Response;
+
+/*
+* @author Johannes Stamm, Peak Solution GmbH Nuernberg
+*/
+
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class ContextDescribableResourceIntegrationTest extends ResourceIntegrationTest {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(ContextDescribableResourceIntegrationTest.class);
+
+	@Test
+	public void test1FindContext() {
+		// only execute if not skipped by implementing test class
+		Assume.assumeFalse(testsToSkip.get(getContextClass()).get().contains(TestType.FIND));
+
+		String uri = getTestDataValue(TESTDATA_RESOURCE_URI) + "/" + getTestDataValue(TESTDATA_ENTITY_ID) + "/contexts";
+
+		LOGGER.debug(getContextClass().getSimpleName() + ".find() sending GET to " + uri);
+
+		ExtractableResponse<Response> response = given().get(uri).then().log().ifError().contentType(ContentType.JSON)
+				.body("data.first().ordered.UNITUNDERTEST.first().attributes",
+						hasItem(allOf(hasEntry("name", "Name"),
+								hasEntry("value",
+										getTestDataValue(TemplateComponentUUTResourceIntegrationTest.class,
+												TESTDATA_ENTITY_NAME)))))
+				.body("data.first().ordered.UNITUNDERTEST.first().attributes",
+						hasItem(allOf(hasEntry("name",
+								getTestDataValue(TemplateAttributeUUTResourceIntegrationTest.class,
+										TESTDATA_ENTITY_NAME)),
+								hasEntry("value", ""))))
+				.body("data.first().ordered.TESTSEQUENCE", equalTo(new ArrayList<>()))
+				.body("data.first().ordered.TESTEQUIPMENT", equalTo(new ArrayList<>()))
+				.body("data.first().measured", equalTo(new HashMap<>())).extract();
+
+		LOGGER.debug(getContextClass().getSimpleName() + " found " + response.asString());
+	}
+
+	@Test
+	public void test2FindContextTEQ() {
+		// only execute if not skipped by implementing test class
+		Assume.assumeFalse(testsToSkip.get(getContextClass()).get().contains(TestType.FIND));
+
+		String uri = getTestDataValue(TESTDATA_RESOURCE_URI) + "/" + getTestDataValue(TESTDATA_ENTITY_ID)
+				+ "/contexts/testequipment";
+
+		LOGGER.debug(getContextClass().getSimpleName() + ".find() sending GET to " + uri);
+
+		Map<String, List<Object>> excpectedAnswer = new HashMap<>();
+		excpectedAnswer.put("TESTEQUIPMENT", new ArrayList<>());
+
+		ExtractableResponse<Response> response = given().get(uri).then().log().ifError().contentType(ContentType.JSON)
+				.body("data.first().ordered", equalTo(excpectedAnswer))
+				.body("data.first().measured", equalTo(new HashMap<>())).extract();
+
+		LOGGER.debug(getContextClass().getSimpleName() + " found " + response.asString());
+	}
+
+	@Test
+	public void test3FindContextTSQ() {
+		// only execute if not skipped by implementing test class
+		Assume.assumeFalse(testsToSkip.get(getContextClass()).get().contains(TestType.FIND));
+
+		String uri = getTestDataValue(TESTDATA_RESOURCE_URI) + "/" + getTestDataValue(TESTDATA_ENTITY_ID)
+				+ "/contexts/testsequence";
+
+		LOGGER.debug(getContextClass().getSimpleName() + ".find() sending GET to " + uri);
+
+		Map<String, List<Object>> excpectedAnswer = new HashMap<>();
+		excpectedAnswer.put("TESTSEQUENCE", new ArrayList<>());
+
+		ExtractableResponse<Response> response = given().get(uri).then().log().ifError().contentType(ContentType.JSON)
+				.body("data.first().ordered", equalTo(excpectedAnswer))
+				.body("data.first().measured", equalTo(new HashMap<>())).extract();
+
+		LOGGER.debug(getContextClass().getSimpleName() + " found " + response.asString());
+	}
+
+	@Test
+	public void test4FindContextUUT() {
+		// only execute if not skipped by implementing test class
+		Assume.assumeFalse(testsToSkip.get(getContextClass()).get().contains(TestType.FIND));
+
+		String uri = getTestDataValue(TESTDATA_RESOURCE_URI) + "/" + getTestDataValue(TESTDATA_ENTITY_ID)
+				+ "/contexts/unitundertest";
+
+		LOGGER.debug(getContextClass().getSimpleName() + ".find() sending GET to " + uri);
+
+		ExtractableResponse<Response> response = given().get(uri).then().log().ifError().contentType(ContentType.JSON)
+				.body("data.first().ordered.UNITUNDERTEST", notNullValue())
+				.body("data.first().ordered.TESTEQUIPMENT", nullValue())
+				.body("data.first().ordered.TESTSEQUENCE", nullValue())
+				.body("data.first().measured", equalTo(new HashMap<>())).extract();
+
+		LOGGER.debug(getContextClass().getSimpleName() + " found " + response.asString());
+	}
+
+	@Test
+	public void test5UpdateContext() {
+		// only execute if not skipped by implementing test class
+		Assume.assumeFalse(testsToSkip.get(getContextClass()).get().contains(TestType.UPDATE_CONTEXT));
+
+		String uri = getTestDataValue(TESTDATA_RESOURCE_URI) + "/" + getTestDataValue(TESTDATA_ENTITY_ID) + "/contexts";
+
+		LOGGER.debug(getContextClass().getSimpleName() + ".update() sending PUT to " + uri + " with: "
+				+ getTestDataValue(TESTDATA_UPDATE_JSON_BODY));
+
+		ExtractableResponse<Response> response = given().contentType(ContentType.JSON)
+				.body(getTestDataValue(TESTDATA_UPDATE_JSON_BODY)).put(uri).then().log().ifError()
+				.contentType(ContentType.JSON)
+				.body("data.first().ordered.UNITUNDERTEST.first().attributes",
+						hasItem(allOf(hasEntry("name", "Name"),
+								hasEntry("value",
+										getTestDataValue(TemplateComponentUUTResourceIntegrationTest.class,
+												TESTDATA_ENTITY_NAME)))))
+				.body("data.first().ordered.UNITUNDERTEST.first().attributes",
+						hasItem(allOf(hasEntry("name",
+								getTestDataValue(TemplateAttributeUUTResourceIntegrationTest.class,
+										TESTDATA_ENTITY_NAME)),
+								hasEntry("value", "updated"))))
+				.body("data.first().measured.UNITUNDERTEST.first().attributes",
+						hasItem(allOf(hasEntry("name", "Name"),
+								hasEntry("value",
+										getTestDataValue(TemplateComponentUUTResourceIntegrationTest.class,
+												TESTDATA_ENTITY_NAME)))))
+				.body("data.first().measured.UNITUNDERTEST.first().attributes", hasItem(allOf(hasEntry("name",
+						getTestDataValue(TemplateAttributeUUTResourceIntegrationTest.class, TESTDATA_ENTITY_NAME)),
+						hasEntry("value", "updated"))))
+				.extract();
+
+		LOGGER.debug(getContextClass().getSimpleName() + " updated " + response.asString());
+	}
+
+	public static JsonObject createContextRequest(String compName, String attrName) {
+		String req = "{\r\n" + "  \"data\": [{\r\n" + "    \"measured\": {\r\n" + "      \"UNITUNDERTEST\": [{\r\n"
+				+ "        \"attributes\": [{\r\n" + "          \"name\": \"Name\",\r\n" + "          \"value\": \""
+				+ compName + "\"\r\n" + "        },{\r\n" + "          \"name\": \"" + attrName + "\",\r\n"
+				+ "          \"value\": \"updated\"\r\n" + "        }]\r\n" + "      }]\r\n" + "    },\r\n"
+				+ "    \"ordered\": {\r\n" + "      \"UNITUNDERTEST\": [{\r\n" + "        \"attributes\": [{\r\n"
+				+ "          \"name\": \"" + attrName + "\",\r\n" + "          \"value\": \"updated\"\r\n"
+				+ "        },{\r\n" + "          \"name\": \"Name\",\r\n" + "          \"value\": \"" + compName
+				+ "\"\r\n" + "        }]\r\n" + "      }]\r\n" + "    }\r\n" + "  }]\r\n" + "}";
+
+		return new JsonParser().parse(req).getAsJsonObject();
+	}
+
+	/**
+	 * Gets the logger
+	 * 
+	 * @return logger configured to current context class
+	 */
+	public static Logger getLogger() {
+		return LOGGER;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/EntityResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/EntityResourceIntegrationTest.java
new file mode 100644
index 0000000..6ae6aa0
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/EntityResourceIntegrationTest.java
@@ -0,0 +1,231 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import static io.restassured.RestAssured.given;
+import static org.hamcrest.Matchers.equalTo;
+
+import org.junit.Assume;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.google.gson.JsonPrimitive;
+
+import io.restassured.http.ContentType;
+import io.restassured.response.ExtractableResponse;
+import io.restassured.response.Response;
+
+/**
+ * Abstract test class for Entity resources. Tests are executed in
+ * {@code FixMethodOrder(MethodSorters.NAME_ASCENDING)} as {@link test1Create},
+ * {@link test2Find()}, {@link test3FindAll()}, {@link test4Update()} and
+ * {@link test5Delete()} depend on the entity created by test1Create().
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ *
+ */
+// TODO anehmer on 2017-11-23: test for specific return codes
+// TODO anehmer on 2017-11-24: expand tests to localization and search attribute
+// information
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public abstract class EntityResourceIntegrationTest extends ResourceIntegrationTest {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(EntityResourceIntegrationTest.class);
+
+	@Test
+	public void test1Create() {
+		// only execute if not skipped by implementing test class
+		Assume.assumeFalse(testsToSkip.get(getContextClass()).get().contains(TestType.CREATE));
+
+		createEntity();
+	}
+
+	/**
+	 * Static method that can be utilised by tests to create a specific entity or is
+	 * called indirectly by JUnit
+	 */
+	public static void createEntity() {
+		// do not create entity if it was already created in a currently running
+		// prepareTestData() cascade
+		if (isTestDataValuePresent(TESTDATA_ENTITY_ID)) {
+			LOGGER.debug(getContextClass().getSimpleName() + ".create() aborted as entity "
+					+ getTestDataValue(TESTDATA_ENTITY_NAME) + " of type " + getTestDataValue(TESTDATA_ENTITY_TYPE)
+					+ " was already created");
+			return;
+		}
+
+		LOGGER.debug(getContextClass().getSimpleName() + ".create() sending POST to "
+				+ getTestDataValue(TESTDATA_RESOURCE_URI) + " with: " + getTestDataValue(TESTDATA_CREATE_JSON_BODY));
+
+		ExtractableResponse<io.restassured.response.Response> response = given().contentType(ContentType.JSON)
+				.body(getTestDataValue(TESTDATA_CREATE_JSON_BODY)).post(getTestDataValue(TESTDATA_RESOURCE_URI)).then()
+				.log().ifError().contentType(ContentType.JSON)
+				// do not check for name equality as that might be created randomly
+				.and().body("data.first().type", equalTo(getTestDataValue(TESTDATA_ENTITY_TYPE))).extract();
+
+		LOGGER.debug(getContextClass().getSimpleName() + " created " + response.asString());
+
+		putTestDataValue(TESTDATA_ENTITY_ID, response.path("data.first().id"));
+		putTestDataValue(TESTDATA_ENTITY_NAME, response.path("data.first().name"));
+	}
+
+	@Test
+	public void test2Find() {
+		// only execute if not skipped by implementing test class
+		Assume.assumeFalse(testsToSkip.get(getContextClass()).get().contains(TestType.FIND));
+
+		String uri = getTestDataValue(TESTDATA_RESOURCE_URI) + "/"
+				+ (EntityResourceIntegrationTest.findByName.getOrElse(getContextClass(), false)
+						? getTestDataValue(TESTDATA_ENTITY_NAME)
+						: getTestDataValue(TESTDATA_ENTITY_ID));
+
+		LOGGER.debug(getContextClass().getSimpleName() + ".find() sending GET to " + uri);
+
+		ExtractableResponse<Response> response = given().get(uri).then().log().ifError().contentType(ContentType.JSON)
+				.body("data.first().name", equalTo(getTestDataValue(TESTDATA_ENTITY_NAME)))
+				.body("data.first().type", equalTo(getTestDataValue(TESTDATA_ENTITY_TYPE))).extract();
+
+		LOGGER.debug(getContextClass().getSimpleName() + " found " + response.asString());
+	}
+
+	/**
+	 * Finds the first entity of the {@code EntityType} set in the context and put
+	 * the found ID in the context for further usage
+	 */
+	public static void findFirst() {
+		LOGGER.debug(getContextClass().getSimpleName() + ".find() sending GET to "
+				+ getTestDataValue(TESTDATA_RESOURCE_URI));
+
+		String id = given().get(getTestDataValue(TESTDATA_RESOURCE_URI)).then().log().ifError()
+				.contentType(ContentType.JSON)
+				.body("data.first().name", equalTo(getTestDataValue(TESTDATA_ENTITY_NAME)))
+				.body("data.first().type", equalTo(getTestDataValue(TESTDATA_ENTITY_TYPE))).extract()
+				.path("data.first().id");
+
+		LOGGER.debug(getContextClass().getSimpleName() + " found " + getTestDataValue(TESTDATA_ENTITY_TYPE)
+				+ " with ID " + id);
+
+		putTestDataValue(TESTDATA_ENTITY_ID, id);
+	}
+
+	@Test
+	public void test3FindAll() {
+		// only execute if not skipped by implementing test class
+		Assume.assumeFalse(testsToSkip.get(getContextClass()).get().contains(TestType.FINDALL));
+
+		LOGGER.debug(getContextClass().getSimpleName() + ".findAll() sending GET to "
+				+ getTestDataValue(TESTDATA_RESOURCE_URI));
+
+		ExtractableResponse<Response> response = given().get(getTestDataValue(TESTDATA_RESOURCE_URI)).then().log()
+				.ifError().contentType(ContentType.JSON)
+				.body("data.first().type", equalTo(getTestDataValue(TESTDATA_ENTITY_TYPE))).extract();
+
+		LOGGER.debug(getContextClass().getSimpleName() + " found all " + response.asString());
+	}
+
+	// TODO anehmer on 2017-11-09: test findAll with filter
+
+	// TODO anehmer on 2018-02-06: update of relations are not checked as the
+	// returned Json does not include relations
+	@Test
+	public void test4Update() {
+		// only execute if not skipped by implementing test class
+		Assume.assumeFalse(testsToSkip.get(getContextClass()).get().contains(TestType.UPDATE));
+
+		updateEntity();
+	}
+
+	/**
+	 * Static method that can be utilised by tests to update a specific entity or is
+	 * called indirectly by JUnit
+	 */
+	public static void updateEntity() {
+		JsonObject json;
+		// if no UPDATE_JSON_BODY is defined in implementing test, just run the MimeType
+		// update
+		if (!isTestDataValuePresent(TESTDATA_UPDATE_JSON_BODY)) {
+			json = new JsonObject();
+		}
+		// or add it to the existing update
+		else {
+			json = new JsonParser().parse(getTestDataValue(TESTDATA_UPDATE_JSON_BODY)).getAsJsonObject();
+		}
+		json.add("MimeType", new JsonPrimitive("updatedMimeType"));
+		putTestDataValue(TESTDATA_UPDATE_JSON_BODY, json.toString());
+
+		String uri = getTestDataValue(TESTDATA_RESOURCE_URI) + "/" + getTestDataValue(TESTDATA_ENTITY_ID);
+
+		LOGGER.debug(getContextClass().getSimpleName() + ".update() sending PUT to " + uri + " with: "
+				+ getTestDataValue(TESTDATA_UPDATE_JSON_BODY));
+
+		ExtractableResponse<Response> response = given().contentType(ContentType.JSON)
+				// TODO anehmer on 2017-11-15: the update should use different data but as the
+				// returned JSON represents
+				// the entity prior update it does not make any difference as the update is
+				// performed just based on identical data. We should discuss the PUT-behaviour
+				// instead: return the old or updated object as returning the updated one would
+				// mean to perform another get as the ODSTransaction.update() does not return
+				// the updated entity
+				// TODO anehmer on 2017-11-15: use Description to test update
+				.body(getTestDataValue(TESTDATA_UPDATE_JSON_BODY)).put(uri).then().log().ifError()
+				.contentType(ContentType.JSON)
+				.body("data.first().name", equalTo(getTestDataValue(TESTDATA_ENTITY_NAME)))
+				.body("data.first().type", equalTo(getTestDataValue(TESTDATA_ENTITY_TYPE)))
+				.body("data.first().attributes.find {it.name == 'MimeType'}.value", equalTo("updatedMimeType"))
+				.extract();
+
+		LOGGER.debug(getContextClass().getSimpleName() + " updated " + response.asString());
+	}
+
+	@Test
+	public void test5Delete() {
+		// only execute if not skipped by implementing test class
+		Assume.assumeFalse(testsToSkip.get(getContextClass()).get().contains(TestType.DELETE));
+
+		deleteEntity();
+	}
+
+	/**
+	 * Static method that can be utilised by tests to delete a specific entity or is
+	 * called indirectly by JUnit
+	 */
+	public static void deleteEntity() {
+		String uri = getTestDataValue(TESTDATA_RESOURCE_URI) + "/" + getTestDataValue(TESTDATA_ENTITY_ID);
+
+		LOGGER.debug(getContextClass().getSimpleName() + ".delete() sending DELETE to " + uri);
+
+		ExtractableResponse<Response> response = given().delete(uri).then().log().ifError()
+				.body("data.first().name", equalTo(getTestDataValue(TESTDATA_ENTITY_NAME)))
+				.body("data.first().type", equalTo(getTestDataValue(TESTDATA_ENTITY_TYPE))).extract();
+
+		LOGGER.debug(getContextClass().getSimpleName() + " deleted " + response.asString());
+
+		removeTestDataValue(TESTDATA_ENTITY_ID);
+	}
+
+	/**
+	 * Gets the logger
+	 * 
+	 * @return logger configured to current context class
+	 */
+	public static Logger getLogger() {
+		return LOGGER;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/MeasurementContextResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/MeasurementContextResourceIntegrationTest.java
new file mode 100644
index 0000000..71ddfbd
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/MeasurementContextResourceIntegrationTest.java
@@ -0,0 +1,86 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for {@TestStepResource}.
+ * 
+ * @author Johannes Stamm, Peak Solution GmbH Nuernberg
+ * @see EntityResourceIntegrationTest
+ *
+ */
+
+public class MeasurementContextResourceIntegrationTest extends ContextDescribableResourceIntegrationTest {
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing MeasurementContextResourceIntegrationTest");
+
+		TemplateAttributeUUTResourceIntegrationTest.prepareTestData();
+		TemplateAttributeUUTResourceIntegrationTest.createEntity();
+		String attrName = getTestDataValue(TESTDATA_ENTITY_NAME);
+		String compName = getTestDataValue(TemplateComponentUUTResourceIntegrationTest.class, TESTDATA_ENTITY_NAME);
+
+		// prepare test data for creating the linked tempaltes
+		TestStepWithTemplateResourceIntegrationTest.prepareTestData();
+		TestStepWithTemplateResourceIntegrationTest.createEntity();
+		// get id from teststep (contextclass
+		// TestStepWithTemplateResourceIntegrationTest)
+		String tsId = getTestDataValue(TESTDATA_ENTITY_ID);
+
+		// create measurement for this teststep
+		setContextClass(MeasurementResourceIntegrationTest.class);
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/measurements");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testMeasurement");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "Measurement");
+
+		JsonObject json1 = new JsonObject();
+		json1.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json1.add("TestStep", new JsonPrimitive(tsId));
+
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json1.toString());
+		MeasurementResourceIntegrationTest.createEntity();
+		// get id from teststep (contextclass
+		// TestStepWithTemplateResourceIntegrationTest)
+		String meaId = getTestDataValue(TESTDATA_ENTITY_ID);
+
+		// set up test data
+		setContextClass(MeasurementContextResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_ENTITY_ID, meaId);
+		putTestDataValue(TESTDATA_CONTEXT_GROUP, "measured");
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/measurements");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testMeasurement");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "Measurement");
+
+		JsonObject json = createContextRequest(compName, attrName);
+		putTestDataValue(TESTDATA_UPDATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		// call tearDownAfterClass() of parent entity (without template)
+		setContextClass(TestStepWithTemplateResourceIntegrationTest.class);
+		TestStepWithTemplateResourceIntegrationTest.tearDownAfterClass();
+
+		setContextClass(TemplateAttributeUUTResourceIntegrationTest.class);
+		TemplateAttributeUUTResourceIntegrationTest.tearDownAfterClass();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/MeasurementResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/MeasurementResourceIntegrationTest.java
new file mode 100644
index 0000000..bacad97
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/MeasurementResourceIntegrationTest.java
@@ -0,0 +1,59 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for {@MeasurementResource}.
+ * 
+ * @author Johannes Stamm, Peak Solution GmbH Nuernberg
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class MeasurementResourceIntegrationTest extends EntityResourceIntegrationTest {
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing MeasurementResourceIntegrationTest");
+
+		// prepare test data for creating the parent TestStep
+		TestStepResourceIntegrationTest.prepareTestData();
+		TestStepResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(MeasurementResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/measurements");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testMeasurement");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "Measurement");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json.add("TestStep",
+				new JsonPrimitive(getTestDataValue(TestStepResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(TestStepResourceIntegrationTest.class);
+		TestStepResourceIntegrationTest.tearDownAfterClass();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/NestedTemplateAttributeTEQResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/NestedTemplateAttributeTEQResourceIntegrationTest.java
new file mode 100644
index 0000000..d1c9c6b
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/NestedTemplateAttributeTEQResourceIntegrationTest.java
@@ -0,0 +1,88 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for NestedTemplateAttributeResource for TestEquipment
+ * {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class NestedTemplateAttributeTEQResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing NestedTemplateAttributeTEQResourceIntegrationTest");
+
+		// prepare test data for creating the CatalogAttribute
+		CatalogAttributeTEQResourceIntegrationTest.prepareTestData();
+		CatalogAttributeTEQResourceIntegrationTest.createEntity();
+
+		// prepare test data for creating the NestedTemplateComponent
+		NestedTemplateComponentTEQResourceIntegrationTest.prepareTestData();
+		NestedTemplateComponentTEQResourceIntegrationTest.createEntity();
+
+		setContextClass(NestedTemplateAttributeTEQResourceIntegrationTest.class);
+
+		// set up test data
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tplroots/testequipment/"
+				+ getTestDataValue(TemplateRootTEQResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/tplcomps/"
+				+ getTestDataValue(TemplateComponentTEQResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/tplcomps/"
+				+ getTestDataValue(NestedTemplateComponentTEQResourceIntegrationTest.class, TESTDATA_ENTITY_ID)
+				+ "/tplattrs");
+		putTestDataValue(TESTDATA_ENTITY_NAME,
+				getTestDataValue(CatalogAttributeTEQResourceIntegrationTest.class, TESTDATA_ENTITY_NAME));
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TemplateAttribute");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(
+				getTestDataValue(CatalogAttributeTEQResourceIntegrationTest.class, TESTDATA_ENTITY_NAME)));
+		json.add("catalogattribute", new JsonPrimitive(
+				getTestDataValue(CatalogAttributeTEQResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+
+		// delete the implicitly created NestedTemplateAttribute
+		NestedTemplateAttributeTEQResourceIntegrationTest.findFirst();
+		NestedTemplateAttributeTEQResourceIntegrationTest.deleteEntity();
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(NestedTemplateComponentTEQResourceIntegrationTest.class);
+		NestedTemplateComponentTEQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(TemplateComponentTEQResourceIntegrationTest.class);
+		TemplateComponentTEQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(TemplateRootTEQResourceIntegrationTest.class);
+		TemplateRootTEQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogAttributeTEQResourceIntegrationTest.class);
+		CatalogAttributeTEQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogComponentTEQResourceIntegrationTest.class);
+		CatalogComponentTEQResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/NestedTemplateAttributeTSQResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/NestedTemplateAttributeTSQResourceIntegrationTest.java
new file mode 100644
index 0000000..8fc9469
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/NestedTemplateAttributeTSQResourceIntegrationTest.java
@@ -0,0 +1,86 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for NestedTemplateAttributeResource for TestSequence
+ * {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class NestedTemplateAttributeTSQResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing NestedTemplateAttributeTSQResourceIntegrationTest");
+
+		// prepare test data for creating the CatalogAttribute
+		CatalogAttributeTSQResourceIntegrationTest.prepareTestData();
+		CatalogAttributeTSQResourceIntegrationTest.createEntity();
+
+		// prepare test data for creating the NestedTemplateComponent
+		NestedTemplateComponentTSQResourceIntegrationTest.prepareTestData();
+		NestedTemplateComponentTSQResourceIntegrationTest.createEntity();
+
+		setContextClass(NestedTemplateAttributeTSQResourceIntegrationTest.class);
+
+		// set up test data
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tplroots/testsequence/"
+				+ getTestDataValue(TemplateRootTSQResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/tplcomps/"
+				+ getTestDataValue(TemplateComponentTSQResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/tplcomps/"
+				+ getTestDataValue(NestedTemplateComponentTSQResourceIntegrationTest.class, TESTDATA_ENTITY_ID)
+				+ "/tplattrs");
+		putTestDataValue(TESTDATA_ENTITY_NAME,
+				getTestDataValue(CatalogAttributeTSQResourceIntegrationTest.class, TESTDATA_ENTITY_NAME));
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TemplateAttribute");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(
+				getTestDataValue(CatalogAttributeTSQResourceIntegrationTest.class, TESTDATA_ENTITY_NAME)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+
+		// delete the implicitly created NestedTemplateAttribute
+		NestedTemplateAttributeTSQResourceIntegrationTest.findFirst();
+		NestedTemplateAttributeTSQResourceIntegrationTest.deleteEntity();
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(NestedTemplateComponentTSQResourceIntegrationTest.class);
+		NestedTemplateComponentTSQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(TemplateComponentTSQResourceIntegrationTest.class);
+		TemplateComponentTSQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(TemplateRootTSQResourceIntegrationTest.class);
+		TemplateRootTSQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogAttributeTSQResourceIntegrationTest.class);
+		CatalogAttributeTSQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogComponentTSQResourceIntegrationTest.class);
+		CatalogComponentTSQResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/NestedTemplateAttributeUUTResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/NestedTemplateAttributeUUTResourceIntegrationTest.java
new file mode 100644
index 0000000..121b852
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/NestedTemplateAttributeUUTResourceIntegrationTest.java
@@ -0,0 +1,86 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for NestedTemplateAttributeResource for UnitUnderTest
+ * {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class NestedTemplateAttributeUUTResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing NestedTemplateAttributeUUTResourceIntegrationTest");
+
+		// prepare test data for creating the CatalogAttribute
+		CatalogAttributeUUTResourceIntegrationTest.prepareTestData();
+		CatalogAttributeUUTResourceIntegrationTest.createEntity();
+
+		// prepare test data for creating the NestedTemplateComponent
+		NestedTemplateComponentUUTResourceIntegrationTest.prepareTestData();
+		NestedTemplateComponentUUTResourceIntegrationTest.createEntity();
+
+		setContextClass(NestedTemplateAttributeUUTResourceIntegrationTest.class);
+
+		// set up test data
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tplroots/unitundertest/"
+				+ getTestDataValue(TemplateRootUUTResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/tplcomps/"
+				+ getTestDataValue(TemplateComponentUUTResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/tplcomps/"
+				+ getTestDataValue(NestedTemplateComponentUUTResourceIntegrationTest.class, TESTDATA_ENTITY_ID)
+				+ "/tplattrs");
+		putTestDataValue(TESTDATA_ENTITY_NAME,
+				getTestDataValue(CatalogAttributeUUTResourceIntegrationTest.class, TESTDATA_ENTITY_NAME));
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TemplateAttribute");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(
+				getTestDataValue(CatalogAttributeUUTResourceIntegrationTest.class, TESTDATA_ENTITY_NAME)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+
+		// delete the implicitly created NestedTemplateAttribute
+		NestedTemplateAttributeUUTResourceIntegrationTest.findFirst();
+		NestedTemplateAttributeUUTResourceIntegrationTest.deleteEntity();
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(NestedTemplateComponentUUTResourceIntegrationTest.class);
+		NestedTemplateComponentUUTResourceIntegrationTest.deleteEntity();
+
+		setContextClass(TemplateComponentUUTResourceIntegrationTest.class);
+		TemplateComponentUUTResourceIntegrationTest.deleteEntity();
+
+		setContextClass(TemplateRootUUTResourceIntegrationTest.class);
+		TemplateRootUUTResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogAttributeUUTResourceIntegrationTest.class);
+		CatalogAttributeUUTResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogComponentUUTResourceIntegrationTest.class);
+		CatalogComponentUUTResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/NestedTemplateComponentTEQResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/NestedTemplateComponentTEQResourceIntegrationTest.java
new file mode 100644
index 0000000..45535fd
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/NestedTemplateComponentTEQResourceIntegrationTest.java
@@ -0,0 +1,75 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for NestedTemplateComponentResource for TestEquipment
+ * {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class NestedTemplateComponentTEQResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing NestedTemplateComponentTEQResourceIntegrationTest");
+
+		// prepare test data for creating the CatalogComponent
+		CatalogComponentTEQResourceIntegrationTest.prepareTestData();
+		CatalogComponentTEQResourceIntegrationTest.createEntity();
+
+		// prepare test data for creating the TemplateRoot
+		TemplateComponentTEQResourceIntegrationTest.prepareTestData();
+		TemplateComponentTEQResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(NestedTemplateComponentTEQResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tplroots/testequipment/"
+				+ getTestDataValue(TemplateRootTEQResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/tplcomps/"
+				+ getTestDataValue(TemplateComponentTEQResourceIntegrationTest.class, TESTDATA_ENTITY_ID)
+				+ "/tplcomps");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testNestedTplCompTEQ");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TemplateComponent");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json.add(ResourceConstants.ENTITYATTRIBUTE_CATALOGCOMPONENT_ID, new JsonPrimitive(
+				getTestDataValue(CatalogComponentTEQResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(TemplateComponentTEQResourceIntegrationTest.class);
+		TemplateComponentTEQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(TemplateRootTEQResourceIntegrationTest.class);
+		TemplateRootTEQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogComponentTEQResourceIntegrationTest.class);
+		CatalogComponentTEQResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/NestedTemplateComponentTSQResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/NestedTemplateComponentTSQResourceIntegrationTest.java
new file mode 100644
index 0000000..7ac6684
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/NestedTemplateComponentTSQResourceIntegrationTest.java
@@ -0,0 +1,75 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for NestedTemplateComponentResource for TestSequence
+ * {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class NestedTemplateComponentTSQResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing NestedTemplateComponentTSQResourceIntegrationTest");
+
+		// prepare test data for creating the CatalogComponent
+		CatalogComponentTSQResourceIntegrationTest.prepareTestData();
+		CatalogComponentTSQResourceIntegrationTest.createEntity();
+
+		// prepare test data for creating the TemplateRoot
+		TemplateComponentTSQResourceIntegrationTest.prepareTestData();
+		TemplateComponentTSQResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(NestedTemplateComponentTSQResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tplroots/testsequence/"
+				+ getTestDataValue(TemplateRootTSQResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/tplcomps/"
+				+ getTestDataValue(TemplateComponentTSQResourceIntegrationTest.class, TESTDATA_ENTITY_ID)
+				+ "/tplcomps");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testNestedTplCompTSQ");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TemplateComponent");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json.add(ResourceConstants.ENTITYATTRIBUTE_CATALOGCOMPONENT_ID, new JsonPrimitive(
+				getTestDataValue(CatalogComponentTSQResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(TemplateComponentTSQResourceIntegrationTest.class);
+		TemplateComponentTSQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(TemplateRootTSQResourceIntegrationTest.class);
+		TemplateRootTSQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogComponentTSQResourceIntegrationTest.class);
+		CatalogComponentTSQResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/NestedTemplateComponentUUTResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/NestedTemplateComponentUUTResourceIntegrationTest.java
new file mode 100644
index 0000000..9192d4d
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/NestedTemplateComponentUUTResourceIntegrationTest.java
@@ -0,0 +1,75 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for NestedTemplateComponentResource for UnitUnderTest
+ * {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class NestedTemplateComponentUUTResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing NestedTemplateComponentUUTResourceIntegrationTest");
+
+		// prepare test data for creating the CatalogComponent
+		CatalogComponentUUTResourceIntegrationTest.prepareTestData();
+		CatalogComponentUUTResourceIntegrationTest.createEntity();
+
+		// prepare test data for creating the TemplateRoot
+		TemplateComponentUUTResourceIntegrationTest.prepareTestData();
+		TemplateComponentUUTResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(NestedTemplateComponentUUTResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tplroots/unitundertest/"
+				+ getTestDataValue(TemplateRootUUTResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/tplcomps/"
+				+ getTestDataValue(TemplateComponentUUTResourceIntegrationTest.class, TESTDATA_ENTITY_ID)
+				+ "/tplcomps");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testNestedTplCompUUT");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TemplateComponent");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json.add(ResourceConstants.ENTITYATTRIBUTE_CATALOGCOMPONENT_ID, new JsonPrimitive(
+				getTestDataValue(CatalogComponentUUTResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(TemplateComponentUUTResourceIntegrationTest.class);
+		TemplateComponentUUTResourceIntegrationTest.deleteEntity();
+
+		setContextClass(TemplateRootUUTResourceIntegrationTest.class);
+		TemplateRootUUTResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogComponentUUTResourceIntegrationTest.class);
+		CatalogComponentUUTResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/PhysicalDimensionResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/PhysicalDimensionResourceIntegrationTest.java
new file mode 100644
index 0000000..a949d39
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/PhysicalDimensionResourceIntegrationTest.java
@@ -0,0 +1,51 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for PhysicalDimensionResource.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class PhysicalDimensionResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing PhysicalDimensionResourceIntegrationTest");
+
+		// set up test data
+		setContextClass(PhysicalDimensionResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/physicaldimensions");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testPhysicalDimension");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "PhysicalDimension");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+
+		json = new JsonObject();
+		json.add("Mass", new JsonPrimitive(1));
+		putTestDataValue(TESTDATA_UPDATE_JSON_BODY, json.toString());
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/PoolResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/PoolResourceIntegrationTest.java
new file mode 100644
index 0000000..da87f9c
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/PoolResourceIntegrationTest.java
@@ -0,0 +1,61 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for {@PoolResource}.
+ * 
+ * @author Johannes Stamm, Peak Solution GmbH Nuernberg
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class PoolResourceIntegrationTest extends EntityResourceIntegrationTest {
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing PoolResourceIntegrationTest");
+
+		// prepare test data for creating the parent Project
+		ProjectResourceIntegrationTest.prepareTestData();
+		ProjectResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(PoolResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/pools");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testPool");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "Pool");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json.add("Project",
+				new JsonPrimitive(getTestDataValue(ProjectResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		// delete project
+		setContextClass(ProjectResourceIntegrationTest.class);
+		ProjectResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ProjectResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ProjectResourceIntegrationTest.java
new file mode 100644
index 0000000..f8ec60c
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ProjectResourceIntegrationTest.java
@@ -0,0 +1,47 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for {@ProjectResource}.
+ * 
+ * @author Johannes Stamm, Peak Solution GmbH Nuernberg
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class ProjectResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing ProjectResourceIntegrationTest");
+
+		// set up test data
+		setContextClass(ProjectResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/projects");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testProject");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "Project");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/QuantityResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/QuantityResourceIntegrationTest.java
new file mode 100755
index 0000000..f811175
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/QuantityResourceIntegrationTest.java
@@ -0,0 +1,62 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for QuantityResource.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class QuantityResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing QuantityResourceIntegrationTest");
+
+		// prepare test data for creating the Unit
+		UnitResourceIntegrationTest.prepareTestData();
+		UnitResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(QuantityResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/quantities");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testQuantity");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "Quantity");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		// TODO anehmer on 2017-11-17: create unit (and physDim) instead of taking fixed
+		// one
+		json.add(ResourceConstants.ENTITYATTRIBUTE_UNIT_ID,
+				new JsonPrimitive(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(UnitResourceIntegrationTest.class);
+		UnitResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ResourceIntegrationTest.java
new file mode 100644
index 0000000..af5510d
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ResourceIntegrationTest.java
@@ -0,0 +1,234 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
+
+import java.util.NoSuchElementException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.restassured.RestAssured;
+import io.restassured.authentication.FormAuthConfig;
+import io.restassured.authentication.FormAuthScheme;
+import io.vavr.collection.HashMap;
+import io.vavr.collection.HashSet;
+import io.vavr.collection.Map;
+import io.vavr.collection.Set;
+
+/*
+* @author Johannes Stamm, Peak Solution GmbH Nuernberg
+*/
+
+public abstract class ResourceIntegrationTest {
+	private static Logger LOGGER = LoggerFactory.getLogger(ResourceIntegrationTest.class);
+
+	private static final String HOST = "localhost";
+	private static final String PORT = "8080";
+	private static final String BASE_PATH = "org.eclipse.mdm.nucleus";
+	private static final String API_PATH = "mdm";
+	private static final String ENV_PATH = "environments";
+	protected static final String SOURCE_NAME = "MDMNVH";
+
+	private static final String AUTH_USERNAME = "sa";
+	private static final String AUTH_PASSWORD = "sa";
+
+	protected static final String TESTDATA_ENTITY_ID = "entityId";
+	protected static final String TESTDATA_ENTITY_NAME = "entityName";
+	protected static final String TESTDATA_ENTITY_TYPE = "entityType";
+	protected static final String TESTDATA_CONTEXT_GROUP = "contextGroup";
+	protected static final String TESTDATA_CREATE_JSON_BODY = "createJSONBody";
+	protected static final String TESTDATA_NUMBER_OF_VALUES = "NumberOfValues";
+	protected static final String TESTDATA_UPDATE_JSON_BODY = "updateJSONBody";
+	protected static final String TESTDATA_RESOURCE_URI = "resourceURI";
+	protected static final String TESTDATA_RANDOM_DATA = "RANDOM_DATA";
+
+	private static final String RANDOM_ENTITY_NAME_SUFFIX = "_" + Long.toHexString(System.currentTimeMillis());
+
+	public enum TestType {
+		CREATE, FIND, FINDALL, UPDATE, DELETE, UPDATE_CONTEXT, FIND_CONTEXT;
+	}
+
+	protected static Map<Class<?>, Set<TestType>> testsToSkip = HashMap.empty();
+
+	protected static Map<Class<?>, Map<String, String>> testDataMap = HashMap.empty();
+
+	// if this is set, the resource URI for find() is constructed with the name as
+	// the PATH_PARAM
+	protected static Map<Class<?>, Boolean> findByName = HashMap.empty();
+
+	/**
+	 * The context class must be set by implementing tests as the context to get
+	 * from and put test data values to
+	 */
+	private static Class<?> contextClass;
+
+	static {
+		// configure URI
+		StringBuilder baseURI = new StringBuilder();
+		baseURI.append("http://").append(HOST).append(":").append(PORT).append("/").append(BASE_PATH).append("/")
+				.append(API_PATH);
+		RestAssured.baseURI = baseURI.toString();
+		RestAssured.basePath = ENV_PATH + "/" + SOURCE_NAME;
+
+		LOGGER.debug("RestAssured set up to " + RestAssured.baseURI + "/" + RestAssured.basePath);
+
+		// setup authentication
+//		PreemptiveBasicAuthScheme authScheme = new PreemptiveBasicAuthScheme();
+		FormAuthScheme authScheme = new FormAuthScheme();
+		authScheme.setConfig(new FormAuthConfig("/" + BASE_PATH + "/j_security_check", "j_username", "j_password"));
+		authScheme.setUserName(AUTH_USERNAME);
+		authScheme.setPassword(AUTH_PASSWORD);
+
+		RestAssured.authentication = authScheme;
+
+		LOGGER.debug("RestAssured authentication set to credentials [" + AUTH_USERNAME + "]/[" + AUTH_PASSWORD + "]");
+	}
+
+	/**
+	 * Gets value with key from the testDataMap. The value map is thereby
+	 * automatically identified by the implementing class.
+	 * 
+	 * @param key key to get value for
+	 * @return value for given key
+	 */
+	protected static String getTestDataValue(String key) {
+		return getTestDataValue(getContextClass(), key);
+	}
+
+	/**
+	 * Gets value with key from the testDataMap using the context specified by
+	 * contextClass
+	 * 
+	 * @param contextClass the class of the test implementation
+	 * @param key          key to get value for
+	 * @return value for given key
+	 */
+	protected static String getTestDataValue(Class<?> contextClass, String key) {
+		return testDataMap.get(contextClass)
+				.map(valueMap -> valueMap.get(key).getOrElseThrow(() -> new NoSuchElementException("Key [" + key
+						+ "] not found in test data value map in context [" + contextClass.getSimpleName() + "]")))
+				.get();
+	}
+
+	/**
+	 * Checks if a test data value is present for the given key
+	 * 
+	 * @param key key to check presence of test data value for
+	 * @return true, if a test data value for the given key exists, false if not
+	 */
+	protected static boolean isTestDataValuePresent(String key) {
+		return testDataMap.get(getContextClass()).map(valueMap -> valueMap.get(key).isDefined()).get();
+	}
+
+	/**
+	 * Removes the test data value for the given key. If the key is not present,
+	 * nothing happens.
+	 * 
+	 * @param key key to remove test data value for
+	 */
+	protected static void removeTestDataValue(String key) {
+		testDataMap.get(getContextClass()).map(valueMap -> valueMap.remove(key))
+				.map(newValueMap -> testDataMap = testDataMap.put(getContextClass(), newValueMap));
+	}
+
+	/**
+	 * Puts value with key in the testDataMap. The value map is thereby
+	 * automatically identified by the implementing class.
+	 * 
+	 * @param key   key to store value under
+	 * @param value value to store
+	 */
+	protected static void putTestDataValue(String key, String value) {
+		Map<String, String> entityTestData = testDataMap.getOrElse(getContextClass(), HashMap.empty());
+
+		String valueWithSuffix = value;
+
+		// randomize name to allow failure runs not to require to reset the
+		// database in case the name of the entity must be unique
+		// do not append suffix if name is randomly generated
+		if (key.equals(TESTDATA_ENTITY_NAME) && !value.equals(TESTDATA_RANDOM_DATA)
+				&& (entityTestData.get(TESTDATA_ENTITY_NAME).isEmpty()
+						|| !entityTestData.get(TESTDATA_ENTITY_NAME).get().equals(TESTDATA_RANDOM_DATA))) {
+			// append suffix if it was not already appended or an already suffixed value was
+			// used for a new one (e.g: TplAttr.name and CatAttr.name)
+			if (!value.endsWith(RANDOM_ENTITY_NAME_SUFFIX)) {
+				valueWithSuffix = value + RANDOM_ENTITY_NAME_SUFFIX;
+			}
+		}
+
+		entityTestData = entityTestData.put(key, valueWithSuffix);
+
+		testDataMap = testDataMap.put(getContextClass(), entityTestData);
+	}
+
+	/**
+	 * Gets the context class set by a test implementation used to store context
+	 * aware test data
+	 * 
+	 * @return the context class of the test implementation
+	 */
+	protected static Class<?> getContextClass() {
+		assertThat(contextClass, is(notNullValue()));
+		return contextClass;
+	}
+
+	/**
+	 * Sets the context class used to store context aware test data. This method
+	 * must be called by any test implementation before using
+	 * {@link getTestDataValue} or {@link putTestDataValue}
+	 * 
+	 * @param clazz the context class set by a test implementation
+	 */
+	protected static void setContextClass(Class<?> clazz) {
+		contextClass = clazz;
+		testsToSkip = testsToSkip.put(clazz, HashSet.empty());
+		LOGGER = LoggerFactory.getLogger(clazz);
+	}
+
+	/**
+	 * Set the test with the given {@link TestType} to be skipped
+	 * 
+	 * @param testType the test to skip
+	 */
+	protected static void skipTest(TestType test) {
+		testsToSkip.get(getContextClass()).map(tests -> tests.add(test))
+				.map(newTests -> testsToSkip = testsToSkip.put(getContextClass(), newTests));
+	}
+
+	/**
+	 * Sets the option findByName to either true or false. If it's set to true, the
+	 * URI for find() is constructed with the name rather than with the id of the
+	 * entity as the PATH_PARAM
+	 * 
+	 * @param findByName if find() should use the name instead of the id of the
+	 *                   entity
+	 */
+	protected static void setFindByName(boolean findByNameValue) {
+		findByName = findByName.put(getContextClass(), findByNameValue);
+	}
+
+	/**
+	 * Gets the logger
+	 * 
+	 * @return logger configured to current context class
+	 */
+	protected static Logger getLogger() {
+		return LOGGER;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateAttributeTEQResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateAttributeTEQResourceIntegrationTest.java
new file mode 100644
index 0000000..245c4b1
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateAttributeTEQResourceIntegrationTest.java
@@ -0,0 +1,82 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for TemplateAttributeResource for TestEquipment
+ * {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class TemplateAttributeTEQResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing TemplateAttributeTEQResourceIntegrationTest");
+
+		// prepare test data for creating the CatalogAttribute
+		CatalogAttributeTEQResourceIntegrationTest.prepareTestData();
+		CatalogAttributeTEQResourceIntegrationTest.createEntity();
+
+		// prepare test data for creating the TemplateComponent
+		TemplateComponentTEQResourceIntegrationTest.prepareTestData();
+		TemplateComponentTEQResourceIntegrationTest.createEntity();
+
+		setContextClass(TemplateAttributeTEQResourceIntegrationTest.class);
+
+		// set up test data
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tplroots/testequipment/"
+				+ getTestDataValue(TemplateRootTEQResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/tplcomps/"
+				+ getTestDataValue(TemplateComponentTEQResourceIntegrationTest.class, TESTDATA_ENTITY_ID)
+				+ "/tplattrs");
+		putTestDataValue(TESTDATA_ENTITY_NAME,
+				getTestDataValue(CatalogAttributeTEQResourceIntegrationTest.class, TESTDATA_ENTITY_NAME));
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TemplateAttribute");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(
+				getTestDataValue(CatalogAttributeTEQResourceIntegrationTest.class, TESTDATA_ENTITY_NAME)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+
+		// delete the implicitly created TemplateAttribute
+		TemplateAttributeTEQResourceIntegrationTest.findFirst();
+		TemplateAttributeTEQResourceIntegrationTest.deleteEntity();
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(TemplateComponentTEQResourceIntegrationTest.class);
+		TemplateComponentTEQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(TemplateRootTEQResourceIntegrationTest.class);
+		TemplateRootTEQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogAttributeTEQResourceIntegrationTest.class);
+		CatalogAttributeTEQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogComponentTEQResourceIntegrationTest.class);
+		CatalogComponentTEQResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateAttributeTSQResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateAttributeTSQResourceIntegrationTest.java
new file mode 100644
index 0000000..5a0de60
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateAttributeTSQResourceIntegrationTest.java
@@ -0,0 +1,82 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for TemplateAttributeResource for TestSequence
+ * {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class TemplateAttributeTSQResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing TemplateAttributeTSQResourceIntegrationTest");
+
+		// prepare test data for creating the CatalogAttribute
+		CatalogAttributeTSQResourceIntegrationTest.prepareTestData();
+		CatalogAttributeTSQResourceIntegrationTest.createEntity();
+
+		// prepare test data for creating the TemplateComponent
+		TemplateComponentTSQResourceIntegrationTest.prepareTestData();
+		TemplateComponentTSQResourceIntegrationTest.createEntity();
+
+		setContextClass(TemplateAttributeTSQResourceIntegrationTest.class);
+
+		// set up test data
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tplroots/testsequence/"
+				+ getTestDataValue(TemplateRootTSQResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/tplcomps/"
+				+ getTestDataValue(TemplateComponentTSQResourceIntegrationTest.class, TESTDATA_ENTITY_ID)
+				+ "/tplattrs");
+		putTestDataValue(TESTDATA_ENTITY_NAME,
+				getTestDataValue(CatalogAttributeTSQResourceIntegrationTest.class, TESTDATA_ENTITY_NAME));
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TemplateAttribute");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(
+				getTestDataValue(CatalogAttributeTSQResourceIntegrationTest.class, TESTDATA_ENTITY_NAME)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+
+		// delete the implicitly created TemplateAttribute
+		TemplateAttributeTSQResourceIntegrationTest.findFirst();
+		TemplateAttributeTSQResourceIntegrationTest.deleteEntity();
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(TemplateComponentTSQResourceIntegrationTest.class);
+		TemplateComponentTSQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(TemplateRootTSQResourceIntegrationTest.class);
+		TemplateRootTSQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogAttributeTSQResourceIntegrationTest.class);
+		CatalogAttributeTSQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogComponentTSQResourceIntegrationTest.class);
+		CatalogComponentTSQResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateAttributeUUTResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateAttributeUUTResourceIntegrationTest.java
new file mode 100644
index 0000000..9dacaaf
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateAttributeUUTResourceIntegrationTest.java
@@ -0,0 +1,82 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for TemplateAttributeResource for UnitUnderTest
+ * {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class TemplateAttributeUUTResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing TemplateAttributeUUTResourceIntegrationTest");
+
+		// prepare test data for creating the CatalogAttribute
+		CatalogAttributeUUTResourceIntegrationTest.prepareTestData();
+		CatalogAttributeUUTResourceIntegrationTest.createEntity();
+
+		// prepare test data for creating the TemplateComponent
+		TemplateComponentUUTResourceIntegrationTest.prepareTestData();
+		TemplateComponentUUTResourceIntegrationTest.createEntity();
+
+		setContextClass(TemplateAttributeUUTResourceIntegrationTest.class);
+
+		// set up test data
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tplroots/unitundertest/"
+				+ getTestDataValue(TemplateRootUUTResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/tplcomps/"
+				+ getTestDataValue(TemplateComponentUUTResourceIntegrationTest.class, TESTDATA_ENTITY_ID)
+				+ "/tplattrs");
+		putTestDataValue(TESTDATA_ENTITY_NAME,
+				getTestDataValue(CatalogAttributeUUTResourceIntegrationTest.class, TESTDATA_ENTITY_NAME));
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TemplateAttribute");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(
+				getTestDataValue(CatalogAttributeUUTResourceIntegrationTest.class, TESTDATA_ENTITY_NAME)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+
+		// delete the implicitly created TemplateAttribute
+		TemplateAttributeUUTResourceIntegrationTest.findFirst();
+		TemplateAttributeUUTResourceIntegrationTest.deleteEntity();
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(TemplateComponentUUTResourceIntegrationTest.class);
+		TemplateComponentUUTResourceIntegrationTest.deleteEntity();
+
+		setContextClass(TemplateRootUUTResourceIntegrationTest.class);
+		TemplateRootUUTResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogAttributeUUTResourceIntegrationTest.class);
+		CatalogAttributeUUTResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogComponentUUTResourceIntegrationTest.class);
+		CatalogComponentUUTResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateComponentTEQResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateComponentTEQResourceIntegrationTest.java
new file mode 100644
index 0000000..a3e25ae
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateComponentTEQResourceIntegrationTest.java
@@ -0,0 +1,70 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for TemplateComponentResource for TestEquipment
+ * {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class TemplateComponentTEQResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing TemplateComponentTEQResourceIntegrationTest");
+
+		// prepare test data for creating the CatalogComponent
+		CatalogComponentTEQResourceIntegrationTest.prepareTestData();
+		CatalogComponentTEQResourceIntegrationTest.createEntity();
+
+		// prepare test data for creating the TemplateRoot
+		TemplateRootTEQResourceIntegrationTest.prepareTestData();
+		TemplateRootTEQResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(TemplateComponentTEQResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tplroots/testequipment/"
+				+ getTestDataValue(TemplateRootTEQResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/tplcomps");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testTplCompTEQ");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TemplateComponent");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json.add(ResourceConstants.ENTITYATTRIBUTE_CATALOGCOMPONENT_ID, new JsonPrimitive(
+				getTestDataValue(CatalogComponentTEQResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(TemplateRootTEQResourceIntegrationTest.class);
+		TemplateRootTEQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogComponentTEQResourceIntegrationTest.class);
+		CatalogComponentTEQResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateComponentTSQResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateComponentTSQResourceIntegrationTest.java
new file mode 100644
index 0000000..81f7041
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateComponentTSQResourceIntegrationTest.java
@@ -0,0 +1,70 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for TemplateComponentResource for TestSequence
+ * {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class TemplateComponentTSQResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing TemplateComponentTSQResourceIntegrationTest");
+
+		// prepare test data for creating the CatalogComponent
+		CatalogComponentTSQResourceIntegrationTest.prepareTestData();
+		CatalogComponentTSQResourceIntegrationTest.createEntity();
+
+		// prepare test data for creating the TemplateRoot
+		TemplateRootTSQResourceIntegrationTest.prepareTestData();
+		TemplateRootTSQResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(TemplateComponentTSQResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tplroots/testsequence/"
+				+ getTestDataValue(TemplateRootTSQResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/tplcomps");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testTplCompTSQ");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TemplateComponent");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json.add(ResourceConstants.ENTITYATTRIBUTE_CATALOGCOMPONENT_ID, new JsonPrimitive(
+				getTestDataValue(CatalogComponentTSQResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(TemplateRootTSQResourceIntegrationTest.class);
+		TemplateRootTSQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogComponentTSQResourceIntegrationTest.class);
+		CatalogComponentTEQResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateComponentUUTResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateComponentUUTResourceIntegrationTest.java
new file mode 100644
index 0000000..c1ac242
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateComponentUUTResourceIntegrationTest.java
@@ -0,0 +1,70 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for TemplateComponentResource for UnitUnderTest
+ * {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class TemplateComponentUUTResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing TemplateComponentUUTResourceIntegrationTest");
+
+		// prepare test data for creating the CatalogComponent
+		CatalogComponentUUTResourceIntegrationTest.prepareTestData();
+		CatalogComponentUUTResourceIntegrationTest.createEntity();
+
+		// prepare test data for creating the TemplateRoot
+		TemplateRootUUTResourceIntegrationTest.prepareTestData();
+		TemplateRootUUTResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(TemplateComponentUUTResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tplroots/unitundertest/"
+				+ getTestDataValue(TemplateRootUUTResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/tplcomps");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testTplCompUUT");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TemplateComponent");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json.add(ResourceConstants.ENTITYATTRIBUTE_CATALOGCOMPONENT_ID, new JsonPrimitive(
+				getTestDataValue(CatalogComponentUUTResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(TemplateRootUUTResourceIntegrationTest.class);
+		TemplateRootUUTResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogComponentUUTResourceIntegrationTest.class);
+		CatalogComponentUUTResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateRootTEQResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateRootTEQResourceIntegrationTest.java
new file mode 100644
index 0000000..244bc85
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateRootTEQResourceIntegrationTest.java
@@ -0,0 +1,55 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for TemplateRootResource for TestEquipment {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class TemplateRootTEQResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing TemplateRootTEQResourceIntegrationTest");
+
+		// set up test data
+		setContextClass(TemplateRootTEQResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tplroots/testequipment");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testTplRootTEQ");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TemplateRoot");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+
+		json = new JsonObject();
+		JsonObject enumerationJson = new JsonObject();
+		enumerationJson.add("Enumeration", new JsonPrimitive("VersionState"));
+		enumerationJson.add("EnumerationValue", new JsonPrimitive("VALID"));
+		json.add("ValidFlag", enumerationJson);
+		putTestDataValue(TESTDATA_UPDATE_JSON_BODY, json.toString());
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateRootTSQResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateRootTSQResourceIntegrationTest.java
new file mode 100644
index 0000000..86061a4
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateRootTSQResourceIntegrationTest.java
@@ -0,0 +1,55 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for TemplateRootResource for TestSequence {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class TemplateRootTSQResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing TemplateRootTSQResourceIntegrationTest");
+
+		// set up test data
+		setContextClass(TemplateRootTSQResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tplroots/testsequence");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testTplRootTSQ");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TemplateRoot");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+
+		json = new JsonObject();
+		JsonObject enumerationJson = new JsonObject();
+		enumerationJson.add("Enumeration", new JsonPrimitive("VersionState"));
+		enumerationJson.add("EnumerationValue", new JsonPrimitive("VALID"));
+		json.add("ValidFlag", enumerationJson);
+		putTestDataValue(TESTDATA_UPDATE_JSON_BODY, json.toString());
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateRootUUTResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateRootUUTResourceIntegrationTest.java
new file mode 100644
index 0000000..a5b8e73
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateRootUUTResourceIntegrationTest.java
@@ -0,0 +1,55 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for TemplateRootResource for UnitUnderTest {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class TemplateRootUUTResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing TemplateRootUUTResourceIntegrationTest");
+
+		// set up test data
+		setContextClass(TemplateRootUUTResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tplroots/unitundertest");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testTplRootpUUT");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TemplateRoot");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+
+		json = new JsonObject();
+		JsonObject enumerationJson = new JsonObject();
+		enumerationJson.add("Enumeration", new JsonPrimitive("VersionState"));
+		enumerationJson.add("EnumerationValue", new JsonPrimitive("VALID"));
+		json.add("ValidFlag", enumerationJson);
+		putTestDataValue(TESTDATA_UPDATE_JSON_BODY, json.toString());
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateSensorAttributeResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateSensorAttributeResourceIntegrationTest.java
new file mode 100644
index 0000000..f677aed
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateSensorAttributeResourceIntegrationTest.java
@@ -0,0 +1,97 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for TemplateComponentResource for TestEquipment
+ * {@link ContextType}.
+ * 
+ * @author Philipp Schweinbenz, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class TemplateSensorAttributeResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing TemplateSensorAttributeResourceIntegrationTest");
+
+		// prepare test data for creating the CatalogSensorAttribute
+		CatalogSensorAttributeResourceIntegrationTest.prepareTestData();
+		CatalogSensorAttributeResourceIntegrationTest.createEntity();
+
+		// prepare test data for creating the TemplateSensor
+		TemplateSensorResourceIntegrationTest.prepareTestData();
+		TemplateSensorResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(TemplateSensorAttributeResourceIntegrationTest.class);
+
+		// skip the creation test as TemplateSensorAttributes are implicitly created
+		// with the TemplateSensor
+		skipTest(TestType.CREATE);
+		// skip the deletion test as TemplateSensorAttributes can't be deleted
+		skipTest(TestType.DELETE);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tplroots/testequipment/"
+				+ getTestDataValue(TemplateRootTEQResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/tplcomps/"
+				+ getTestDataValue(TemplateComponentTEQResourceIntegrationTest.class, TESTDATA_ENTITY_ID)
+				+ "/tplsensors/" + getTestDataValue(TemplateSensorResourceIntegrationTest.class, TESTDATA_ENTITY_ID)
+				+ "/tplsensorattrs");
+		putTestDataValue(TESTDATA_ENTITY_NAME,
+				getTestDataValue(CatalogSensorAttributeResourceIntegrationTest.class, TESTDATA_ENTITY_NAME));
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TemplateAttribute");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(
+				getTestDataValue(CatalogSensorAttributeResourceIntegrationTest.class, TESTDATA_ENTITY_NAME)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+
+		// get first TemplateSensorAttribute
+		TemplateSensorAttributeResourceIntegrationTest.findFirst();
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(TemplateSensorResourceIntegrationTest.class);
+		TemplateSensorResourceIntegrationTest.deleteEntity();
+
+		setContextClass(TemplateComponentTEQResourceIntegrationTest.class);
+		TemplateComponentTEQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(TemplateRootTEQResourceIntegrationTest.class);
+		TemplateRootTEQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogSensorAttributeResourceIntegrationTest.class);
+		CatalogSensorAttributeResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogSensorResourceIntegrationTest.class);
+		CatalogSensorResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogComponentTEQResourceIntegrationTest.class);
+		CatalogComponentTEQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(QuantityResourceIntegrationTest.class);
+		QuantityResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateSensorResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateSensorResourceIntegrationTest.java
new file mode 100755
index 0000000..1ff6120
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateSensorResourceIntegrationTest.java
@@ -0,0 +1,92 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for TemplateSensorResource {@link ContextType}.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class TemplateSensorResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing TemplateAttributeTEQResourceIntegrationTest");
+
+		// prepare test data for creating the CatalogSensor
+		CatalogSensorResourceIntegrationTest.prepareTestData();
+		CatalogSensorResourceIntegrationTest.createEntity();
+
+		// prepare test data for creating the TemplateComponent
+		TemplateComponentTEQResourceIntegrationTest.prepareTestData();
+		TemplateComponentTEQResourceIntegrationTest.createEntity();
+
+		// prepare test data for creating the Quantity
+		QuantityResourceIntegrationTest.prepareTestData();
+		QuantityResourceIntegrationTest.createEntity();
+
+		setContextClass(TemplateSensorResourceIntegrationTest.class);
+
+		// set up test data
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tplroots/testequipment/"
+				+ getTestDataValue(TemplateRootTEQResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/tplcomps/"
+				+ getTestDataValue(TemplateComponentTEQResourceIntegrationTest.class, TESTDATA_ENTITY_ID)
+				+ "/tplsensors");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testTplSensor");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TemplateSensor");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json.add(ResourceConstants.ENTITYATTRIBUTE_CATALOGSENSOR_ID,
+				new JsonPrimitive(getTestDataValue(CatalogSensorResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		json.add(ResourceConstants.ENTITYATTRIBUTE_QUANTITY_ID,
+				new JsonPrimitive(getTestDataValue(QuantityResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+
+		json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_QUANTITY_ID,
+				new JsonPrimitive(getTestDataValue(QuantityResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		putTestDataValue(TESTDATA_UPDATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(TemplateComponentTEQResourceIntegrationTest.class);
+		TemplateComponentTEQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(TemplateRootTEQResourceIntegrationTest.class);
+		TemplateRootTEQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogSensorResourceIntegrationTest.class);
+		CatalogSensorResourceIntegrationTest.deleteEntity();
+
+		setContextClass(CatalogComponentTEQResourceIntegrationTest.class);
+		CatalogSensorResourceIntegrationTest.deleteEntity();
+
+		setContextClass(QuantityResourceIntegrationTest.class);
+		QuantityResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateTestResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateTestResourceIntegrationTest.java
new file mode 100755
index 0000000..33eb47c
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateTestResourceIntegrationTest.java
@@ -0,0 +1,54 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for TemplateTestResource.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class TemplateTestResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing TemplateTestResourceIntegrationTest");
+
+		// set up test data
+		setContextClass(TemplateTestResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tpltests");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testTplTest");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TemplateTest");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+
+		json = new JsonObject();
+		JsonObject enumerationJson = new JsonObject();
+		enumerationJson.add("Enumeration", new JsonPrimitive("VersionState"));
+		enumerationJson.add("EnumerationValue", new JsonPrimitive("VALID"));
+		json.add("ValidFlag", enumerationJson);
+		putTestDataValue(TESTDATA_UPDATE_JSON_BODY, json.toString());
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateTestStepResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateTestStepResourceIntegrationTest.java
new file mode 100755
index 0000000..015a3ec
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateTestStepResourceIntegrationTest.java
@@ -0,0 +1,83 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for TemplateTestStepResource.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class TemplateTestStepResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing TemplateTestResourceIntegrationTest");
+
+		// prepare test data for creating the TemplateRoots
+		TemplateRootTEQResourceIntegrationTest.prepareTestData();
+		TemplateRootTEQResourceIntegrationTest.createEntity();
+		TemplateRootTSQResourceIntegrationTest.prepareTestData();
+		TemplateRootTSQResourceIntegrationTest.createEntity();
+		TemplateRootUUTResourceIntegrationTest.prepareTestData();
+		TemplateRootUUTResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(TemplateTestStepResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tplteststeps");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testTplTestStep");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, ResourceConstants.ENTITYATTRIBUTE_TEMPLATETESTSTEP_ID);
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+
+		json = new JsonObject();
+		JsonObject enumerationJson = new JsonObject();
+		enumerationJson.add("Enumeration", new JsonPrimitive("VersionState"));
+		enumerationJson.add("EnumerationValue", new JsonPrimitive("VALID"));
+		json.add("ValidFlag", enumerationJson);
+
+		json.add("TemplateTestEquipmentRoot",
+				new JsonPrimitive(getTestDataValue(TemplateRootTEQResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		json.add("TemplateTestSequenceRoot",
+				new JsonPrimitive(getTestDataValue(TemplateRootTSQResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		json.add("TemplateUnitUnderTestRoot",
+				new JsonPrimitive(getTestDataValue(TemplateRootUUTResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+
+		putTestDataValue(TESTDATA_UPDATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(TemplateRootTEQResourceIntegrationTest.class);
+		TemplateRootTEQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(TemplateRootTSQResourceIntegrationTest.class);
+		TemplateRootTSQResourceIntegrationTest.deleteEntity();
+
+		setContextClass(TemplateRootUUTResourceIntegrationTest.class);
+		TemplateRootUUTResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateTestStepUsageResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateTestStepUsageResourceIntegrationTest.java
new file mode 100644
index 0000000..5d3d85f
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TemplateTestStepUsageResourceIntegrationTest.java
@@ -0,0 +1,77 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for TemplateTestStepUsageResource.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class TemplateTestStepUsageResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing TemplateTestResourceIntegrationTest");
+
+		// prepare test data for creating the Test
+		TemplateTestResourceIntegrationTest.prepareTestData();
+		TemplateTestResourceIntegrationTest.createEntity();
+
+		// prepare test data for creating the TestStep
+		TemplateTestStepResourceIntegrationTest.prepareTestData();
+		TemplateTestStepResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(TemplateTestStepUsageResourceIntegrationTest.class);
+
+		// skip the update as TemplateTestStepUsages cannot be updated
+		// skipTest(TestType.UPDATE);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI,
+				"/tpltests/" + getTestDataValue(TemplateTestResourceIntegrationTest.class, TESTDATA_ENTITY_ID)
+						+ "/tplteststepusages");
+		// indicates that the value is set with the response data from create()
+		putTestDataValue(TESTDATA_ENTITY_NAME, TESTDATA_RANDOM_DATA);
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TemplateTestStepUsage");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json.add(ResourceConstants.ENTITYATTRIBUTE_TEMPLATETESTSTEP_ID,
+				new JsonPrimitive(getTestDataValue(TemplateTestStepResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+
+		json = new JsonObject();
+		json.add("DefaultActive", new JsonPrimitive(true));
+		putTestDataValue(TESTDATA_UPDATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(TemplateTestResourceIntegrationTest.class);
+		TemplateTestResourceIntegrationTest.deleteEntity();
+
+		setContextClass(TemplateTestStepResourceIntegrationTest.class);
+		TemplateTestStepResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TestResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TestResourceIntegrationTest.java
new file mode 100644
index 0000000..f4f73a3
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TestResourceIntegrationTest.java
@@ -0,0 +1,59 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for {@TestResource}.
+ * 
+ * @author Johannes Stamm, Peak Solution GmbH Nuernberg
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class TestResourceIntegrationTest extends EntityResourceIntegrationTest {
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing TestResourceIntegrationTest");
+
+		// prepare test data for creating the parent Pool
+		PoolResourceIntegrationTest.prepareTestData();
+		PoolResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(TestResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tests");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testTest");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "Test");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json.add("Pool", new JsonPrimitive(getTestDataValue(PoolResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		// call tearDownAfterClass() of parent entity
+		setContextClass(PoolResourceIntegrationTest.class);
+		PoolResourceIntegrationTest.tearDownAfterClass();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TestStepContextResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TestStepContextResourceIntegrationTest.java
new file mode 100644
index 0000000..773259d
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TestStepContextResourceIntegrationTest.java
@@ -0,0 +1,77 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+public class TestStepContextResourceIntegrationTest extends ContextDescribableResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing TestStepContextResourceIntegrationTest");
+		TemplateAttributeUUTResourceIntegrationTest.prepareTestData();
+		TemplateAttributeUUTResourceIntegrationTest.createEntity();
+		String attrName = getTestDataValue(TESTDATA_ENTITY_NAME);
+		String compName = getTestDataValue(TemplateComponentUUTResourceIntegrationTest.class, TESTDATA_ENTITY_NAME);
+
+		// prepare test data for creating the linked tempaltes
+		TestStepWithTemplateResourceIntegrationTest.prepareTestData();
+		TestStepWithTemplateResourceIntegrationTest.createEntity();
+		// get id from teststep (contextclass
+		// TestStepWithTemplateResourceIntegrationTest)
+		String id = getTestDataValue(TESTDATA_ENTITY_ID);
+
+		// create measurement for this teststep
+		setContextClass(MeasurementResourceIntegrationTest.class);
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/measurements");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testMeasurement");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "Measurement");
+
+		JsonObject json1 = new JsonObject();
+		json1.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json1.add("TestStep", new JsonPrimitive(id));
+
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json1.toString());
+		MeasurementResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(TestStepContextResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_ENTITY_ID, id);
+		putTestDataValue(TESTDATA_CONTEXT_GROUP, "ordered");
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/teststeps");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testTestStep");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TestStep");
+
+		JsonObject json = createContextRequest(compName, attrName);
+		putTestDataValue(TESTDATA_UPDATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		// call tearDownAfterClass() of parent entity (without template)
+		setContextClass(TestStepWithTemplateResourceIntegrationTest.class);
+		TestStepWithTemplateResourceIntegrationTest.deleteEntity();
+		TestStepWithTemplateResourceIntegrationTest.tearDownAfterClass();
+
+		setContextClass(TemplateAttributeUUTResourceIntegrationTest.class);
+		TemplateAttributeUUTResourceIntegrationTest.tearDownAfterClass();
+
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TestStepResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TestStepResourceIntegrationTest.java
new file mode 100644
index 0000000..f5a0fd1
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TestStepResourceIntegrationTest.java
@@ -0,0 +1,60 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for {@TestStepResource}.
+ * 
+ * @author Johannes Stamm, Peak Solution GmbH Nuernberg
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class TestStepResourceIntegrationTest extends EntityResourceIntegrationTest {
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing TestStepResourceIntegrationTest");
+
+		// prepare test data for creating the parent Test
+		TestResourceIntegrationTest.prepareTestData();
+		TestResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(TestStepResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/teststeps");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testTestStep");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TestStep");
+
+		// json object for teststep entity
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json.add("Test", new JsonPrimitive(getTestDataValue(TestResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		// call tearDownAfterClass() of parent entity
+		setContextClass(TestResourceIntegrationTest.class);
+		TestResourceIntegrationTest.tearDownAfterClass();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TestStepWithTemplateResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TestStepWithTemplateResourceIntegrationTest.java
new file mode 100644
index 0000000..5e6bd7b
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TestStepWithTemplateResourceIntegrationTest.java
@@ -0,0 +1,74 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for {@TestStepResource}.
+ * 
+ * @author Johannes Stamm, Peak Solution GmbH Nuernberg
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class TestStepWithTemplateResourceIntegrationTest extends EntityResourceIntegrationTest {
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing TestStepWithTemplateResourceIntegrationTest");
+
+		// prepare test data for creating the parent {@Test}
+		TestWithTemplateResourceIntegrationTest.prepareTestData();
+		TestWithTemplateResourceIntegrationTest.createEntity();
+
+		// prepare test data for creating the TestStep
+		TemplateTestStepResourceIntegrationTest.prepareTestData();
+		TemplateTestStepResourceIntegrationTest.createEntity();
+		TemplateTestStepResourceIntegrationTest.updateEntity();
+
+		// prepare test data for creating the linked templates
+		TemplateTestStepUsageResourceIntegrationTest.prepareTestData();
+		TemplateTestStepUsageResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(TestStepWithTemplateResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/teststeps");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testTestStep");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "TestStep");
+
+		// json object for teststep entity
+		JsonObject json = new JsonObject();
+		json.add("Test",
+				new JsonPrimitive(getTestDataValue(TestWithTemplateResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		json.add("TemplateTestStep",
+				new JsonPrimitive(getTestDataValue(TemplateTestStepResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		// call tearDownAfterClass() of parent entity (without template)
+		setContextClass(TestResourceIntegrationTest.class);
+		TestResourceIntegrationTest.tearDownAfterClass();
+
+		// delete Templates
+		setContextClass(TemplateTestStepUsageResourceIntegrationTest.class);
+		TemplateTestStepUsageResourceIntegrationTest.tearDownAfterClass();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TestWithTemplateResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TestWithTemplateResourceIntegrationTest.java
new file mode 100644
index 0000000..5ea2ba2
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/TestWithTemplateResourceIntegrationTest.java
@@ -0,0 +1,68 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for {@TestResource}.
+ * 
+ * @author Johannes Stamm, Peak Solution GmbH Nuernberg
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class TestWithTemplateResourceIntegrationTest extends EntityResourceIntegrationTest {
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing TestResourceIntegrationTest");
+
+		// prepare test data for creating the parent Pool
+		PoolResourceIntegrationTest.prepareTestData();
+		PoolResourceIntegrationTest.createEntity();
+		// prepare test data for creating the linked TemplateTest
+		TemplateTestResourceIntegrationTest.prepareTestData();
+		TemplateTestResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(TestWithTemplateResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/tests");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testTest");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "Test");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json.add("Pool", new JsonPrimitive(getTestDataValue(PoolResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		json.add("TemplateTest",
+				new JsonPrimitive(getTestDataValue(TemplateTestResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		// call tearDownAfterClass() of parent entity
+		setContextClass(PoolResourceIntegrationTest.class);
+		PoolResourceIntegrationTest.tearDownAfterClass();
+
+		// delete Template
+		setContextClass(TemplateTestResourceIntegrationTest.class);
+		TemplateTestResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/UnitResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/UnitResourceIntegrationTest.java
new file mode 100644
index 0000000..72fa257
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/UnitResourceIntegrationTest.java
@@ -0,0 +1,65 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for UnitResource.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class UnitResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing UnitResourceIntegrationTest");
+
+		// prepare test data for creating the PhysicalDimension
+		PhysicalDimensionResourceIntegrationTest.prepareTestData();
+		PhysicalDimensionResourceIntegrationTest.createEntity();
+
+		// set up test data
+		setContextClass(UnitResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/units");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testUnit");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "Unit");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		json.add(ResourceConstants.ENTITYATTRIBUTE_PHYSICALDIMENSION_ID, new JsonPrimitive(
+				getTestDataValue(PhysicalDimensionResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+
+		json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_PHYSICALDIMENSION_ID, new JsonPrimitive(
+				getTestDataValue(PhysicalDimensionResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+		putTestDataValue(TESTDATA_UPDATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(PhysicalDimensionResourceIntegrationTest.class);
+		PhysicalDimensionResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ValueListResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ValueListResourceIntegrationTest.java
new file mode 100644
index 0000000..2fee745
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ValueListResourceIntegrationTest.java
@@ -0,0 +1,47 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for ValueListResource.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class ValueListResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing ValueListResourceIntegrationTest");
+
+		// set up test data
+		setContextClass(ValueListResourceIntegrationTest.class);
+
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/valuelists");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testValueList");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "ValueList");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ValueListValueResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ValueListValueResourceIntegrationTest.java
new file mode 100644
index 0000000..b8d2e6a
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ValueListValueResourceIntegrationTest.java
@@ -0,0 +1,60 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Test class for ValueListValueResource.
+ * 
+ * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class ValueListValueResourceIntegrationTest extends EntityResourceIntegrationTest {
+
+	@BeforeClass
+	public static void prepareTestData() {
+		getLogger().debug("Preparing ValueListValueResourceIntegrationTest");
+
+		// prepare test data for creating the ValueList
+		ValueListResourceIntegrationTest.prepareTestData();
+		ValueListResourceIntegrationTest.createEntity();
+
+		// reset the context
+		setContextClass(ValueListValueResourceIntegrationTest.class);
+
+		// set up test data
+		putTestDataValue(TESTDATA_RESOURCE_URI, "/valuelists/"
+				+ getTestDataValue(ValueListResourceIntegrationTest.class, TESTDATA_ENTITY_ID) + "/values");
+		putTestDataValue(TESTDATA_ENTITY_NAME, "testValueListValue");
+		putTestDataValue(TESTDATA_ENTITY_TYPE, "ValueListValue");
+
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive(getTestDataValue(TESTDATA_ENTITY_NAME)));
+		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json.toString());
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		setContextClass(ValueListResourceIntegrationTest.class);
+		ValueListResourceIntegrationTest.deleteEntity();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ValuesResourceIntegrationTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ValuesResourceIntegrationTest.java
new file mode 100644
index 0000000..4513315
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/boundary/integrationtest/ValuesResourceIntegrationTest.java
@@ -0,0 +1,766 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.businessobjects.boundary.integrationtest;
+
+import static io.restassured.RestAssured.given;
+import static org.assertj.core.api.Assertions.tuple;
+import static org.hamcrest.Matchers.equalTo;
+
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+import javax.ws.rs.core.Response.Status;
+
+import org.assertj.core.api.SoftAssertions;
+import org.assertj.core.groups.Tuple;
+import org.eclipse.mdm.businessobjects.boundary.ResourceConstants;
+import org.eclipse.mdm.protobuf.Mdm;
+import org.eclipse.mdm.protobuf.Mdm.AxisType;
+import org.eclipse.mdm.protobuf.Mdm.BooleanArray;
+import org.eclipse.mdm.protobuf.Mdm.ByteArray;
+import org.eclipse.mdm.protobuf.Mdm.ByteStreamArray;
+import org.eclipse.mdm.protobuf.Mdm.DateArray;
+import org.eclipse.mdm.protobuf.Mdm.DoubleArray;
+import org.eclipse.mdm.protobuf.Mdm.DoubleComplex;
+import org.eclipse.mdm.protobuf.Mdm.DoubleComplexArray;
+import org.eclipse.mdm.protobuf.Mdm.FloatArray;
+import org.eclipse.mdm.protobuf.Mdm.FloatComplex;
+import org.eclipse.mdm.protobuf.Mdm.FloatComplexArray;
+import org.eclipse.mdm.protobuf.Mdm.IntegerArray;
+import org.eclipse.mdm.protobuf.Mdm.LongArray;
+import org.eclipse.mdm.protobuf.Mdm.MeasuredValues;
+import org.eclipse.mdm.protobuf.Mdm.MeasuredValuesList;
+import org.eclipse.mdm.protobuf.Mdm.ScalarType;
+import org.eclipse.mdm.protobuf.Mdm.ShortArray;
+import org.eclipse.mdm.protobuf.Mdm.StringArray;
+import org.eclipse.mdm.protobuf.Mdm.WriteRequestList;
+import org.eclipse.mdm.protobuf.Mdm.WriteRequestList.WriteRequest;
+import org.eclipse.mdm.protobuf.Mdm.WriteRequestList.WriteRequest.DataCase;
+import org.eclipse.mdm.protobuf.Mdm.WriteRequestList.WriteRequest.ExplicitData;
+import org.eclipse.mdm.protobuf.Mdm.WriteRequestList.WriteRequest.ImplicitConstant;
+import org.eclipse.mdm.protobuf.Mdm.WriteRequestList.WriteRequest.ImplicitLinear;
+import org.eclipse.mdm.protobuf.Mdm.WriteRequestList.WriteRequest.ImplicitSaw;
+import org.eclipse.mdm.protobuf.Mdm.WriteRequestList.WriteRequest.RawLinear;
+import org.eclipse.mdm.protobuf.Mdm.WriteRequestList.WriteRequest.RawLinearCalibrated;
+import org.eclipse.mdm.protobuf.Mdm.WriteRequestList.WriteRequest.RawPolynomial;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.primitives.Booleans;
+import com.google.common.primitives.Doubles;
+import com.google.common.primitives.Floats;
+import com.google.common.primitives.Ints;
+import com.google.common.primitives.Longs;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import com.google.protobuf.ByteString;
+import com.google.protobuf.InvalidProtocolBufferException;
+import com.google.protobuf.Timestamp;
+import com.google.protobuf.util.Timestamps;
+
+import io.restassured.http.ContentType;
+import io.restassured.response.ExtractableResponse;
+
+/**
+ * Test class for {@ChannelResource}.
+ * 
+ * @author Johannes Stamm, Peak Solution GmbH Nuernberg
+ * @see EntityResourceIntegrationTest
+ *
+ */
+public class ValuesResourceIntegrationTest extends ResourceIntegrationTest {
+
+	public static final EnumSet<ScalarType> scalarTypes = EnumSet.of(ScalarType.STRING, ScalarType.DATE,
+			ScalarType.BOOLEAN, ScalarType.BYTE, ScalarType.SHORT, ScalarType.INTEGER, ScalarType.LONG,
+			ScalarType.FLOAT, ScalarType.DOUBLE, ScalarType.BYTE_STREAM, ScalarType.FLOAT_COMPLEX,
+			ScalarType.DOUBLE_COMPLEX);
+
+	private static final List<Boolean> SCALARTYPE_BOOLEAN = Booleans.asList(true, false, true);
+	private static final ByteString SCALARTYPE_BYTES = ByteString
+			.copyFrom(new byte[] { (byte) 0x01, (byte) 0xFF, (byte) 0xF1 });
+	private static final List<Integer> SCALARTYPE_SHORTS = Ints.asList(12, 13, 14);
+	private static final List<Integer> SCALARTYPE_INTEGER = Ints.asList(12, 13, 14);
+	private static final List<Long> SCALARTYPE_LONG = Longs.asList(12L, 13L, 14L);
+	private static final List<Float> SCALARTYPE_FLOAT = Floats.asList(12f, 13f, 14f);
+	private static final List<Double> SCALARTYPE_DOUBLE = Doubles.asList(12.0, 13.0, 14.0);
+	private static final List<FloatComplex> SCALARTYPE_FLOAT_COMPLEX = Arrays.asList(
+			FloatComplex.newBuilder().setRe(12f).setIm(11f).build(),
+			FloatComplex.newBuilder().setRe(13f).setIm(10f).build(),
+			FloatComplex.newBuilder().setRe(14f).setIm(9f).build());
+	private static final List<DoubleComplex> SCALARTYPE_DOUBLE_COMPLEX = Arrays.asList(
+			DoubleComplex.newBuilder().setRe(12.0).setIm(11.0).build(),
+			DoubleComplex.newBuilder().setRe(13.0).setIm(10.0).build(),
+			DoubleComplex.newBuilder().setRe(14.0).setIm(9.0).build());
+	private static final List<ByteString> SCALARTYPE_BYTE_STREAM = Arrays.asList(
+			ByteString.copyFrom(new byte[] { (byte) 12, (byte) 11 }),
+			ByteString.copyFrom(new byte[] { (byte) 13, (byte) 10 }),
+			ByteString.copyFrom(new byte[] { (byte) 14, (byte) 9 }));
+	private static final List<String> SCALARTYPE_STRING = Arrays.asList("one", "two", "three");
+	private static final List<Timestamp> SCALARTYPE_DATE = Arrays.asList(Timestamps.fromMillis(1546300800000L),
+			Timestamps.fromMillis(1546400800000L), Timestamps.fromMillis(1546500800000L));
+	private static final List<Boolean> SCALARTYPE_FLAGS = Booleans.asList(true, true, true);
+
+	private static final String MIMETYPE_APPLICATION_PROTOBUF = "application/protobuf";
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(ValuesResourceIntegrationTest.class);
+
+	private static final int LENGTH = 5;
+
+	private static final List<Integer> INTS = IntStream.range(0, LENGTH)
+			.map(i -> (int) (10 * Math.sin((double) i / LENGTH * Math.PI))).boxed().collect(Collectors.toList());
+
+	private static final List<Double> DOUBLES = IntStream.range(0, LENGTH)
+			.mapToDouble(i -> 10 * Math.sin((double) i / LENGTH * Math.PI)).boxed().collect(Collectors.toList());
+
+	private static final ExplicitData INT_DATA = ExplicitData.newBuilder()
+			.setIntegerArray(IntegerArray.newBuilder().addAllValues(INTS)).build();
+
+	private static final ExplicitData DOUBLE_DATA = ExplicitData.newBuilder()
+			.setDoubleArray(DoubleArray.newBuilder().addAllValues(DOUBLES)).build();
+
+	private static List<Boolean> FLAGS;
+
+	@BeforeClass
+	public static void prepareTestData() {
+		LOGGER.debug("Preparing ValuesResourceIntegrationTest");
+
+		boolean[] flagsArray = new boolean[LENGTH];
+		Arrays.fill(flagsArray, true);
+		FLAGS = Booleans.asList(flagsArray);
+
+		// prepare test data for creating the parent Measurement
+		MeasurementResourceIntegrationTest.prepareTestData();
+		MeasurementResourceIntegrationTest.createEntity();
+		// prepare test data for creating Quantity
+		QuantityResourceIntegrationTest.prepareTestData();
+		QuantityResourceIntegrationTest.createEntity();
+	}
+
+	@Test
+	public void testAllDataSeqReps() throws InvalidProtocolBufferException {
+
+		String channelGroupId = createChannelGroup();
+
+		Map<String, DataCase> dataCaseChannelIds = createChannelsForDataCase();
+
+		writeValuesAllSequenceRepresentations(channelGroupId, dataCaseChannelIds);
+
+		// read MeasuredValues
+		Mdm.ReadRequest readRequest = Mdm.ReadRequest.newBuilder().setChannelGroupId(channelGroupId).build();
+
+		ExtractableResponse<io.restassured.response.Response> response = given()
+				.contentType(MIMETYPE_APPLICATION_PROTOBUF).body(readRequest.toByteArray()).post("/values/read").then()
+				.log().ifError().contentType(MIMETYPE_APPLICATION_PROTOBUF).statusCode(200).extract();
+
+		Mdm.MeasuredValuesList mvl = Mdm.MeasuredValuesList.parseFrom(response.asByteArray());
+
+		SoftAssertions softly = new SoftAssertions();
+		assertExplicit(softly, mvl);
+		assertImplicitConstant(softly, mvl);
+		assertImplicitLinear(softly, mvl);
+		assertImplicitSaw(softly, mvl);
+		assertRawLinear(softly, mvl);
+		assertRawPolynomial(softly, mvl);
+		assertRawLinearCalibrated(softly, mvl);
+		softly.assertAll();
+
+		// read preview values
+		int chunkSize = 2;
+
+		Mdm.PreviewRequest previewRequest = Mdm.PreviewRequest.newBuilder()
+				.setReadRequest(Mdm.ReadRequest.newBuilder().setChannelGroupId(channelGroupId))
+				.setNumberOfChunks(chunkSize).build();
+
+		ExtractableResponse<io.restassured.response.Response> previewResponse = given()
+				.contentType(MIMETYPE_APPLICATION_PROTOBUF).body(previewRequest.toByteArray()).post("/values/preview")
+				.then().log().ifError().contentType(MIMETYPE_APPLICATION_PROTOBUF).statusCode(200).extract();
+
+		Mdm.PreviewValuesList pvl = Mdm.PreviewValuesList.parseFrom(previewResponse.asByteArray());
+
+		List<String> channelNames = Arrays.asList("Channel_EXPLICIT", "Channel_IMPLICIT_CONSTANT",
+				"Channel_IMPLICIT_LINEAR", "Channel_IMPLICIT_SAW", "Channel_RAW_LINEAR",
+				"Channel_RAW_LINEAR_CALIBRATED", "Channel_RAW_POLYNOMIAL");
+
+		SoftAssertions softly2 = new SoftAssertions();
+		softly2.assertThat(pvl.getAvgList()).extracting(MeasuredValues::getName).containsAll(channelNames);
+		softly2.assertThat(pvl.getMinList()).extracting(MeasuredValues::getName).containsAll(channelNames);
+		softly2.assertThat(pvl.getMaxList()).extracting(MeasuredValues::getName).containsAll(channelNames);
+
+		softly2.assertThat(pvl.getAvgList()).extracting(mv -> mv.getDoubleArray().getValuesCount())
+				.containsOnly(chunkSize);
+		softly2.assertThat(pvl.getMinList()).extracting(mv -> mv.getDoubleArray().getValuesCount())
+				.containsOnly(chunkSize);
+		softly2.assertThat(pvl.getMaxList()).extracting(mv -> mv.getDoubleArray().getValuesCount())
+				.containsOnly(chunkSize);
+		softly2.assertAll();
+	}
+
+	@Test
+	public void testAllScalarTypes() throws InvalidProtocolBufferException {
+
+		String channelGroupId = createChannelGroup();
+
+		Map<String, ScalarType> scalarTypeChannelIds = createChannelsForScalarTypes();
+
+		writeValuesAllScalarTypes(channelGroupId, scalarTypeChannelIds);
+
+		// read MeasuredValues
+		Mdm.ReadRequest readRequest = Mdm.ReadRequest.newBuilder().setChannelGroupId(channelGroupId).build();
+
+		ExtractableResponse<io.restassured.response.Response> response = given()
+				.contentType(MIMETYPE_APPLICATION_PROTOBUF).body(readRequest.toByteArray()).post("/values/read").then()
+				.log().ifError().contentType(MIMETYPE_APPLICATION_PROTOBUF).statusCode(200).extract();
+
+		Mdm.MeasuredValuesList mvl = Mdm.MeasuredValuesList.parseFrom(response.asByteArray());
+
+		SoftAssertions softly = new SoftAssertions();
+		assertBoolean(softly, mvl);
+		assertByte(softly, mvl);
+		assertShort(softly, mvl);
+		assertInteger(softly, mvl);
+		assertLong(softly, mvl);
+		assertFloat(softly, mvl);
+		assertDouble(softly, mvl);
+		assertFloatComplex(softly, mvl);
+		assertDoubleComplex(softly, mvl);
+		assertByteStream(softly, mvl);
+		assertString(softly, mvl);
+		assertDate(softly, mvl);
+		softly.assertAll();
+
+		// read preview values
+		int chunkSize = 2;
+
+		Mdm.PreviewRequest previewRequest = Mdm.PreviewRequest.newBuilder()
+				.setReadRequest(Mdm.ReadRequest.newBuilder().setChannelGroupId(channelGroupId))
+				.setNumberOfChunks(chunkSize).build();
+
+		ExtractableResponse<io.restassured.response.Response> previewResponse = given()
+				.contentType(MIMETYPE_APPLICATION_PROTOBUF).body(previewRequest.toByteArray()).post("/values/preview")
+				.then().log().ifError().contentType(MIMETYPE_APPLICATION_PROTOBUF).statusCode(200).extract();
+
+		Mdm.PreviewValuesList pvl = Mdm.PreviewValuesList.parseFrom(previewResponse.asByteArray());
+
+		Tuple[] previewChannelNames = new Tuple[] { tuple("Channel_BYTE", 2), tuple("Channel_SHORT", 2),
+				tuple("Channel_INTEGER", 2), tuple("Channel_LONG", 2), tuple("Channel_FLOAT", 2),
+				tuple("Channel_DOUBLE", 2), tuple("Channel_FLOAT_COMPLEX", 0), tuple("Channel_DOUBLE_COMPLEX", 0),
+				tuple("Channel_BOOLEAN", 0), tuple("Channel_STRING", 0), tuple("Channel_BYTE_STREAM", 0),
+				tuple("Channel_DATE", 0) };
+
+		SoftAssertions softly2 = new SoftAssertions();
+		softly2.assertThat(pvl.getAvgList()).extracting(mv -> tuple(mv.getName(), mv.getDoubleArray().getValuesCount()))
+				.containsOnly(previewChannelNames);
+		softly2.assertThat(pvl.getMinList()).extracting(mv -> tuple(mv.getName(), mv.getDoubleArray().getValuesCount()))
+				.containsOnly(previewChannelNames);
+		softly2.assertThat(pvl.getMaxList()).extracting(mv -> tuple(mv.getName(), mv.getDoubleArray().getValuesCount()))
+				.containsOnly(previewChannelNames);
+
+		// Date will return a DateArray instead of a DoubleArray
+		softly2.assertThat(pvl.getAvgList()).extracting(mv -> tuple(mv.getName(), mv.getDateArray().getValuesCount()))
+				.contains(tuple("Channel_DATE", 2));
+		softly2.assertThat(pvl.getMinList()).extracting(mv -> tuple(mv.getName(), mv.getDateArray().getValuesCount()))
+				.contains(tuple("Channel_DATE", 2));
+		softly2.assertThat(pvl.getMaxList()).extracting(mv -> tuple(mv.getName(), mv.getDateArray().getValuesCount()))
+				.contains(tuple("Channel_DATE", 2));
+
+		softly2.assertAll();
+	}
+
+	private void writeValuesAllSequenceRepresentations(String channelGroupId, Map<String, DataCase> channelIds) {
+		// write MeasuredValues
+		WriteRequestList.Builder writeRequestList = WriteRequestList.newBuilder();
+
+		for (Map.Entry<String, DataCase> entry : channelIds.entrySet()) {
+			WriteRequest.Builder builder = WriteRequest.newBuilder().setChannelGroupId(channelGroupId)
+					.setChannelId(entry.getKey()).setAxisTypeValue(AxisType.XY_AXIS_VALUE).setIndependent(false);
+			switch (entry.getValue()) {
+			case EXPLICIT:
+				builder.setExplicit(INT_DATA);
+				break;
+			case IMPLICIT_CONSTANT:
+				builder.setImplicitConstant(
+						ImplicitConstant.newBuilder().setScalarType(ScalarType.INTEGER).setOffset(12));
+				break;
+			case IMPLICIT_LINEAR:
+				builder.setImplicitLinear(
+						ImplicitLinear.newBuilder().setScalarType(ScalarType.INTEGER).setStart(1).setIncrement(1));
+				break;
+			case IMPLICIT_SAW:
+				builder.setImplicitSaw(ImplicitSaw.newBuilder().setScalarType(ScalarType.INTEGER).setStart(1)
+						.setIncrement(1).setStop(5));
+				break;
+			case RAW_LINEAR:
+				builder.setRawLinear(RawLinear.newBuilder().setScalarType(ScalarType.DOUBLE).setFactor(2).setOffset(10)
+						.setValues(DOUBLE_DATA));
+				break;
+			case RAW_LINEAR_CALIBRATED:
+				builder.setRawLinearCalibrated(RawLinearCalibrated.newBuilder().setScalarType(ScalarType.DOUBLE)
+						.setOffset(1).setFactor(2).setCalibration(3).setValues(DOUBLE_DATA));
+				break;
+			case RAW_POLYNOMIAL:
+				builder.setRawPolynomial(RawPolynomial.newBuilder().setScalarType(ScalarType.DOUBLE).addCoefficients(1)
+						.addCoefficients(2).addCoefficients(3).setValues(DOUBLE_DATA));
+				break;
+			default:
+				break;
+			}
+
+			writeRequestList.addValues(builder);
+		}
+
+		given().contentType(MIMETYPE_APPLICATION_PROTOBUF).body(writeRequestList.build().toByteArray())
+				.post("/values/write").then().log().ifError().assertThat()
+				.statusCode(Status.NO_CONTENT.getStatusCode());
+	}
+
+	private void writeValuesAllScalarTypes(String channelGroupId, Map<String, ScalarType> channelIds) {
+		WriteRequestList.Builder writeRequestList = WriteRequestList.newBuilder();
+
+		for (Entry<String, ScalarType> entry : channelIds.entrySet()) {
+			WriteRequest.Builder builder = WriteRequest.newBuilder().setChannelGroupId(channelGroupId)
+					.setChannelId(entry.getKey()).setAxisTypeValue(AxisType.XY_AXIS_VALUE).setIndependent(false);
+			switch (entry.getValue()) {
+			case STRING:
+				builder = builder.setExplicit(ExplicitData.newBuilder()
+						.setStringArray(StringArray.newBuilder().addAllValues(SCALARTYPE_STRING)));
+				break;
+			case DATE:
+				builder = builder.setExplicit(
+						ExplicitData.newBuilder().setDateArray(DateArray.newBuilder().addAllValues(SCALARTYPE_DATE)));
+				break;
+			case BOOLEAN:
+				builder = builder.setExplicit(ExplicitData.newBuilder()
+						.setBooleanArray(BooleanArray.newBuilder().addAllValues(SCALARTYPE_BOOLEAN)));
+				break;
+			case BYTE:
+				builder = builder.setExplicit(
+						ExplicitData.newBuilder().setByteArray(ByteArray.newBuilder().setValues(SCALARTYPE_BYTES)));
+				break;
+			case SHORT:
+				builder = builder.setExplicit(ExplicitData.newBuilder()
+						.setShortArray(ShortArray.newBuilder().addAllValues(SCALARTYPE_SHORTS)));
+				break;
+			case INTEGER:
+				builder = builder.setExplicit(ExplicitData.newBuilder()
+						.setIntegerArray(IntegerArray.newBuilder().addAllValues(SCALARTYPE_INTEGER)));
+				break;
+			case LONG:
+				builder = builder.setExplicit(
+						ExplicitData.newBuilder().setLongArray(LongArray.newBuilder().addAllValues(SCALARTYPE_LONG)));
+				break;
+			case FLOAT:
+				builder = builder.setExplicit(ExplicitData.newBuilder()
+						.setFloatArray(FloatArray.newBuilder().addAllValues(SCALARTYPE_FLOAT)));
+				break;
+			case DOUBLE:
+				builder = builder.setExplicit(ExplicitData.newBuilder()
+						.setDoubleArray(DoubleArray.newBuilder().addAllValues(SCALARTYPE_DOUBLE)));
+				break;
+			case BYTE_STREAM:
+				builder = builder.setExplicit(ExplicitData.newBuilder()
+						.setByteStreamArray(ByteStreamArray.newBuilder().addAllValues(SCALARTYPE_BYTE_STREAM)));
+				break;
+			case FLOAT_COMPLEX:
+				builder = builder.setExplicit(ExplicitData.newBuilder()
+						.setFloatComplexArray(FloatComplexArray.newBuilder().addAllValues(SCALARTYPE_FLOAT_COMPLEX)));
+				break;
+			case DOUBLE_COMPLEX:
+				builder = builder.setExplicit(ExplicitData.newBuilder().setDoubleComplexArray(
+						DoubleComplexArray.newBuilder().addAllValues(SCALARTYPE_DOUBLE_COMPLEX)));
+				break;
+			default:
+				throw new RuntimeException("The ScalarType " + entry.getValue() + " is not supported!");
+			}
+
+			writeRequestList.addValues(builder);
+		}
+
+		given().contentType(MIMETYPE_APPLICATION_PROTOBUF).body(writeRequestList.build().toByteArray())
+				.post("/values/write").then().log().ifError().assertThat()
+				.statusCode(Status.NO_CONTENT.getStatusCode());
+	}
+
+	private void assertBoolean(SoftAssertions softly, MeasuredValuesList mvl) throws InvalidProtocolBufferException {
+
+		Optional<MeasuredValues> mv = mvl.getValuesList().stream().filter(m -> "Channel_BOOLEAN".equals(m.getName()))
+				.findFirst();
+
+		softly.assertThat(mv)
+				.contains(Mdm.MeasuredValues.newBuilder().setName("Channel_BOOLEAN")
+						.setUnit(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_NAME))
+						.setLength(SCALARTYPE_BOOLEAN.size()).setAxisType(Mdm.AxisType.XY_AXIS)
+						.setScalarType(Mdm.ScalarType.BOOLEAN)
+						.setBooleanArray(BooleanArray.newBuilder().addAllValues(SCALARTYPE_BOOLEAN))
+						.addAllFlags(SCALARTYPE_FLAGS).build());
+
+	}
+
+	private void assertByte(SoftAssertions softly, MeasuredValuesList mvl) throws InvalidProtocolBufferException {
+
+		Optional<MeasuredValues> mv = mvl.getValuesList().stream().filter(m -> "Channel_BYTE".equals(m.getName()))
+				.findFirst();
+
+		softly.assertThat(mv).contains(Mdm.MeasuredValues.newBuilder().setName("Channel_BYTE")
+				.setUnit(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_NAME))
+				.setLength(SCALARTYPE_BYTES.size()).setAxisType(Mdm.AxisType.XY_AXIS).setScalarType(Mdm.ScalarType.BYTE)
+				.setByteArray(ByteArray.newBuilder().setValues(SCALARTYPE_BYTES)).addAllFlags(SCALARTYPE_FLAGS)
+				.build());
+
+	}
+
+	private void assertShort(SoftAssertions softly, MeasuredValuesList mvl) throws InvalidProtocolBufferException {
+
+		Optional<MeasuredValues> mv = mvl.getValuesList().stream().filter(m -> "Channel_SHORT".equals(m.getName()))
+				.findFirst();
+
+		softly.assertThat(mv)
+				.contains(Mdm.MeasuredValues.newBuilder().setName("Channel_SHORT")
+						.setUnit(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_NAME))
+						.setLength(SCALARTYPE_SHORTS.size()).setAxisType(Mdm.AxisType.XY_AXIS)
+						.setScalarType(Mdm.ScalarType.SHORT)
+						.setShortArray(ShortArray.newBuilder().addAllValues(SCALARTYPE_SHORTS))
+						.addAllFlags(SCALARTYPE_FLAGS).build());
+	}
+
+	private void assertInteger(SoftAssertions softly, MeasuredValuesList mvl) throws InvalidProtocolBufferException {
+
+		Optional<MeasuredValues> mv = mvl.getValuesList().stream().filter(m -> "Channel_INTEGER".equals(m.getName()))
+				.findFirst();
+
+		softly.assertThat(mv)
+				.contains(Mdm.MeasuredValues.newBuilder().setName("Channel_INTEGER")
+						.setUnit(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_NAME))
+						.setLength(SCALARTYPE_INTEGER.size()).setAxisType(Mdm.AxisType.XY_AXIS)
+						.setScalarType(Mdm.ScalarType.INTEGER)
+						.setIntegerArray(IntegerArray.newBuilder().addAllValues(SCALARTYPE_INTEGER))
+						.addAllFlags(SCALARTYPE_FLAGS).build());
+	}
+
+	private void assertLong(SoftAssertions softly, MeasuredValuesList mvl) throws InvalidProtocolBufferException {
+
+		Optional<MeasuredValues> mv = mvl.getValuesList().stream().filter(m -> "Channel_LONG".equals(m.getName()))
+				.findFirst();
+
+		softly.assertThat(mv).contains(Mdm.MeasuredValues.newBuilder().setName("Channel_LONG")
+				.setUnit(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_NAME))
+				.setLength(SCALARTYPE_LONG.size()).setAxisType(Mdm.AxisType.XY_AXIS).setScalarType(Mdm.ScalarType.LONG)
+				.setLongArray(LongArray.newBuilder().addAllValues(SCALARTYPE_LONG)).addAllFlags(SCALARTYPE_FLAGS)
+				.build());
+	}
+
+	private void assertFloat(SoftAssertions softly, MeasuredValuesList mvl) throws InvalidProtocolBufferException {
+
+		Optional<MeasuredValues> mv = mvl.getValuesList().stream().filter(m -> "Channel_FLOAT".equals(m.getName()))
+				.findFirst();
+
+		softly.assertThat(mv)
+				.contains(Mdm.MeasuredValues.newBuilder().setName("Channel_FLOAT")
+						.setUnit(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_NAME))
+						.setLength(SCALARTYPE_FLOAT.size()).setAxisType(Mdm.AxisType.XY_AXIS)
+						.setScalarType(Mdm.ScalarType.FLOAT)
+						.setFloatArray(FloatArray.newBuilder().addAllValues(SCALARTYPE_FLOAT))
+						.addAllFlags(SCALARTYPE_FLAGS).build());
+	}
+
+	private void assertDouble(SoftAssertions softly, MeasuredValuesList mvl) throws InvalidProtocolBufferException {
+
+		Optional<MeasuredValues> mv = mvl.getValuesList().stream().filter(m -> "Channel_DOUBLE".equals(m.getName()))
+				.findFirst();
+
+		softly.assertThat(mv)
+				.contains(Mdm.MeasuredValues.newBuilder().setName("Channel_DOUBLE")
+						.setUnit(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_NAME))
+						.setLength(SCALARTYPE_DOUBLE.size()).setAxisType(Mdm.AxisType.XY_AXIS)
+						.setScalarType(Mdm.ScalarType.DOUBLE)
+						.setDoubleArray(DoubleArray.newBuilder().addAllValues(SCALARTYPE_DOUBLE))
+						.addAllFlags(SCALARTYPE_FLAGS).build());
+	}
+
+	private void assertFloatComplex(SoftAssertions softly, MeasuredValuesList mvl)
+			throws InvalidProtocolBufferException {
+
+		Optional<MeasuredValues> mv = mvl.getValuesList().stream()
+				.filter(m -> "Channel_FLOAT_COMPLEX".equals(m.getName())).findFirst();
+
+		softly.assertThat(mv)
+				.contains(Mdm.MeasuredValues.newBuilder().setName("Channel_FLOAT_COMPLEX")
+						.setUnit(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_NAME))
+						.setLength(SCALARTYPE_FLOAT.size()).setAxisType(Mdm.AxisType.XY_AXIS)
+						.setScalarType(Mdm.ScalarType.FLOAT_COMPLEX)
+						.setFloatComplexArray(FloatComplexArray.newBuilder().addAllValues(SCALARTYPE_FLOAT_COMPLEX))
+						.addAllFlags(SCALARTYPE_FLAGS).build());
+	}
+
+	private void assertDoubleComplex(SoftAssertions softly, MeasuredValuesList mvl)
+			throws InvalidProtocolBufferException {
+
+		Optional<MeasuredValues> mv = mvl.getValuesList().stream()
+				.filter(m -> "Channel_DOUBLE_COMPLEX".equals(m.getName())).findFirst();
+
+		softly.assertThat(mv)
+				.contains(Mdm.MeasuredValues.newBuilder().setName("Channel_DOUBLE_COMPLEX")
+						.setUnit(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_NAME))
+						.setLength(SCALARTYPE_DOUBLE.size()).setAxisType(Mdm.AxisType.XY_AXIS)
+						.setScalarType(Mdm.ScalarType.DOUBLE_COMPLEX)
+						.setDoubleComplexArray(DoubleComplexArray.newBuilder().addAllValues(SCALARTYPE_DOUBLE_COMPLEX))
+						.addAllFlags(SCALARTYPE_FLAGS).build());
+	}
+
+	private void assertByteStream(SoftAssertions softly, MeasuredValuesList mvl) throws InvalidProtocolBufferException {
+
+		Optional<MeasuredValues> mv = mvl.getValuesList().stream()
+				.filter(m -> "Channel_BYTE_STREAM".equals(m.getName())).findFirst();
+
+		softly.assertThat(mv)
+				.contains(Mdm.MeasuredValues.newBuilder().setName("Channel_BYTE_STREAM")
+						.setUnit(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_NAME))
+						.setLength(SCALARTYPE_DOUBLE.size()).setAxisType(Mdm.AxisType.XY_AXIS)
+						.setScalarType(Mdm.ScalarType.BYTE_STREAM)
+						.setByteStreamArray(ByteStreamArray.newBuilder().addAllValues(SCALARTYPE_BYTE_STREAM))
+						.addAllFlags(SCALARTYPE_FLAGS).build());
+	}
+
+	private void assertString(SoftAssertions softly, MeasuredValuesList mvl) throws InvalidProtocolBufferException {
+
+		Optional<MeasuredValues> mv = mvl.getValuesList().stream().filter(m -> "Channel_STRING".equals(m.getName()))
+				.findFirst();
+
+		softly.assertThat(mv)
+				.contains(Mdm.MeasuredValues.newBuilder().setName("Channel_STRING")
+						.setUnit(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_NAME))
+						.setLength(SCALARTYPE_STRING.size()).setAxisType(Mdm.AxisType.XY_AXIS)
+						.setScalarType(Mdm.ScalarType.STRING)
+						.setStringArray(StringArray.newBuilder().addAllValues(SCALARTYPE_STRING))
+						.addAllFlags(SCALARTYPE_FLAGS).build());
+	}
+
+	private void assertDate(SoftAssertions softly, MeasuredValuesList mvl) throws InvalidProtocolBufferException {
+
+		Optional<MeasuredValues> mv = mvl.getValuesList().stream().filter(m -> "Channel_DATE".equals(m.getName()))
+				.findFirst();
+
+		softly.assertThat(mv).contains(Mdm.MeasuredValues.newBuilder().setName("Channel_DATE")
+				.setUnit(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_NAME))
+				.setLength(SCALARTYPE_DATE.size()).setAxisType(Mdm.AxisType.XY_AXIS).setScalarType(Mdm.ScalarType.DATE)
+				.setDateArray(DateArray.newBuilder().addAllValues(SCALARTYPE_DATE)).addAllFlags(SCALARTYPE_FLAGS)
+				.build());
+	}
+
+	private void assertExplicit(SoftAssertions softly, MeasuredValuesList mvl) throws InvalidProtocolBufferException {
+
+		Optional<MeasuredValues> mv = mvl.getValuesList().stream().filter(m -> "Channel_EXPLICIT".equals(m.getName()))
+				.findFirst();
+
+		softly.assertThat(mv)
+				.contains(Mdm.MeasuredValues.newBuilder().setName("Channel_EXPLICIT")
+						.setUnit(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_NAME))
+						.setLength(LENGTH).setAxisType(Mdm.AxisType.XY_AXIS).setScalarType(Mdm.ScalarType.INTEGER)
+						.setIntegerArray(IntegerArray.newBuilder().addAllValues(INTS)).addAllFlags(FLAGS).build());
+
+	}
+
+	private void assertImplicitConstant(SoftAssertions softly, MeasuredValuesList mvl)
+			throws InvalidProtocolBufferException {
+
+		Optional<MeasuredValues> mv = mvl.getValuesList().stream()
+				.filter(m -> "Channel_IMPLICIT_CONSTANT".equals(m.getName())).findFirst();
+
+		List<Integer> constantValues = IntStream.range(0, LENGTH).map(i -> 12).boxed().collect(Collectors.toList());
+
+		softly.assertThat(mv).contains(Mdm.MeasuredValues.newBuilder().setName("Channel_IMPLICIT_CONSTANT")
+				.setUnit(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_NAME)).setLength(LENGTH)
+				.setAxisType(Mdm.AxisType.XY_AXIS).setScalarType(Mdm.ScalarType.INTEGER)
+				.setIntegerArray(IntegerArray.newBuilder().addAllValues(constantValues)).addAllFlags(FLAGS).build());
+
+	}
+
+	private void assertImplicitLinear(SoftAssertions softly, MeasuredValuesList mvl)
+			throws InvalidProtocolBufferException {
+
+		Optional<MeasuredValues> mv = mvl.getValuesList().stream()
+				.filter(m -> "Channel_IMPLICIT_LINEAR".equals(m.getName())).findFirst();
+
+		List<Integer> linearValues = IntStream.range(0, LENGTH).map(i -> i + 1).boxed().collect(Collectors.toList());
+
+		softly.assertThat(mv).contains(Mdm.MeasuredValues.newBuilder().setName("Channel_IMPLICIT_LINEAR")
+				.setUnit(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_NAME)).setLength(LENGTH)
+				.setAxisType(Mdm.AxisType.XY_AXIS).setScalarType(Mdm.ScalarType.INTEGER)
+				.setIntegerArray(IntegerArray.newBuilder().addAllValues(linearValues)).addAllFlags(FLAGS).build());
+
+	}
+
+	private void assertImplicitSaw(SoftAssertions softly, MeasuredValuesList mvl)
+			throws InvalidProtocolBufferException {
+
+		Optional<MeasuredValues> mv = mvl.getValuesList().stream()
+				.filter(m -> "Channel_IMPLICIT_SAW".equals(m.getName())).findFirst();
+
+		List<Integer> sawValues = IntStream.range(0, LENGTH).map(i -> i % 4 + 1).boxed().collect(Collectors.toList());
+
+		softly.assertThat(mv)
+				.contains(Mdm.MeasuredValues.newBuilder().setName("Channel_IMPLICIT_SAW")
+						.setUnit(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_NAME))
+						.setLength(LENGTH).setAxisType(Mdm.AxisType.XY_AXIS).setScalarType(Mdm.ScalarType.INTEGER)
+						.setIntegerArray(IntegerArray.newBuilder().addAllValues(sawValues)).addAllFlags(FLAGS).build());
+
+	}
+
+	private void assertRawLinear(SoftAssertions softly, MeasuredValuesList mvl) throws InvalidProtocolBufferException {
+
+		Optional<MeasuredValues> mv = mvl.getValuesList().stream().filter(m -> "Channel_RAW_LINEAR".equals(m.getName()))
+				.findFirst();
+
+		List<Double> rawLinearValues = DOUBLES.stream().mapToDouble(d -> 2 * d + 10).boxed()
+				.collect(Collectors.toList());
+
+		softly.assertThat(mv).contains(Mdm.MeasuredValues.newBuilder().setName("Channel_RAW_LINEAR")
+				.setUnit(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_NAME)).setLength(LENGTH)
+				.setAxisType(Mdm.AxisType.XY_AXIS).setScalarType(Mdm.ScalarType.DOUBLE)
+				.setDoubleArray(DoubleArray.newBuilder().addAllValues(rawLinearValues)).addAllFlags(FLAGS).build());
+	}
+
+	private void assertRawLinearCalibrated(SoftAssertions softly, MeasuredValuesList mvl)
+			throws InvalidProtocolBufferException {
+
+		Optional<MeasuredValues> mv = mvl.getValuesList().stream()
+				.filter(m -> "Channel_RAW_LINEAR_CALIBRATED".equals(m.getName())).findFirst();
+
+		List<Double> rawLinCalValues = DOUBLES.stream().mapToDouble(d -> (1 + 2 * d) * 3).boxed()
+				.collect(Collectors.toList());
+
+		softly.assertThat(mv.get())
+				.isEqualToIgnoringGivenFields(Mdm.MeasuredValues.newBuilder().setName("Channel_RAW_LINEAR_CALIBRATED")
+						.setUnit(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_NAME))
+						.setLength(LENGTH).setAxisType(Mdm.AxisType.XY_AXIS).setScalarType(Mdm.ScalarType.DOUBLE)
+						.setDoubleArray(DoubleArray.newBuilder().addAllValues(rawLinCalValues)).addAllFlags(FLAGS)
+						.build(), "values", "values_", "memoizedIsInitialized");
+
+		softly.assertThat(mv.get().getDoubleArray().getValuesList()).usingElementComparator(DOUBLE_COMP)
+				.isEqualTo(rawLinCalValues);
+	}
+
+	private void assertRawPolynomial(SoftAssertions softly, MeasuredValuesList mvl)
+			throws InvalidProtocolBufferException {
+
+		Optional<MeasuredValues> mv = mvl.getValuesList().stream()
+				.filter(m -> "Channel_RAW_POLYNOMIAL".equals(m.getName())).findFirst();
+
+		List<Double> rawPolynomialValues = DOUBLES.stream().mapToDouble(d -> 1 + 2 * d + 3 * d * d).boxed()
+				.collect(Collectors.toList());
+
+		softly.assertThat(mv.get())
+				.isEqualToIgnoringGivenFields(Mdm.MeasuredValues.newBuilder().setName("Channel_RAW_POLYNOMIAL")
+						.setUnit(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_NAME))
+						.setLength(LENGTH).setAxisType(Mdm.AxisType.XY_AXIS).setScalarType(Mdm.ScalarType.DOUBLE)
+						.setDoubleArray(DoubleArray.newBuilder().addAllValues(rawPolynomialValues)).addAllFlags(FLAGS)
+						.build(), "values", "values_", "memoizedIsInitialized");
+
+		softly.assertThat(mv.get().getDoubleArray().getValuesList()).usingElementComparator(DOUBLE_COMP)
+				.isEqualTo(rawPolynomialValues);
+	}
+
+	private static Map<String, DataCase> createChannelsForDataCase() {
+		// Create channels
+		Map<String, DataCase> channelIds = new HashMap<>();
+		for (DataCase dataCase : WriteRequest.DataCase.values()) {
+			if (dataCase == DataCase.DATA_NOT_SET) {
+				continue;
+			}
+			JsonObject json = new JsonObject();
+			json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive("Channel_" + dataCase.name()));
+			json.add("Measurement",
+					new JsonPrimitive(getTestDataValue(MeasurementResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+			json.add("Quantity",
+					new JsonPrimitive(getTestDataValue(QuantityResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+
+			ExtractableResponse<io.restassured.response.Response> response = given().contentType(ContentType.JSON)
+					.body(json.toString()).post("/channels").then().log().ifError().contentType(ContentType.JSON)
+					.extract();
+
+			LOGGER.debug("Channel created " + response.asString());
+			channelIds.put(response.path("data.first().id"), dataCase);
+		}
+		return channelIds;
+	}
+
+	private static Map<String, ScalarType> createChannelsForScalarTypes() {
+		Map<String, ScalarType> channelIds = new HashMap<>();
+		for (ScalarType scalarType : scalarTypes) {
+			JsonObject json = new JsonObject();
+			json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive("Channel_" + scalarType.name()));
+			json.add("Measurement",
+					new JsonPrimitive(getTestDataValue(MeasurementResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+			json.add("Quantity",
+					new JsonPrimitive(getTestDataValue(QuantityResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+
+			ExtractableResponse<io.restassured.response.Response> response = given().contentType(ContentType.JSON)
+					.body(json.toString()).post("/channels").then().log().ifError().contentType(ContentType.JSON)
+					.extract();
+
+			LOGGER.debug("Channel created " + response.asString());
+			channelIds.put(response.path("data.first().id"), scalarType);
+		}
+		return channelIds;
+	}
+
+	private static String createChannelGroup() {
+		// Create channelGroup
+		JsonObject json = new JsonObject();
+		json.add(ResourceConstants.ENTITYATTRIBUTE_NAME, new JsonPrimitive("ChannelGroup1"));
+		json.add(TESTDATA_NUMBER_OF_VALUES, new JsonPrimitive(LENGTH));
+		json.add("Measurement",
+				new JsonPrimitive(getTestDataValue(MeasurementResourceIntegrationTest.class, TESTDATA_ENTITY_ID)));
+
+		ExtractableResponse<io.restassured.response.Response> response = given().contentType(ContentType.JSON)
+				.body(json.toString()).post("/channelgroups").then().log().ifError().contentType(ContentType.JSON)
+				// do not check for name equality as that might be created randomly
+				.and().body("data.first().type", equalTo("ChannelGroup")).extract();
+
+		LOGGER.debug("ChannelGroup created " + response.asString());
+
+		return response.path("data.first().id");
+	}
+
+	private static Comparator<Double> DOUBLE_COMP = new Comparator<Double>() {
+
+		private double precision = 1E-6;
+
+		@Override
+		public int compare(Double o1, Double o2) {
+			double diff = Math.abs(o1.doubleValue() - o2.doubleValue());
+			if (diff <= precision)
+				return 0;
+			return diff < 0.0 ? -1 : 1;
+		}
+
+	};
+
+	@AfterClass
+	public static void tearDownAfterClass() {
+		// call tearDownAfterClass() of parent entity
+		QuantityResourceIntegrationTest.tearDownAfterClass();
+		MeasurementResourceIntegrationTest.tearDownAfterClass();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/FilterParserTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/FilterParserTest.java
new file mode 100644
index 0000000..8e56bfc
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/FilterParserTest.java
@@ -0,0 +1,63 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.when;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.api.base.query.Filter;
+import org.eclipse.mdm.query.boundary.QueryServiceTest;
+import org.junit.Test;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
+public class FilterParserTest {
+
+	@Test
+	public void testParseFilterString() throws Exception {
+		EntityType test = QueryServiceTest.mockEntity("env2", "Test");
+		EntityType pool = QueryServiceTest.mockEntity("env2", "Pool");
+		when(test.getAttribute("Name").createValue(eq(""), any())).thenAnswer(new Answer<Value>() {
+
+			@Override
+			public Value answer(InvocationOnMock invocation) throws Throwable {
+				return ValueType.STRING.create("env2", invocation.getArgument(0), true, invocation.getArgument(1));
+			}
+		});
+
+		List<EntityType> possibleEntityTypes = Arrays.asList(test, pool);
+
+		Filter filter = FilterParser.parseFilterString(possibleEntityTypes, "Test.Name lk \"With\\\"quote\\\"\"");
+		assertThat(filter).isEqualTo(Filter.and().name(test, "With\"quote\""));
+
+		Filter filter2 = FilterParser.parseFilterString(possibleEntityTypes, "Test.Name lk 'With\"quote\"'");
+		assertThat(filter2).isEqualTo(Filter.and().name(test, "With\"quote\""));
+
+		Filter filter3 = FilterParser.parseFilterString(possibleEntityTypes, "Test.Name lk 'With\\'quote\\''");
+		assertThat(filter3).isEqualTo(Filter.and().name(test, "With'quote'"));
+
+		Filter filter4 = FilterParser.parseFilterString(possibleEntityTypes, "Test.Name lk \"With'quote'\"");
+		assertThat(filter4).isEqualTo(Filter.and().name(test, "With'quote'"));
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/context/ContextActivityMockHelper.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/context/ContextActivityMockHelper.java
new file mode 100644
index 0000000..2a52552
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/context/ContextActivityMockHelper.java
@@ -0,0 +1,189 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control.context;
+
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.when;
+
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+import org.eclipse.mdm.api.base.adapter.ChildrenStore;
+import org.eclipse.mdm.api.base.adapter.Core;
+import org.eclipse.mdm.api.base.model.ContextComponent;
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+import org.mockito.Mockito;
+
+public final class ContextActivityMockHelper {
+
+	public static final int ITEM_COUNT = 1;
+	public static final int CC_COUNT = 10;
+	public static final int CC_VALUE_COUNT = 10;
+
+	private ContextActivityMockHelper() {
+	}
+
+	public static ConnectorService createConnectorMock() throws Exception {
+
+		ConnectorService connectorBean = Mockito.mock(ConnectorService.class);
+
+		List<ApplicationContext> contextList = new ArrayList<>();
+		for (int i = 1; i <= ITEM_COUNT; i++) {
+			contextList.add(createContextMock("MDMENV_" + i));
+		}
+		when(connectorBean.getContexts()).thenReturn(contextList);
+		when(connectorBean.getContextByName(anyString())).thenReturn(contextList.get(0));
+		return connectorBean;
+	}
+
+	private static ApplicationContext createContextMock(String sourceName) throws Exception {
+
+		Environment env = createEntityMock(Environment.class, sourceName, sourceName, "1", null);
+
+		EntityManager em = Mockito.mock(EntityManager.class);
+
+		TestStep testStep = createEntityMock(TestStep.class, "TestStepWithContext", "MDM", "1", null);
+		Measurement measurement = createEntityMock(Measurement.class, "MeasurementWithContext", "MDM", "1", null);
+
+		when(em.loadEnvironment()).thenReturn(env);
+		when(em.load(TestStep.class, "1")).thenReturn(testStep);
+		when(em.load(Measurement.class, "1")).thenReturn(measurement);
+		when(em.loadParent(measurement, Measurement.PARENT_TYPE_TESTSTEP)).thenReturn(Optional.of(testStep));
+
+		List<Measurement> mList = new ArrayList<>();
+		mList.add(measurement);
+
+		when(em.loadChildren(testStep, TestStep.CHILD_TYPE_MEASUREMENT)).thenReturn(mList);
+
+		Map<ContextType, ContextRoot> orderedContext = createContext("ordered");
+		Map<ContextType, ContextRoot> measuredContext = createContext("measured");
+		when(em.loadContexts(testStep)).thenReturn(orderedContext);
+		when(em.loadContexts(measurement)).thenReturn(measuredContext);
+
+		ApplicationContext context = Mockito.mock(ApplicationContext.class);
+		when(context.getEntityManager()).thenReturn(Optional.of(em));
+		return context;
+	}
+
+	private static <T extends Entity> T createEntityMock(Class<T> type, String name, String sourceName, String id,
+			ChildrenStore childrenStore) throws Exception {
+
+		HashMap<String, Value> map = new HashMap<String, Value>();
+		map.put("Name", ValueType.STRING.create("Name", name));
+
+		Core core = Mockito.mock(Core.class);
+		when(core.getSourceName()).thenReturn(sourceName);
+		when(core.getValues()).thenReturn(map);
+		when(core.getID()).thenReturn(id);
+		if (childrenStore != null) {
+			when(core.getChildrenStore()).thenReturn(childrenStore);
+		}
+
+		if (ContextRoot.class.equals(type)) {
+			if (name.contains("TSQ_")) {
+				when(core.getTypeName()).thenReturn("TestSequence");
+			} else if (name.contains("UUT")) {
+				when(core.getTypeName()).thenReturn("UnitUnderTest");
+			} else {
+				when(core.getTypeName()).thenReturn("TestEquipment");
+			}
+		}
+
+		Constructor<T> constructor = type.getDeclaredConstructor(Core.class);
+		constructor.setAccessible(true);
+		T instance = constructor.newInstance(core);
+		constructor.setAccessible(false);
+		return instance;
+	}
+
+	private static ContextRoot createUUTContextRootMock(String type) throws Exception {
+
+		List<ContextComponent> ccList = createContextComponentMocks("UUT");
+
+		ChildrenStore childrenStore = new ChildrenStore();
+		for (ContextComponent cc : ccList) {
+			childrenStore.add(cc);
+		}
+
+		return createEntityMock(ContextRoot.class, "MessungUUT_" + type, "MDM", "1", childrenStore);
+	}
+
+	private static ContextRoot createTSQContextRootMock(String type) throws Exception {
+
+		List<ContextComponent> ccList = createContextComponentMocks("TSQ");
+
+		ChildrenStore childrenStore = new ChildrenStore();
+		for (ContextComponent cc : ccList) {
+			childrenStore.add(cc);
+		}
+
+		return createEntityMock(ContextRoot.class, "MessungTSQ_" + type, "MDM", "1", childrenStore);
+	}
+
+	private static ContextRoot createTEQContextRootMock(String type) throws Exception {
+
+		List<ContextComponent> ccList = createContextComponentMocks("TEQ");
+
+		ChildrenStore childrenStore = new ChildrenStore();
+		for (ContextComponent cc : ccList) {
+			childrenStore.add(cc);
+		}
+
+		return createEntityMock(ContextRoot.class, "MessungTEQ_" + type, "MDM", "1", childrenStore);
+	}
+
+	private static List<ContextComponent> createContextComponentMocks(String type) throws Exception {
+		List<ContextComponent> ccList = new ArrayList<>();
+		for (int i = 1; i <= CC_COUNT; i++) {
+			ContextComponent cc = createEntityMock(ContextComponent.class, type + "_ContextComponent_" + i, "MDM",
+					Integer.toString(i), null);
+			when(cc.getValues()).thenReturn(createValues(type));
+			ccList.add(cc);
+		}
+		return ccList;
+	}
+
+	private static Map<String, Value> createValues(String type) {
+		Map<String, Value> valueMap = new HashMap<>();
+		for (int i = 1; i <= CC_VALUE_COUNT; i++) {
+			String vName = type + "_ValueName_" + i;
+			valueMap.put(vName, ValueType.STRING.create(vName, type + "_Value_" + i));
+		}
+		return valueMap;
+	}
+
+	private static Map<ContextType, ContextRoot> createContext(String type) throws Exception {
+		Map<ContextType, ContextRoot> contextMap = new HashMap<>();
+		contextMap.put(ContextType.UNITUNDERTEST, createUUTContextRootMock(type));
+		contextMap.put(ContextType.TESTSEQUENCE, createTSQContextRootMock(type));
+		contextMap.put(ContextType.TESTEQUIPMENT, createTEQContextRootMock(type));
+		return contextMap;
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/context/ContextActivityTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/context/ContextActivityTest.java
new file mode 100644
index 0000000..96dd15d
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/context/ContextActivityTest.java
@@ -0,0 +1,95 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control.context;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.lang.reflect.Field;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.eclipse.mdm.api.base.model.ContextComponent;
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.businessobjects.control.ContextActivity;
+import org.junit.Test;
+
+public class ContextActivityTest {
+
+	@Test
+	public void testGetTestStepContext() throws Exception {
+
+		ContextActivity contextActitity = createMockedActivity();
+		Map<String, Map<ContextType, ContextRoot>> contextMap = contextActitity.getTestStepContext("MDM", "1");
+
+		assertNotNull("context should not be null", contextMap);
+		checkContextContent(contextMap);
+
+	}
+
+	@Test
+	public void testGetMeasurementContext() throws Exception {
+
+		ContextActivity contextActitity = createMockedActivity();
+		Map<String, Map<ContextType, ContextRoot>> contextMap = contextActitity.getMeasurementContext("MDM", "1");
+
+		assertNotNull("context should not be null", contextMap);
+		checkContextContent(contextMap);
+	}
+
+	private void checkContextContent(Map<String, Map<ContextType, ContextRoot>> contextMap) {
+
+		Map<ContextType, ContextRoot> orderedContext = contextMap.get(ContextActivity.CONTEXT_GROUP_ORDERED);
+		Set<Entry<ContextType, ContextRoot>> orderedEntrySet = orderedContext.entrySet();
+		assertEquals("size of entry set should be 3", 3, orderedEntrySet.size());
+
+		for (Entry<ContextType, ContextRoot> entry : orderedEntrySet) {
+			ContextRoot cr = entry.getValue();
+			List<ContextComponent> ccList = cr.getContextComponents();
+			assertEquals("size of context components should be 10", 10, ccList.size());
+			for (ContextComponent cc : ccList) {
+				Map<String, Value> values = cc.getValues();
+				assertEquals("size of value map should be 10", 10, values.size());
+			}
+		}
+
+		Map<ContextType, ContextRoot> measuredContext = contextMap.get(ContextActivity.CONTEXT_GROUP_MEASURED);
+		Set<Entry<ContextType, ContextRoot>> measuredEntrySet = measuredContext.entrySet();
+		assertEquals("size of entry set should be 3", 3, measuredEntrySet.size());
+
+		for (Entry<ContextType, ContextRoot> entry : measuredEntrySet) {
+			ContextRoot cr = entry.getValue();
+			List<ContextComponent> ccList = cr.getContextComponents();
+			assertEquals("size of context components should be 10", 10, ccList.size());
+			for (ContextComponent cc : ccList) {
+				Map<String, Value> values = cc.getValues();
+				assertEquals("size of value map should be 10", 10, values.size());
+			}
+		}
+	}
+
+	public ContextActivity createMockedActivity() throws Exception {
+		ContextActivity contextActivity = new ContextActivity();
+		Field field = contextActivity.getClass().getDeclaredField("connectorService");
+		field.setAccessible(true);
+		field.set(contextActivity, ContextActivityMockHelper.createConnectorMock());
+		field.setAccessible(false);
+		return contextActivity;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/i18n/I18NActivityMockHelper.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/i18n/I18NActivityMockHelper.java
new file mode 100644
index 0000000..8d23dd2
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/i18n/I18NActivityMockHelper.java
@@ -0,0 +1,160 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control.i18n;
+
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.when;
+
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Optional;
+
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.Core;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.ModelManager;
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+import org.mockito.Mockito;
+
+public final class I18NActivityMockHelper {
+
+	public static final int ITEM_COUNT = 3;
+	public static final int ATTRIBUTE_COUNT = 2;
+
+	private I18NActivityMockHelper() {
+	}
+
+	public static ConnectorService createConnectorMock() throws Exception {
+
+		ConnectorService connectorBean = Mockito.mock(ConnectorService.class);
+
+		List<ApplicationContext> emList = new ArrayList<>();
+		for (int i = 0; i < ITEM_COUNT; i++) {
+			emList.add(createContextMock("MDMENV_" + i));
+		}
+		when(connectorBean.getContexts()).thenReturn(emList);
+		when(connectorBean.getContextByName(anyString())).thenReturn(emList.get(0));
+		return connectorBean;
+	}
+
+	private static ApplicationContext createContextMock(String sourceName) throws Exception {
+
+		Environment env = createEntityMock(Environment.class, sourceName, sourceName, "1");
+
+		EntityManager em = Mockito.mock(EntityManager.class);
+
+		when(em.loadEnvironment()).thenReturn(env);
+
+		ModelManager modelManagerMock = createModelManagerMock();
+
+		ApplicationContext context = Mockito.mock(ApplicationContext.class);
+		when(context.getEntityManager()).thenReturn(Optional.of(em));
+		when(context.getModelManager()).thenReturn(Optional.of(modelManagerMock));
+		return context;
+	}
+
+	private static ModelManager createModelManagerMock() throws Exception {
+
+		List<EntityType> etList = new ArrayList<>();
+
+		EntityType envET = Mockito.mock(EntityType.class);
+		List<Attribute> envAttrList = createAttributeList(Environment.class, ATTRIBUTE_COUNT);
+		when(envET.getName()).thenReturn("Environment");
+		when(envET.getAttributes()).thenReturn(envAttrList);
+		etList.add(envET);
+
+		EntityType testET = Mockito.mock(EntityType.class);
+		List<Attribute> testAttrList = createAttributeList(Test.class, ATTRIBUTE_COUNT);
+		when(testET.getName()).thenReturn("Test");
+		when(testET.getAttributes()).thenReturn(testAttrList);
+		etList.add(testET);
+
+		EntityType testStepET = Mockito.mock(EntityType.class);
+		List<Attribute> testStepAttrList = createAttributeList(TestStep.class, ATTRIBUTE_COUNT);
+		when(testStepET.getName()).thenReturn("TestStep");
+		when(testStepET.getAttributes()).thenReturn(testStepAttrList);
+		etList.add(testStepET);
+
+		EntityType measurementET = Mockito.mock(EntityType.class);
+		List<Attribute> measurementAttrList = createAttributeList(Measurement.class, ATTRIBUTE_COUNT);
+		when(measurementET.getName()).thenReturn("Measurement");
+		when(measurementET.getAttributes()).thenReturn(measurementAttrList);
+		etList.add(measurementET);
+
+		EntityType channelGroupET = Mockito.mock(EntityType.class);
+		List<Attribute> channelGroupAttrList = createAttributeList(ChannelGroup.class, ATTRIBUTE_COUNT);
+		when(channelGroupET.getName()).thenReturn("ChannelGroup");
+		when(channelGroupET.getAttributes()).thenReturn(channelGroupAttrList);
+		etList.add(channelGroupET);
+
+		EntityType channelET = Mockito.mock(EntityType.class);
+		List<Attribute> channelAttrList = createAttributeList(Channel.class, ATTRIBUTE_COUNT);
+		when(channelET.getName()).thenReturn("Channel");
+		when(channelET.getAttributes()).thenReturn(channelAttrList);
+		etList.add(channelET);
+
+		ModelManager modelManager = Mockito.mock(ModelManager.class);
+		when(modelManager.getEntityType(Environment.class)).thenReturn(envET);
+		when(modelManager.getEntityType(Test.class)).thenReturn(testET);
+		when(modelManager.getEntityType(TestStep.class)).thenReturn(testStepET);
+		when(modelManager.getEntityType(Measurement.class)).thenReturn(measurementET);
+		when(modelManager.getEntityType(ChannelGroup.class)).thenReturn(channelGroupET);
+		when(modelManager.getEntityType(Channel.class)).thenReturn(channelET);
+		when(modelManager.listEntityTypes()).thenReturn(etList);
+		return modelManager;
+	}
+
+	private static List<Attribute> createAttributeList(Class<? extends Entity> type, long count) {
+		List<Attribute> attributeList = new ArrayList<>();
+		for (int i = 0; i < count; i++) {
+			Attribute attribute = Mockito.mock(Attribute.class);
+			when(attribute.getName()).thenReturn(type.getSimpleName() + "_attribute_" + i);
+			attributeList.add(attribute);
+		}
+		return attributeList;
+	}
+
+	private static <T extends Entity> T createEntityMock(Class<T> type, String name, String sourceName, String id)
+			throws Exception {
+
+		HashMap<String, Value> map = new HashMap<String, Value>();
+		map.put("Name", ValueType.STRING.create("Name", name));
+
+		Core core = Mockito.mock(Core.class);
+		when(core.getSourceName()).thenReturn(sourceName);
+		when(core.getValues()).thenReturn(map);
+		when(core.getID()).thenReturn(id);
+
+		Constructor<T> constructor = type.getDeclaredConstructor(Core.class);
+		constructor.setAccessible(true);
+		T instance = constructor.newInstance(core);
+		constructor.setAccessible(false);
+		return instance;
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/i18n/I18NActivityTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/i18n/I18NActivityTest.java
new file mode 100644
index 0000000..5087905
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/i18n/I18NActivityTest.java
@@ -0,0 +1,131 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control.i18n;
+
+import static org.junit.Assert.assertEquals;
+
+import java.lang.reflect.Field;
+import java.util.Map;
+
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.businessobjects.control.I18NActivity;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+import org.junit.Test;
+
+public class I18NActivityTest {
+
+	@Test
+	public void testLocalizeAttributes() throws Exception {
+
+		I18NActivity i18nActivity = createdMockedActivity();
+
+		Map<Attribute, String> locEnvironmentAttrs = i18nActivity.localizeAttributes("default", Environment.class);
+		Map<Attribute, String> locTestAttrs = i18nActivity.localizeAttributes("default",
+				org.eclipse.mdm.api.base.model.Test.class);
+		Map<Attribute, String> locTestStepAttrs = i18nActivity.localizeAttributes("default", TestStep.class);
+		Map<Attribute, String> locMeasurementAttrs = i18nActivity.localizeAttributes("default", Measurement.class);
+		Map<Attribute, String> locChannelGroupAttrs = i18nActivity.localizeAttributes("default", ChannelGroup.class);
+		Map<Attribute, String> locChannelAttrs = i18nActivity.localizeAttributes("default", Channel.class);
+
+		int expected = 2;
+		assertEquals("map of environment attributes should contain '" + expected + "' localized attributes", expected,
+				locEnvironmentAttrs.size());
+
+		assertEquals("map of test attributes should contain '" + expected + "' localized attributes", expected,
+				locTestAttrs.size());
+
+		assertEquals("map of test step attributes should contain '" + expected + "' localized attributes", expected,
+				locTestStepAttrs.size());
+
+		assertEquals("map of measurement attributes should contain '" + expected + "' localized attributes", expected,
+				locMeasurementAttrs.size());
+
+		assertEquals("map of channel group attributes should contain '" + expected + "' localized attributes", expected,
+				locChannelGroupAttrs.size());
+
+		assertEquals("map of channel attributes should contain '" + expected + "' localized attributes", expected,
+				locChannelAttrs.size());
+
+	}
+
+	@Test
+	public void testLocalizeType() throws Exception {
+		I18NActivity i18nActivity = createdMockedActivity();
+
+		Map<EntityType, String> locEnvironmentType = i18nActivity.localizeType("default", Environment.class);
+		Map<EntityType, String> locTestType = i18nActivity.localizeType("default",
+				org.eclipse.mdm.api.base.model.Test.class);
+		Map<EntityType, String> locTestStepType = i18nActivity.localizeType("default", TestStep.class);
+		Map<EntityType, String> locMeasurementType = i18nActivity.localizeType("default", Measurement.class);
+		Map<EntityType, String> locChannelGroupType = i18nActivity.localizeType("default", ChannelGroup.class);
+		Map<EntityType, String> locChannelType = i18nActivity.localizeType("default", Channel.class);
+
+		int expected = 1;
+		assertEquals("map of Environment types should contain '" + expected + "' localized type", expected,
+				locEnvironmentType.size());
+		assertEquals("map of Test types should contain '" + expected + "' localized type", expected,
+				locTestType.size());
+		assertEquals("map of TestStep types should contain '" + expected + "' localized type", expected,
+				locTestStepType.size());
+		assertEquals("map of Measurement types should contain '" + expected + "' localized type", expected,
+				locMeasurementType.size());
+		assertEquals("map of ChannelGroup types should contain '" + expected + "' localized type", expected,
+				locChannelGroupType.size());
+		assertEquals("map of Channel types should contain '" + expected + "' localized type", expected,
+				locChannelType.size());
+	}
+
+	@Test
+	public void testAllLocalizeAttributes() throws Exception {
+		I18NActivity i18nActivity = createdMockedActivity();
+
+		Map<Attribute, String> localizedMap = i18nActivity.localizeAllAttributes("default");
+
+		int expected = 12; // 6 types with 2 attributes
+
+		assertEquals("map of all attributes should contain '" + expected + "' localized attributes", expected,
+				localizedMap.size());
+	}
+
+	@Test
+	public void testLocalizeAllTypes() throws Exception {
+		I18NActivity i18nActivity = createdMockedActivity();
+
+		Map<EntityType, String> localizedMap = i18nActivity.localizeAllTypes("default");
+
+		int expected = 6;
+		assertEquals("map of all types should contain '" + expected + "' localized types", expected,
+				localizedMap.size());
+	}
+
+	private I18NActivity createdMockedActivity() throws Exception {
+
+		ConnectorService connectorBeanMock = I18NActivityMockHelper.createConnectorMock();
+
+		I18NActivity i18nActivity = new I18NActivity();
+		Field fieldConnector = i18nActivity.getClass().getDeclaredField("connectorService");
+		fieldConnector.setAccessible(true);
+		fieldConnector.set(i18nActivity, connectorBeanMock);
+		fieldConnector.setAccessible(false);
+
+		return i18nActivity;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/navigation/NavigationActivityMockHelper.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/navigation/NavigationActivityMockHelper.java
new file mode 100644
index 0000000..48714f2
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/navigation/NavigationActivityMockHelper.java
@@ -0,0 +1,198 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control.navigation;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Optional;
+
+import org.eclipse.mdm.api.base.adapter.Core;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.ModelManager;
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.businessobjects.boundary.EnvironmentService;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+
+import com.google.common.collect.ImmutableList;
+
+public final class NavigationActivityMockHelper {
+
+	public static final int ITEM_COUNT = 5;
+
+	private NavigationActivityMockHelper() {
+	}
+
+	public static ConnectorService createConnectorMock() throws Exception {
+
+		ConnectorService connectorBean = mock(ConnectorService.class);
+
+		List<ApplicationContext> contextList = new ArrayList<>();
+		for (int i = 1; i <= ITEM_COUNT; i++) {
+			contextList.add(createContextMock("MDMENV_" + i));
+		}
+		when(connectorBean.getContexts()).thenReturn(contextList);
+		when(connectorBean.getContextByName(anyString())).thenReturn(contextList.get(0));
+		return connectorBean;
+	}
+
+	private static ApplicationContext createContextMock(String sourceName) throws Exception {
+
+		Environment env = createEntityMock(Environment.class, sourceName, sourceName, "1");
+
+		EntityManager em = mock(EntityManager.class);
+
+		when(em.loadEnvironment()).thenReturn(env);
+
+		List<Test> testMocks = createTestMocks(ITEM_COUNT, sourceName);
+		when(em.loadAll(Test.class)).thenReturn(testMocks);
+
+		List<TestStep> testStepMocks = createTestStepMocks(ITEM_COUNT, sourceName);
+		when(em.loadChildren(any(), eq(TestStep.class))).thenReturn(testStepMocks);
+
+		List<Measurement> measurementMocks = createMeasurementMocks(ITEM_COUNT, sourceName);
+		when(em.loadChildren(any(), eq(Measurement.class))).thenReturn(measurementMocks);
+
+		List<ChannelGroup> channelGroupMocks = createChannelGroupMocks(ITEM_COUNT, sourceName);
+		when(em.loadChildren(any(), eq(ChannelGroup.class))).thenReturn(channelGroupMocks);
+
+		List<Channel> channelMocks = createChannelMocks(ITEM_COUNT, sourceName);
+		when(em.loadChildren(any(), eq(Channel.class))).thenReturn(channelMocks);
+
+		ModelManager modelManagerMock = createModelManagerMock();
+
+		ApplicationContext context = mock(ApplicationContext.class);
+		when(context.getEntityManager()).thenReturn(Optional.of(em));
+		when(context.getModelManager()).thenReturn(Optional.of(modelManagerMock));
+		return context;
+	}
+
+	private static List<Test> createTestMocks(int count, String sourceName) throws Exception {
+		List<Test> list = new ArrayList<>();
+		for (int i = 1; i <= count; i++) {
+			list.add(createEntityMock(Test.class, "Test_" + count, sourceName, Integer.toString(count)));
+		}
+		return list;
+	}
+
+	private static List<TestStep> createTestStepMocks(int count, String sourceName) throws Exception {
+		List<TestStep> list = new ArrayList<>();
+		for (int i = 1; i <= count; i++) {
+			list.add(createEntityMock(TestStep.class, "TestStep_" + count, sourceName, Integer.toString(count)));
+		}
+		return list;
+	}
+
+	private static List<Measurement> createMeasurementMocks(int count, String sourceName) throws Exception {
+		List<Measurement> list = new ArrayList<>();
+		for (int i = 1; i <= count; i++) {
+			list.add(createEntityMock(Measurement.class, "Measurement_" + count, sourceName, Integer.toString(count)));
+		}
+		return list;
+	}
+
+	private static List<ChannelGroup> createChannelGroupMocks(int count, String sourceName) throws Exception {
+		List<ChannelGroup> list = new ArrayList<>();
+		for (int i = 1; i <= count; i++) {
+			list.add(
+					createEntityMock(ChannelGroup.class, "ChannelGroup_" + count, sourceName, Integer.toString(count)));
+		}
+		return list;
+	}
+
+	private static List<Channel> createChannelMocks(int count, String sourceName) throws Exception {
+		List<Channel> list = new ArrayList<>();
+		for (int i = 1; i <= count; i++) {
+			list.add(createEntityMock(Channel.class, "Channel_" + count, sourceName, Integer.toString(count)));
+		}
+		return list;
+	}
+
+	private static ModelManager createModelManagerMock() throws Exception {
+
+		EntityType envET = mock(EntityType.class);
+		when(envET.getName()).thenReturn("Environment");
+
+		EntityType testET = mock(EntityType.class);
+		when(testET.getName()).thenReturn("Test");
+
+		EntityType testStepET = mock(EntityType.class);
+		when(testStepET.getName()).thenReturn("TestStep");
+
+		EntityType measurementET = mock(EntityType.class);
+		when(measurementET.getName()).thenReturn("Measurement");
+
+		EntityType channelGroupET = mock(EntityType.class);
+		when(channelGroupET.getName()).thenReturn("ChannelGroup");
+
+		EntityType channelET = mock(EntityType.class);
+		when(channelET.getName()).thenReturn("Channel");
+
+		ModelManager modelManager = mock(ModelManager.class);
+		when(modelManager.getEntityType(Environment.class)).thenReturn(envET);
+		when(modelManager.getEntityType(Test.class)).thenReturn(testET);
+		when(modelManager.getEntityType(TestStep.class)).thenReturn(testStepET);
+		when(modelManager.getEntityType(Measurement.class)).thenReturn(measurementET);
+		when(modelManager.getEntityType(ChannelGroup.class)).thenReturn(channelGroupET);
+		when(modelManager.getEntityType(Channel.class)).thenReturn(channelET);
+
+		return modelManager;
+	}
+
+	private static <T extends Entity> T createEntityMock(Class<T> type, String name, String sourceName, String id)
+			throws Exception {
+
+		HashMap<String, Value> map = new HashMap<String, Value>();
+		map.put("Name", ValueType.STRING.create("Name", name));
+
+		Core core = mock(Core.class);
+		when(core.getSourceName()).thenReturn(sourceName);
+		when(core.getValues()).thenReturn(map);
+		when(core.getID()).thenReturn(id);
+
+		Constructor<T> constructor = type.getDeclaredConstructor(Core.class);
+		constructor.setAccessible(true);
+		T instance = constructor.newInstance(core);
+		constructor.setAccessible(false);
+		return instance;
+	}
+
+	public static EnvironmentService createEnvironmentMock() {
+		EnvironmentService environmentService = mock(EnvironmentService.class);
+		Environment env = mock(Environment.class);
+
+		when(env.getSourceName()).thenReturn("MDMENV_1");
+		when(environmentService.getEnvironments()).thenReturn(ImmutableList.of(env));
+
+		return environmentService;
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/navigation/NavigatorActivityTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/navigation/NavigatorActivityTest.java
new file mode 100644
index 0000000..5b074f0
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/navigation/NavigatorActivityTest.java
@@ -0,0 +1,119 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control.navigation;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+
+import java.util.List;
+
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.businessobjects.control.NavigationActivity;
+import org.junit.Before;
+import org.junit.Test;
+
+public class NavigatorActivityTest {
+
+	private NavigationActivity navigationActivity;
+	private String sourceName = "MDMENV_1";
+
+	@Before
+	public void setup() throws Exception {
+		navigationActivity = new NavigationActivity(NavigationActivityMockHelper.createConnectorMock());
+	}
+
+	@Test
+	public void testGetEnvironments() throws Exception {
+
+		List<Environment> envList = navigationActivity.getEnvironments();
+
+		assertNotNull("environment list should be not null", envList);
+		assertThat(envList.size(), is(5));
+	}
+
+	@Test
+	public void testGetTests() throws Exception {
+		List<org.eclipse.mdm.api.base.model.Test> testList = navigationActivity.getTests(sourceName);
+
+		assertNotNull("test list should be not null", testList);
+		assertEquals("test list size should be " + NavigationActivityMockHelper.ITEM_COUNT,
+				NavigationActivityMockHelper.ITEM_COUNT, testList.size());
+	}
+
+	@Test
+	public void testGetTestSteps() throws Exception {
+		List<org.eclipse.mdm.api.base.model.Test> testList = navigationActivity.getTests(sourceName);
+		org.eclipse.mdm.api.base.model.Test test = testList.get(0);
+		List<TestStep> testStepList = navigationActivity.getTestSteps(sourceName, test.getID());
+
+		assertNotNull("teststep list should be not null", testStepList);
+		assertEquals("teststep list size should be " + NavigationActivityMockHelper.ITEM_COUNT,
+				NavigationActivityMockHelper.ITEM_COUNT, testStepList.size());
+	}
+
+	@Test
+	public void testGetMeasurements() throws Exception {
+		List<org.eclipse.mdm.api.base.model.Test> testList = navigationActivity.getTests(sourceName);
+		org.eclipse.mdm.api.base.model.Test test = testList.get(0);
+		List<TestStep> testStepList = navigationActivity.getTestSteps(sourceName, test.getID());
+		TestStep testStep = testStepList.get(0);
+		List<Measurement> measurementList = navigationActivity.getMeasurements(sourceName, testStep.getID());
+
+		assertNotNull("measurement list should be not null", measurementList);
+		assertEquals("measurement list size should be " + NavigationActivityMockHelper.ITEM_COUNT,
+				NavigationActivityMockHelper.ITEM_COUNT, measurementList.size());
+
+	}
+
+	@Test
+	public void testGetChannelGroups() throws Exception {
+		List<org.eclipse.mdm.api.base.model.Test> testList = navigationActivity.getTests(sourceName);
+		org.eclipse.mdm.api.base.model.Test test = testList.get(0);
+		List<TestStep> testStepList = navigationActivity.getTestSteps(sourceName, test.getID());
+		TestStep testStep = testStepList.get(0);
+		List<Measurement> measurementList = navigationActivity.getMeasurements(sourceName, testStep.getID());
+		Measurement measurement = measurementList.get(0);
+		List<ChannelGroup> channelGroupList = navigationActivity.getChannelGroups(sourceName, measurement.getID());
+
+		assertNotNull("channel group list should be not null", channelGroupList);
+		assertEquals("channel group list size should be " + NavigationActivityMockHelper.ITEM_COUNT,
+				NavigationActivityMockHelper.ITEM_COUNT, channelGroupList.size());
+	}
+
+	@Test
+	public void testGetChannels() throws Exception {
+		List<org.eclipse.mdm.api.base.model.Test> testList = navigationActivity.getTests(sourceName);
+		org.eclipse.mdm.api.base.model.Test test = testList.get(0);
+		List<TestStep> testStepList = navigationActivity.getTestSteps(sourceName, test.getID());
+		TestStep testStep = testStepList.get(0);
+		List<Measurement> measurementList = navigationActivity.getMeasurements(sourceName, testStep.getID());
+		Measurement measurement = measurementList.get(0);
+		List<ChannelGroup> channelGroupList = navigationActivity.getChannelGroups(sourceName, measurement.getID());
+		ChannelGroup channelGroup = channelGroupList.get(0);
+		List<Channel> channelList = navigationActivity.getChannels(sourceName, channelGroup.getID());
+
+		assertNotNull("channel list should be not null", channelList);
+		assertEquals("channel list size should be " + NavigationActivityMockHelper.ITEM_COUNT,
+				NavigationActivityMockHelper.ITEM_COUNT, channelList.size());
+
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/search/FilterParserTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/search/FilterParserTest.java
new file mode 100644
index 0000000..8268f5d
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/search/FilterParserTest.java
@@ -0,0 +1,694 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control.search;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.BETWEEN;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.CASE_INSENSITIVE_EQUAL;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.CASE_INSENSITIVE_GREATER_THAN;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.CASE_INSENSITIVE_GREATER_THAN_OR_EQUAL;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.CASE_INSENSITIVE_IN_SET;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.CASE_INSENSITIVE_LESS_THAN;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.CASE_INSENSITIVE_LESS_THAN_OR_EQUAL;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.CASE_INSENSITIVE_LIKE;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.CASE_INSENSITIVE_NOT_EQUAL;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.CASE_INSENSITIVE_NOT_IN_SET;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.CASE_INSENSITIVE_NOT_LIKE;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.EQUAL;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.GREATER_THAN;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.GREATER_THAN_OR_EQUAL;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.IN_SET;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.IS_NOT_NULL;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.IS_NULL;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.LESS_THAN;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.LESS_THAN_OR_EQUAL;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.LIKE;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.NOT_EQUAL;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.NOT_IN_SET;
+import static org.eclipse.mdm.api.base.query.ComparisonOperator.NOT_LIKE;
+import static org.eclipse.mdm.businessobjects.control.FilterParser.parseFilterString;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.assertj.core.api.SoftAssertions;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.query.ComparisonOperator;
+import org.eclipse.mdm.api.base.query.Filter;
+import org.junit.Test;
+
+public class FilterParserTest {
+	private List<EntityType> entities = SearchMockHelper.createETListMock();
+	private Map<String, EntityType> map = entities.stream().collect(Collectors.toMap(EntityType::getName, e -> e));
+
+	@Test
+	public void testEmpty() throws Exception {
+		assertThat(parseFilterString(entities, "").isEmtpty()).isTrue();
+	}
+
+	@Test
+	public void testNull() throws Exception {
+		assertThat(parseFilterString(entities, null).isEmtpty()).isTrue();
+	}
+
+	@Test
+	public void testOperatorEqual() throws Exception {
+
+		String filterString = "TestStep.Name eq 'test'";
+
+		Filter expected = Filter.and()
+				.add(ComparisonOperator.EQUAL.create(map.get("TestStep").getAttribute("Name"), "test"));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorNotEqual() throws Exception {
+
+		String filterString = "TestStep.Name ne 'test'";
+
+		Filter expected = Filter.and().add(NOT_EQUAL.create(map.get("TestStep").getAttribute("Name"), "test"));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorLessThan() throws Exception {
+
+		String filterString = "TestStep.LongAttribute lt 10";
+
+		Filter expected = Filter.and().add(LESS_THAN.create(map.get("TestStep").getAttribute("LongAttribute"), 10L));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorLessThanOrEqual() throws Exception {
+
+		String filterString = "TestStep.LongAttribute le 10";
+
+		Filter expected = Filter.and()
+				.add(LESS_THAN_OR_EQUAL.create(map.get("TestStep").getAttribute("LongAttribute"), 10L));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorGreaterThan() throws Exception {
+
+		String filterString = "TestStep.LongAttribute gt 10";
+
+		Filter expected = Filter.and().add(GREATER_THAN.create(map.get("TestStep").getAttribute("LongAttribute"), 10L));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorGreaterThanOrEqual() throws Exception {
+
+		String filterString = "TestStep.LongAttribute ge 10";
+
+		Filter expected = Filter.and()
+				.add(GREATER_THAN_OR_EQUAL.create(map.get("TestStep").getAttribute("LongAttribute"), 10L));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorNotInSet() throws Exception {
+
+		String filterString = "TestStep.Name not_in ('test', 'measurement', 'crash')";
+
+		Filter expected = Filter.and().add(NOT_IN_SET.create(map.get("TestStep").getAttribute("Name"),
+				new String[] { "test", "measurement", "crash" }));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorLike() throws Exception {
+
+		String filterString = "TestStep.Name lk 'test*'";
+
+		Filter expected = Filter.and().add(LIKE.create(map.get("TestStep").getAttribute("Name"), "test*"));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorNotLike() throws Exception {
+
+		String filterString = "TestStep.Name not_lk 'test*'";
+
+		Filter expected = Filter.and().add(NOT_LIKE.create(map.get("TestStep").getAttribute("Name"), "test*"));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorCIEqual() throws Exception {
+
+		String filterString = "TestStep.Name ci_eq 'test'";
+
+		Filter expected = Filter.and()
+				.add(CASE_INSENSITIVE_EQUAL.create(map.get("TestStep").getAttribute("Name"), "test"));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorCINotEqual() throws Exception {
+
+		String filterString = "TestStep.Name ci_ne 'test'";
+
+		Filter expected = Filter.and()
+				.add(CASE_INSENSITIVE_NOT_EQUAL.create(map.get("TestStep").getAttribute("Name"), "test"));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorCILessThan() throws Exception {
+
+		String filterString = "TestStep.LongAttribute ci_lt 10";
+
+		Filter expected = Filter.and()
+				.add(CASE_INSENSITIVE_LESS_THAN.create(map.get("TestStep").getAttribute("LongAttribute"), 10L));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorCILessThanOrEqual() throws Exception {
+
+		String filterString = "TestStep.LongAttribute ci_le 10";
+
+		Filter expected = Filter.and().add(
+				CASE_INSENSITIVE_LESS_THAN_OR_EQUAL.create(map.get("TestStep").getAttribute("LongAttribute"), 10L));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorCIGreaterThan() throws Exception {
+
+		String filterString = "TestStep.LongAttribute ci_gt 10";
+
+		Filter expected = Filter.and()
+				.add(CASE_INSENSITIVE_GREATER_THAN.create(map.get("TestStep").getAttribute("LongAttribute"), 10L));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorCIGreaterThanOrEqual() throws Exception {
+
+		String filterString = "TestStep.LongAttribute ci_ge 10";
+
+		Filter expected = Filter.and().add(
+				CASE_INSENSITIVE_GREATER_THAN_OR_EQUAL.create(map.get("TestStep").getAttribute("LongAttribute"), 10L));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorCIInSet() throws Exception {
+
+		String filterString = "TestStep.Name ci_in ('test', 'measurement', 'crash')";
+
+		Filter expected = Filter.and().add(CASE_INSENSITIVE_IN_SET.create(map.get("TestStep").getAttribute("Name"),
+				new String[] { "test", "measurement", "crash" }));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorCINotInSet() throws Exception {
+
+		String filterString = "TestStep.Name ci_not_in ('test', 'measurement', 'crash')";
+
+		Filter expected = Filter.and().add(CASE_INSENSITIVE_NOT_IN_SET.create(map.get("TestStep").getAttribute("Name"),
+				new String[] { "test", "measurement", "crash" }));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorCILike() throws Exception {
+
+		String filterString = "TestStep.Name ci_lk 'test*'";
+
+		Filter expected = Filter.and()
+				.add(CASE_INSENSITIVE_LIKE.create(map.get("TestStep").getAttribute("Name"), "test*"));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorCINotLike() throws Exception {
+
+		String filterString = "TestStep.Name ci_not_lk 'test*'";
+
+		Filter expected = Filter.and()
+				.add(CASE_INSENSITIVE_NOT_LIKE.create(map.get("TestStep").getAttribute("Name"), "test*"));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorIsNull() throws Exception {
+
+		String filterString = "TestStep.Name is_null";
+
+		Filter expected = Filter.and().add(IS_NULL.create(map.get("TestStep").getAttribute("Name"), null));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorIsNotNull() throws Exception {
+
+		String filterString = "TestStep.Name is_not_null";
+
+		Filter expected = Filter.and().add(IS_NOT_NULL.create(map.get("TestStep").getAttribute("Name"), null));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOperatorBetween() throws Exception {
+
+		String filterString = "TestStep.LongAttribute bw (100, 1000)";
+
+		Filter expected = Filter.and()
+				.add(BETWEEN.create(map.get("TestStep").getAttribute("LongAttribute"), new long[] { 100, 1000 }));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testInSetWithImplicitToStringConversion() throws Exception {
+
+		String filterString = "TestStep.Name in (12.2, 'test', 1)";
+
+		Filter expected = Filter.and()
+				.add(IN_SET.create(map.get("TestStep").getAttribute("Name"), new String[] { "12.2", "test", "1" }));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test(expected = NumberFormatException.class)
+	public void testInSetWithStringForDoubleAttribute() throws Exception {
+
+		String filterString = "TestStep.DoubleAttribute in (12.2, 'Test', 1)";
+
+		Filter expected = Filter.and()
+				.add(IN_SET.create(map.get("TestStep").getAttribute("DoubleAttribute"), new double[] { 12.2 }));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testInSetWithNumericDataTypes() throws Exception {
+
+		String filterString = "TestStep.DoubleAttribute in (12.2, -1.0, 0.006022)";
+
+		Filter expected = Filter.and().add(IN_SET.create(map.get("TestStep").getAttribute("DoubleAttribute"),
+				new double[] { 12.2, -1.0, 0.006022 }));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testSimple() throws Exception {
+
+		String filterString = "TestStep.Name eq 'test'";
+
+		Filter expected = Filter.and()
+				.add(ComparisonOperator.EQUAL.create(map.get("TestStep").getAttribute("Name"), "test"));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testSimpleWithBrackets() throws Exception {
+
+		String filterString = "(TestStep.Name eq 'test')";
+
+		Filter expected = Filter.and()
+				.add(ComparisonOperator.EQUAL.create(map.get("TestStep").getAttribute("Name"), "test"));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testOr() throws Exception {
+
+		String filterString = "(TestStep.Name eq 'test') or (Test.LongAttribute gt 1)";
+
+		Filter expected = Filter.or()
+				.add(ComparisonOperator.EQUAL.create(map.get("TestStep").getAttribute("Name"), "test"))
+				.add(ComparisonOperator.GREATER_THAN.create(map.get("Test").getAttribute("LongAttribute"), 1L));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testAnd() throws Exception {
+
+		String filterString = "(TestStep.Name eq 'test') and (Test.LongAttribute gt 1)";
+
+		Filter expected = Filter.and()
+				.add(ComparisonOperator.EQUAL.create(map.get("TestStep").getAttribute("Name"), "test"))
+				.add(ComparisonOperator.GREATER_THAN.create(map.get("Test").getAttribute("LongAttribute"), 1L));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testAnd2() throws Exception {
+
+		String filterString = "TestStep.Name eq 'test' and Test.LongAttribute gt 1";
+
+		Filter expected = Filter.and()
+				.add(ComparisonOperator.EQUAL.create(map.get("TestStep").getAttribute("Name"), "test"))
+				.add(ComparisonOperator.GREATER_THAN.create(map.get("Test").getAttribute("LongAttribute"), 1L));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testSimpleNot() throws Exception {
+
+		String filterString = "not(TestStep.Name eq 'test')";
+
+		Filter expected = Filter.and()
+				.add(ComparisonOperator.EQUAL.create(map.get("TestStep").getAttribute("Name"), "test")).invert();
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testNot() throws Exception {
+
+		String filterString = "TestStep.Name eq 'test' and not(Test.LongAttribute gt 1)";
+
+		Filter expected = Filter.and()
+				.add(ComparisonOperator.EQUAL.create(map.get("TestStep").getAttribute("Name"), "test"))
+				.merge(Filter.or()
+						.add(ComparisonOperator.GREATER_THAN.create(map.get("Test").getAttribute("LongAttribute"), 1L))
+						.invert());
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testNested() throws Exception {
+
+		String filterString = "TestStep.Name eq 'test' and (Test.LongAttribute gt 1 or Test.IntegerAttribute lt 10)";
+
+		Filter expected = Filter.and()
+				.add(ComparisonOperator.EQUAL.create(map.get("TestStep").getAttribute("Name"), "test"))
+				.merge(Filter.or()
+						.add(ComparisonOperator.GREATER_THAN.create(map.get("Test").getAttribute("LongAttribute"), 1L))
+						.add(ComparisonOperator.LESS_THAN.create(map.get("Test").getAttribute("IntegerAttribute"),
+								10)));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testCaseOfKeywordsIsIgnored() throws Exception {
+
+		String filterString = "TestStep.Name Eq 'test' AND (Test.LongAttribute gt 1 oR Test.IntegerAttribute LT 10)";
+
+		Filter expected = Filter.and()
+				.add(ComparisonOperator.EQUAL.create(map.get("TestStep").getAttribute("Name"), "test"))
+				.merge(Filter.or()
+						.add(ComparisonOperator.GREATER_THAN.create(map.get("Test").getAttribute("LongAttribute"), 1L))
+						.add(ComparisonOperator.LESS_THAN.create(map.get("Test").getAttribute("IntegerAttribute"),
+								10)));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testAndPrecedence() throws Exception {
+
+		String filterString = "TestStep.Name eq 'test' and Test.LongAttribute gt 1 or Test.IntegerAttribute lt 10";
+
+		Filter expected = Filter.or().merge(
+				Filter.and().add(ComparisonOperator.EQUAL.create(map.get("TestStep").getAttribute("Name"), "test"))
+						.add(ComparisonOperator.GREATER_THAN.create(map.get("Test").getAttribute("LongAttribute"), 1L)),
+				Filter.and().add(
+						ComparisonOperator.LESS_THAN.create(map.get("Test").getAttribute("IntegerAttribute"), 10)));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testAndPrecedence2() throws Exception {
+
+		String filterString = "TestStep.Name eq 'test' or Test.LongAttribute gt 1 and Test.IntegerAttribute lt 10";
+
+		Filter expected = Filter.or().merge(
+				Filter.and().add(ComparisonOperator.EQUAL.create(map.get("TestStep").getAttribute("Name"), "test")),
+				Filter.and()
+						.add(ComparisonOperator.GREATER_THAN.create(map.get("Test").getAttribute("LongAttribute"), 1L))
+						.add(ComparisonOperator.LESS_THAN.create(map.get("Test").getAttribute("IntegerAttribute"),
+								10)));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testComplexFilter() throws Exception {
+
+		String filterString = "TestStep.Name eq 'test' and (Test.LongAttribute gt 1 or Test.DoubleAttribute lt 12.3 or Test.IntegerAttribute eq 2) "
+				+ " and not(TestStep.FloatAttribute gt 3.14 or TestStep.BooleanAttribute eq true) or TestStep.DateAttribute gt '2017-01-02T01:02:03'";
+
+		Filter expected = Filter
+				.or().merge(
+						Filter.and()
+								.add(ComparisonOperator.EQUAL.create(map.get("TestStep").getAttribute("Name"), "test"))
+								.merge(Filter.or()
+										.add(ComparisonOperator.GREATER_THAN
+												.create(map.get("Test").getAttribute("LongAttribute"), 1L))
+										.add(ComparisonOperator.LESS_THAN
+												.create(map.get("Test").getAttribute("DoubleAttribute"), 12.3))
+										.add(ComparisonOperator.EQUAL
+												.create(map.get("Test").getAttribute("IntegerAttribute"), 2)),
+										Filter.or()
+												.add(ComparisonOperator.GREATER_THAN.create(
+														map.get("TestStep").getAttribute("FloatAttribute"), 3.14f))
+												.add(ComparisonOperator.EQUAL.create(
+														map.get("TestStep").getAttribute("BooleanAttribute"), true))
+												.invert()),
+						Filter.and()
+								.add(ComparisonOperator.GREATER_THAN.create(
+										map.get("TestStep").getAttribute("DateAttribute"),
+										LocalDateTime.parse("2017-01-02T01:02:03"))));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testDataTypeString() throws Exception {
+		String filterString = "TestStep.Name eq 'Test'";
+
+		Filter expected = Filter.and()
+				.add(ComparisonOperator.EQUAL.create(map.get("TestStep").getAttribute("Name"), "Test"));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testDataTypeDate() throws Exception {
+		String filterString = "TestStep.DateAttribute gt '2017-09-28T12:13:14'";
+
+		Filter expected = Filter.and().add(ComparisonOperator.GREATER_THAN
+				.create(map.get("TestStep").getAttribute("DateAttribute"), LocalDateTime.parse("2017-09-28T12:13:14")));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testDataTypeDateWithMillies() throws Exception {
+		String filterString = "TestStep.DateAttribute gt '2017-09-29T12:13:14.123456'";
+
+		Filter expected = Filter.and().add(ComparisonOperator.GREATER_THAN.create(
+				map.get("TestStep").getAttribute("DateAttribute"), LocalDateTime.parse("2017-09-29T12:13:14.123456")));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testDataTypeDateSequence() throws Exception {
+		String filterString = "TestStep.DateAttribute bw ('2017-09-28T12:13:14', '2017-09-29T17:18:19')";
+
+		Filter expected = Filter.and()
+				.add(ComparisonOperator.BETWEEN.create(map.get("TestStep").getAttribute("DateAttribute"),
+						new LocalDateTime[] { LocalDateTime.parse("2017-09-28T12:13:14"),
+								LocalDateTime.parse("2017-09-29T17:18:19") }));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testDataTypeBoolean() throws Exception {
+		String filterString = "TestStep.BooleanAttribute eq true";
+
+		Filter expected = Filter.and()
+				.add(ComparisonOperator.EQUAL.create(map.get("TestStep").getAttribute("BooleanAttribute"), true));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testDataTypeByte() throws Exception {
+		String filterString = "TestStep.ByteAttribute eq 127";
+
+		Filter expected = Filter.and()
+				.add(ComparisonOperator.EQUAL.create(map.get("TestStep").getAttribute("ByteAttribute"), (byte) 127));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testDataTypeShort() throws Exception {
+		String filterString = "TestStep.ShortAttribute eq 1024";
+
+		Filter expected = Filter.and()
+				.add(ComparisonOperator.EQUAL.create(map.get("TestStep").getAttribute("ShortAttribute"), (short) 1024));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testDataTypeInteger() throws Exception {
+		String filterString = "TestStep.IntegerAttribute eq " + Integer.MAX_VALUE;
+
+		Filter expected = Filter.and().add(ComparisonOperator.EQUAL
+				.create(map.get("TestStep").getAttribute("IntegerAttribute"), Integer.MAX_VALUE));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testDataTypeLong() throws Exception {
+		String filterString = "TestStep.LongAttribute eq " + Long.MAX_VALUE;
+
+		Filter expected = Filter.and().add(
+				ComparisonOperator.EQUAL.create(map.get("TestStep").getAttribute("LongAttribute"), Long.MAX_VALUE));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testDataTypeFloat() throws Exception {
+		String filterString = "TestStep.FloatAttribute gt 12.3";
+
+		Filter expected = Filter.and()
+				.add(ComparisonOperator.GREATER_THAN.create(map.get("TestStep").getAttribute("FloatAttribute"), 12.3f));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testDataTypeDouble() throws Exception {
+		String filterString = "TestStep.DoubleAttribute gt 12.2";
+
+		Filter expected = Filter.and()
+				.add(ComparisonOperator.GREATER_THAN.create(map.get("TestStep").getAttribute("DoubleAttribute"), 12.2));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testKeywordsInValue() throws Exception {
+		String filterString = "Test.Name eq 'y eq z and not(x)'";
+
+		Filter expected = Filter.and().add(EQUAL.create(map.get("Test").getAttribute("Name"), "y eq z and not(x)"));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testEscapedQuotesInValue() throws Exception {
+		String filterString = "Test.Name eq 'Test \\'abc\\' 2'";
+
+		Filter expected = Filter.and().add(EQUAL.create(map.get("Test").getAttribute("Name"), "Test 'abc' 2"));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testEscapedDoubleQuotesInValue() throws Exception {
+		String filterString = "Test.Name eq 'Test \"abc\"'";
+
+		Filter expected = Filter.and().add(EQUAL.create(map.get("Test").getAttribute("Name"), "Test \"abc\""));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testBackslashInValue() throws Exception {
+		String filterString = "Test.Name eq 'c:\\Temp'";
+
+		Filter expected = Filter.and().add(EQUAL.create(map.get("Test").getAttribute("Name"), "c:\\Temp"));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testNewlineInValue() throws Exception {
+		String filterString = "Test.Name eq 'new\nline'";
+
+		Filter expected = Filter.and().add(EQUAL.create(map.get("Test").getAttribute("Name"), "new\nline"));
+
+		assertThat(parseFilterString(entities, filterString)).isEqualTo(expected);
+	}
+
+	@Test
+	public void testInvalidFilterStrings() {
+		SoftAssertions softly = new SoftAssertions();
+
+		softly.assertThatThrownBy(() -> parseFilterString(entities, "xyz")).isInstanceOf(IllegalArgumentException.class)
+				.hasMessageStartingWith("Could not parse filter string");
+
+		softly.assertThatThrownBy(() -> parseFilterString(entities, "and")).isInstanceOf(IllegalArgumentException.class)
+				.hasMessageStartingWith("Could not parse filter string");
+
+		softly.assertThatThrownBy(() -> parseFilterString(entities, "x eq y"))
+				.isInstanceOf(IllegalArgumentException.class).hasMessageStartingWith("Could not parse filter string");
+
+		softly.assertThatThrownBy(() -> parseFilterString(entities, "Test.Name eq y"))
+				.isInstanceOf(IllegalArgumentException.class).hasMessageStartingWith("Could not parse filter string");
+
+		softly.assertThatThrownBy(() -> parseFilterString(entities, "((Test.Name eq 'y')"))
+				.isInstanceOf(IllegalArgumentException.class).hasMessageStartingWith("Could not parse filter string");
+
+		softly.assertThatThrownBy(() -> parseFilterString(entities, "Test.Name eq 'y' and Test.Name lt 'x')"))
+				.isInstanceOf(IllegalArgumentException.class).hasMessageStartingWith("Could not parse filter string");
+
+		softly.assertThatThrownBy(() -> parseFilterString(entities, "x.y eq 'z'"))
+				.isInstanceOf(IllegalArgumentException.class)
+				.hasMessageStartingWith("Entity x not found in data source");
+
+		softly.assertAll();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/search/SearchActivityTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/search/SearchActivityTest.java
new file mode 100644
index 0000000..34a48c2
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/search/SearchActivityTest.java
@@ -0,0 +1,49 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control.search;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.List;
+
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.businessobjects.control.SearchActivity;
+import org.eclipse.mdm.businessobjects.entity.SearchAttribute;
+import org.junit.Test;
+
+public class SearchActivityTest {
+
+	@Test
+	public void testSearch() throws Exception {
+		SearchActivity activity = new SearchActivity();
+		List<TestStep> searchResult = activity.search(SearchMockHelper.createContextMock(), TestStep.class,
+				"TestStep.Name eq '*' ");
+		assertNotNull("search result list should not be null", searchResult);
+		assertEquals("The size of the search result list should be " + SearchMockHelper.ITEM_COUNT,
+				SearchMockHelper.ITEM_COUNT, searchResult.size());
+	}
+
+	@Test
+	public void listAvailableAttributes() throws Exception {
+		SearchActivity activity = new SearchActivity();
+		List<SearchAttribute> attributes = activity.listAvailableAttributes(SearchMockHelper.createContextMock(),
+				TestStep.class);
+		assertNotNull("test list should be not null", attributes);
+		assertEquals("The attributes list size should be " + SearchMockHelper.ITEM_COUNT, SearchMockHelper.ITEM_COUNT,
+				attributes.size());
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/search/SearchMockHelper.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/search/SearchMockHelper.java
new file mode 100644
index 0000000..7be6ef8
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/control/search/SearchMockHelper.java
@@ -0,0 +1,164 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.control.search;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyList;
+import static org.mockito.Mockito.when;
+
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Optional;
+
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.Core;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.ModelManager;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.EnumRegistry;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.api.base.query.Filter;
+import org.eclipse.mdm.api.base.search.SearchService;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.mockito.Mockito;
+import org.mockito.invocation.InvocationOnMock;
+
+public class SearchMockHelper {
+
+	public static final int ITEM_COUNT = 27;
+
+	private SearchMockHelper() {
+	}
+
+	public static ApplicationContext createContextMock() throws Exception {
+		ApplicationContext context = Mockito.mock(ApplicationContext.class);
+		List<EntityType> etResultMock = createETListMock();
+		Optional<SearchService> mockedSearchService = createSearchServiceMock(etResultMock);
+		when(context.getSearchService()).thenReturn(mockedSearchService);
+		Optional<ModelManager> mockedModelManager = createModelManagerMock(etResultMock);
+		when(context.getModelManager()).thenReturn(mockedModelManager);
+
+		return context;
+	}
+
+	public static Optional<ModelManager> createModelManagerMock(List<EntityType> etResultMock) {
+		ModelManager modelManager = Mockito.mock(ModelManager.class);
+
+		when(modelManager.getEntityType("Test")).thenReturn(etResultMock.get(0));
+		when(modelManager.getEntityType("TestStep")).thenReturn(etResultMock.get(1));
+		when(modelManager.getEntityType("Measurement")).thenReturn(etResultMock.get(2));
+
+		return Optional.of(modelManager);
+	}
+
+	public static Optional<SearchService> createSearchServiceMock(List<EntityType> etResultMock) throws Exception {
+		SearchService searchService = Mockito.mock(SearchService.class);
+		when(searchService.listEntityTypes(TestStep.class)).thenReturn(etResultMock);
+		List<Attribute> attrList = new ArrayList<>();
+		attrList.add(Mockito.mock(Attribute.class));
+		List<Entity> mockedSearchResult = createMockedSearchRes(TestStep.class, "TestStep");
+		when(searchService.fetch(any(), anyList(), any(Filter.class))).thenReturn(mockedSearchResult);
+
+		return Optional.of(searchService);
+	}
+
+	public static <T extends Entity> List<Entity> createMockedSearchRes(Class<T> clazz, String entityTypeName)
+			throws Exception {
+
+		List<Entity> mockedRes = new ArrayList<>();
+
+		for (int i = 1; i <= ITEM_COUNT; i++) {
+			T etMock = createEntityMock(clazz, entityTypeName + "_" + i, "Environment", Integer.toString(i));
+			mockedRes.add(etMock);
+		}
+
+		return mockedRes;
+	}
+
+	public static List<EntityType> createETListMock() {
+		List<EntityType> mockedEntityList = new ArrayList<>();
+		EntityType mockedETTest = createEntityTypeMock("Test");
+		EntityType mockedETTestStep = createEntityTypeMock("TestStep");
+		EntityType mockedETMeasurement = createEntityTypeMock("Measurement");
+		mockedEntityList.add(mockedETTest);
+		mockedEntityList.add(mockedETTestStep);
+		mockedEntityList.add(mockedETMeasurement);
+
+		return mockedEntityList;
+	}
+
+	private static EntityType createEntityTypeMock(String entityName) {
+		EntityType mockedETTest = Mockito.mock(EntityType.class);
+		List<Attribute> mockedAttributes = new ArrayList<>();
+
+		// Initialize enums or else ValueType.name() returns null
+		EnumRegistry.getInstance();
+
+		mockedAttributes.add(createAttributeMock(mockedETTest, "Name", ValueType.STRING));
+		mockedAttributes.add(createAttributeMock(mockedETTest, "DateAttribute", ValueType.DATE));
+		mockedAttributes.add(createAttributeMock(mockedETTest, "BooleanAttribute", ValueType.BOOLEAN));
+		mockedAttributes.add(createAttributeMock(mockedETTest, "ByteAttribute", ValueType.BYTE));
+		mockedAttributes.add(createAttributeMock(mockedETTest, "ShortAttribute", ValueType.SHORT));
+		mockedAttributes.add(createAttributeMock(mockedETTest, "IntegerAttribute", ValueType.INTEGER));
+		mockedAttributes.add(createAttributeMock(mockedETTest, "LongAttribute", ValueType.LONG));
+		mockedAttributes.add(createAttributeMock(mockedETTest, "FloatAttribute", ValueType.FLOAT));
+		mockedAttributes.add(createAttributeMock(mockedETTest, "DoubleAttribute", ValueType.DOUBLE));
+
+		when(mockedETTest.getName()).thenReturn(entityName);
+		when(mockedETTest.getAttributes()).thenReturn(mockedAttributes);
+		when(mockedETTest.getAttribute(any())).thenAnswer((InvocationOnMock invocation) -> (Attribute) mockedAttributes
+				.stream().filter(a -> a.getName().equals(invocation.getArgument(0))).findAny().get());
+
+		return mockedETTest;
+	}
+
+	private static Attribute createAttributeMock(EntityType entity, String attributeName, ValueType<?> valueType) {
+		Attribute attributeMock = Mockito.mock(Attribute.class);
+		when(attributeMock.getName()).thenReturn(attributeName);
+		when(attributeMock.getValueType()).thenReturn(valueType);
+		when(attributeMock.createValue(any())).thenCallRealMethod();
+		when(attributeMock.createValue(any(), any())).thenCallRealMethod();
+		when(attributeMock.createValue(any(), anyBoolean(), any())).thenCallRealMethod();
+		when(attributeMock.createValueSeq(any(), any())).thenCallRealMethod();
+		when(attributeMock.getEntityType()).thenReturn(entity);
+
+		return attributeMock;
+	}
+
+	private static <T extends Entity> T createEntityMock(Class<T> type, String name, String sourceName, String id)
+			throws Exception {
+
+		HashMap<String, Value> map = new HashMap<String, Value>();
+		map.put("Name", ValueType.STRING.create("Name", name));
+
+		Core core = Mockito.mock(Core.class);
+		when(core.getSourceName()).thenReturn(sourceName);
+		when(core.getValues()).thenReturn(map);
+		when(core.getID()).thenReturn(id);
+
+		Constructor<T> constructor = type.getDeclaredConstructor(Core.class);
+		constructor.setAccessible(true);
+		T instance = constructor.newInstance(core);
+		constructor.setAccessible(false);
+
+		return instance;
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/service/EntityServiceTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/service/EntityServiceTest.java
new file mode 100644
index 0000000..7eb19f6
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/service/EntityServiceTest.java
@@ -0,0 +1,89 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.service;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.junit.Test;
+
+import io.vavr.collection.List;
+
+public class EntityServiceTest {
+
+	@Test
+	public void testSatisfiesParameters() throws Exception {
+		EntityService entityService = new EntityService();
+
+		Class<?>[] parameter = new Class[] { java.util.List.class, ContextRoot.class };
+		List<Class<?>> required = List.of(ArrayList.class, ContextRoot.class);
+
+		assertThat(entityService.satisfiesParameters(parameter, required)).isTrue();
+	}
+
+	@Test
+	public void testSatisfiesParametersNotSubClassSuperClass() throws Exception {
+		EntityService entityService = new EntityService();
+
+		Class<?>[] parameter = new Class[] { ArrayList.class, ContextRoot.class };
+		List<Class<?>> required = List.of(java.util.List.class, ContextRoot.class);
+
+		assertThat(entityService.satisfiesParameters(parameter, required)).isFalse();
+	}
+
+	@Test
+	public void testSatisfiesParametersNot() throws Exception {
+		EntityService entityService = new EntityService();
+
+		Class<?>[] parameter = new Class[] { HashMap.class, ContextRoot.class };
+		List<Class<? extends Object>> required = List.of(java.util.List.class, ContextRoot.class);
+
+		assertThat(entityService.satisfiesParameters(parameter, required)).isFalse();
+	}
+
+	@Test
+	public void testSatisfiesParametersAutoBoxing() throws Exception {
+		EntityService entityService = new EntityService();
+
+		Class<?>[] parameter = new Class[] { boolean.class, ContextRoot.class };
+		List<Class<?>> required = List.of(Boolean.class, ContextRoot.class);
+
+		assertThat(entityService.satisfiesParameters(parameter, required)).isTrue();
+	}
+
+	@Test
+	public void testSatisfiesParametersAutoUnboxing() throws Exception {
+		EntityService entityService = new EntityService();
+
+		Class<?>[] parameter = new Class[] { Boolean.class, ContextRoot.class };
+		List<Class<?>> required = List.of(boolean.class, ContextRoot.class);
+
+		assertThat(entityService.satisfiesParameters(parameter, required)).isTrue();
+	}
+
+	@Test
+	public void testSatisfiesParametersNotLength() throws Exception {
+		EntityService entityService = new EntityService();
+
+		Class<?>[] parameter = new Class[] { Boolean.class, ContextRoot.class, boolean.class };
+		List<Class<?>> required = List.of(boolean.class, ContextRoot.class);
+
+		assertThat(entityService.satisfiesParameters(parameter, required)).isFalse();
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/utils/PreviewHelperTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/utils/PreviewHelperTest.java
new file mode 100644
index 0000000..d88b61b
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/utils/PreviewHelperTest.java
@@ -0,0 +1,274 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.businessobjects.utils;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+import java.util.Arrays;
+import java.util.List;
+
+import org.assertj.core.util.DoubleComparator;
+import org.eclipse.mdm.protobuf.Mdm.ByteArray;
+import org.eclipse.mdm.protobuf.Mdm.DateArray;
+import org.eclipse.mdm.protobuf.Mdm.DoubleArray;
+import org.eclipse.mdm.protobuf.Mdm.FloatArray;
+import org.eclipse.mdm.protobuf.Mdm.IntegerArray;
+import org.eclipse.mdm.protobuf.Mdm.LongArray;
+import org.eclipse.mdm.protobuf.Mdm.MeasuredValues;
+import org.eclipse.mdm.protobuf.Mdm.PreviewValuesList;
+import org.eclipse.mdm.protobuf.Mdm.ScalarType;
+import org.eclipse.mdm.protobuf.Mdm.ShortArray;
+import org.eclipse.mdm.protobuf.Mdm.StringArray;
+import org.junit.Test;
+
+import com.google.common.primitives.Doubles;
+import com.google.common.primitives.Floats;
+import com.google.common.primitives.Ints;
+import com.google.common.primitives.Longs;
+import com.google.protobuf.ByteString;
+import com.google.protobuf.Timestamp;
+
+public class PreviewHelperTest {
+
+	private static final DoubleComparator COMP = new DoubleComparator(1.0E-6);
+
+	private PreviewHelper helper = new PreviewHelper();
+
+	private final List<String> stringValues = Arrays.asList("one", "two", "three", "four", "five", "six");
+	private final MeasuredValues mv6Strings = MeasuredValues.newBuilder()
+			.setStringArray(StringArray.newBuilder().addAllValues(stringValues)).setLength(stringValues.size()).build();
+
+	private final ByteString byteValues = ByteString
+			.copyFrom(new byte[] { (byte) 1, (byte) 2, (byte) 3, (byte) 1, (byte) 4, (byte) 2 });
+	private final MeasuredValues mv6Bytes = MeasuredValues.newBuilder()
+			.setByteArray(ByteArray.newBuilder().setValues(byteValues)).setLength(byteValues.size()).build();
+
+	private final List<Integer> shortValues = Ints.asList(1, 2, 3, 1, 4, 2);
+	private final MeasuredValues mv6Shorts = MeasuredValues.newBuilder()
+			.setShortArray(ShortArray.newBuilder().addAllValues(shortValues)).setLength(shortValues.size()).build();
+
+	private final List<Integer> intValues = Ints.asList(1, 2, 3, 1, 4, 2);
+	private final MeasuredValues mv6Ints = MeasuredValues.newBuilder()
+			.setIntegerArray(IntegerArray.newBuilder().addAllValues(intValues)).setLength(intValues.size()).build();
+
+	private final List<Long> longValues = Longs.asList(1L, 2L, 3L, 1L, 4L, 2L);
+	private final MeasuredValues mv6Longs = MeasuredValues.newBuilder()
+			.setLongArray(LongArray.newBuilder().addAllValues(longValues)).setLength(longValues.size()).build();
+
+	private final List<Float> floatValues = Floats.asList(1.0f, 2.0f, 3.0f, 1.1f, 4.4f, 2.2f);
+	private final MeasuredValues mv6Floats = MeasuredValues.newBuilder()
+			.setFloatArray(FloatArray.newBuilder().addAllValues(floatValues)).setLength(floatValues.size()).build();
+
+	private final List<Double> doubleValues = Doubles.asList(1.0, 2.0, 3.0, 1.1, 4.4, 2.2);
+	private final MeasuredValues mv6Doubles = MeasuredValues.newBuilder()
+			.setDoubleArray(DoubleArray.newBuilder().addAllValues(doubleValues)).setLength(doubleValues.size()).build();
+
+	@Test
+	public void testInvalidNumberOfChunks() {
+
+		assertThatThrownBy(() -> helper.calculatePreview(mv6Doubles, 0)).isInstanceOf(PreviewException.class)
+				.hasMessage("Number of chunks requested must be positive!");
+
+		assertThatThrownBy(() -> helper.calculatePreview(mv6Doubles, -1)).isInstanceOf(PreviewException.class)
+				.hasMessage("Number of chunks requested must be positive!");
+	}
+
+	@Test
+	public void testChunkSizeInteger() {
+		PreviewValuesList pv = helper.calculatePreview(mv6Doubles, 2).build();
+		assertThat(pv.getAvgCount()).isEqualTo(1);
+		assertThat(pv.getAvg(0).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(2.0,
+				2.56666666666);
+	}
+
+	@Test
+	public void testChunkSizeFloat() {
+		PreviewValuesList pv = helper.calculatePreview(mv6Doubles, 4).build();
+
+		assertThat(pv.getMinCount()).isEqualTo(1);
+		assertThat(pv.getMaxCount()).isEqualTo(1);
+		assertThat(pv.getAvgCount()).isEqualTo(1);
+
+		assertThat(pv.getMin(0).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(1.0, 3.0,
+				1.1, 2.2);
+		assertThat(pv.getMax(0).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(2.0, 3.0,
+				4.4, 2.2);
+		assertThat(pv.getAvg(0).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(1.5, 3.0,
+				2.75, 2.2);
+	}
+
+	@Test
+	public void testChunkSizeFloat2() {
+		PreviewValuesList pv = helper.calculatePreview(mv6Doubles, 5).build();
+
+		assertThat(pv.getMinCount()).isEqualTo(1);
+		assertThat(pv.getMaxCount()).isEqualTo(1);
+		assertThat(pv.getAvgCount()).isEqualTo(1);
+
+		assertThat(pv.getMin(0).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(1.0, 2.0,
+				1.1, 4.4, 2.2);
+		assertThat(pv.getMax(0).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(1.0, 2.0,
+				3.0, 4.4, 2.2);
+		assertThat(pv.getAvg(0).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(1.0, 2.0,
+				2.05, 4.4, 2.2);
+	}
+
+	@Test
+	public void testNumberOfChunksEqualsNumberOfValues() {
+		PreviewValuesList pv = helper.calculatePreview(mv6Doubles, 6).build();
+
+		assertThat(pv.getMinCount()).isEqualTo(1);
+		assertThat(pv.getMaxCount()).isEqualTo(1);
+		assertThat(pv.getAvgCount()).isEqualTo(1);
+
+		assertThat(pv.getMin(0).getDoubleArray().getValuesList()).usingElementComparator(COMP).isEqualTo(doubleValues);
+		assertThat(pv.getMax(0).getDoubleArray().getValuesList()).usingElementComparator(COMP).isEqualTo(doubleValues);
+		assertThat(pv.getAvg(0).getDoubleArray().getValuesList()).usingElementComparator(COMP).isEqualTo(doubleValues);
+	}
+
+	@Test
+	public void testNumberOfChunksLargerThanNumberOfValues() {
+		PreviewValuesList pv = helper.calculatePreview(mv6Doubles, 7).build();
+
+		assertThat(pv.getMinCount()).isEqualTo(1);
+		assertThat(pv.getMaxCount()).isEqualTo(1);
+		assertThat(pv.getAvgCount()).isEqualTo(1);
+
+		assertThat(pv.getMin(0).getDoubleArray().getValuesList()).usingElementComparator(COMP).isEqualTo(doubleValues);
+		assertThat(pv.getMax(0).getDoubleArray().getValuesList()).usingElementComparator(COMP).isEqualTo(doubleValues);
+		assertThat(pv.getAvg(0).getDoubleArray().getValuesList()).usingElementComparator(COMP).isEqualTo(doubleValues);
+	}
+
+	@Test
+	public void testMultipleChannels() {
+		PreviewValuesList pv = helper.calculatePreview(
+				Arrays.asList(mv6Bytes, mv6Shorts, mv6Ints, mv6Longs, mv6Floats, mv6Doubles, mv6Strings), 2);
+
+		assertThat(pv.getMinCount()).isEqualTo(7);
+		assertThat(pv.getMaxCount()).isEqualTo(7);
+		assertThat(pv.getAvgCount()).isEqualTo(7);
+
+		assertThat(pv.getMin(0).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(1.0,
+				1.0);
+		assertThat(pv.getMax(0).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(3.0,
+				4.0);
+		assertThat(pv.getAvg(0).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(2.0,
+				2.33333333333);
+
+		assertThat(pv.getMin(1).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(1.0,
+				1.0);
+		assertThat(pv.getMax(1).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(3.0,
+				4.0);
+		assertThat(pv.getAvg(1).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(2.0,
+				2.33333333333);
+
+		assertThat(pv.getMin(2).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(1.0,
+				1.0);
+		assertThat(pv.getMax(2).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(3.0,
+				4.0);
+		assertThat(pv.getAvg(2).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(2.0,
+				2.33333333333);
+
+		assertThat(pv.getMin(3).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(1.0,
+				1.0);
+		assertThat(pv.getMax(3).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(3.0,
+				4.0);
+		assertThat(pv.getAvg(3).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(2.0,
+				2.33333333333);
+
+		assertThat(pv.getMin(4).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(1.0,
+				1.1);
+		assertThat(pv.getMax(4).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(3.0,
+				4.4);
+		assertThat(pv.getAvg(4).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(2.0,
+				2.56666666666);
+
+		assertThat(pv.getMin(5).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(1.0,
+				1.1);
+		assertThat(pv.getMax(5).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(3.0,
+				4.4);
+		assertThat(pv.getAvg(5).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(2.0,
+				2.56666666666);
+
+		assertThat(pv.getMin(6)).isEqualTo(MeasuredValues.newBuilder().setScalarType(ScalarType.DOUBLE).build());
+		assertThat(pv.getMax(6)).isEqualTo(MeasuredValues.newBuilder().setScalarType(ScalarType.DOUBLE).build());
+		assertThat(pv.getAvg(6)).isEqualTo(MeasuredValues.newBuilder().setScalarType(ScalarType.DOUBLE).build());
+	}
+
+	@Test
+	public void testFlags() {
+		MeasuredValues mv6IntsWithFlags = mv6Ints.toBuilder()
+				.addAllFlags(Arrays.asList(false, true, true, true, false, false)).build();
+
+		// 1, 2, 3, 1, 4, 2
+		PreviewValuesList pv = helper.calculatePreview(mv6IntsWithFlags, 2).build();
+		assertThat(pv.getAvgCount()).isEqualTo(1);
+		assertThat(pv.getAvg(0).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(2.5,
+				1.0);
+		assertThat(pv.getMin(0).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(2.0,
+				1.0);
+		assertThat(pv.getMax(0).getDoubleArray().getValuesList()).usingElementComparator(COMP).containsExactly(3.0,
+				1.0);
+	}
+
+	@Test
+	public void testTimestamps() {
+
+		final List<Timestamp> dateValues = Arrays.asList(toTimestamp("2019-02-01T06:30:00.500"),
+				toTimestamp("2019-02-02T06:30:00.500"), toTimestamp("2019-02-03T06:30:00.500"),
+				toTimestamp("2019-04-01T06:10:00.100"), toTimestamp("2019-04-01T07:40:00.200"),
+				toTimestamp("2019-04-01T09:10:00.300"));
+		final MeasuredValues mv6Dates = MeasuredValues.newBuilder()
+				.setDateArray(DateArray.newBuilder().addAllValues(dateValues)).setLength(dateValues.size()).build();
+
+		PreviewValuesList pv = helper.calculatePreview(mv6Dates, 2).build();
+		assertThat(pv.getAvgCount()).isEqualTo(1);
+		assertThat(pv.getMin(0).getDateArray().getValuesList()).containsExactly(toTimestamp("2019-02-01T06:30:00.500"),
+				toTimestamp("2019-04-01T06:10:00.100"));
+		assertThat(pv.getMax(0).getDateArray().getValuesList()).containsExactly(toTimestamp("2019-02-03T06:30:00.500"),
+				toTimestamp("2019-04-01T09:10:00.300"));
+		assertThat(pv.getAvg(0).getDateArray().getValuesList()).containsExactly(toTimestamp("2019-02-02T06:30:00.500"),
+				toTimestamp("2019-04-01T07:40:00.200"));
+	}
+
+	@Test
+	public void testTimestampFlags() {
+		final List<Timestamp> dateValues = Arrays.asList(toTimestamp("2019-02-01T06:30:00.500"),
+				toTimestamp("2019-02-02T06:30:00.500"), toTimestamp("2019-02-03T06:30:00.500"),
+				toTimestamp("2019-04-01T06:10:00.100"), toTimestamp("2019-04-01T07:40:00.200"),
+				toTimestamp("2019-04-01T09:10:00.300"));
+		final MeasuredValues mv6Dates = MeasuredValues.newBuilder()
+				.setDateArray(DateArray.newBuilder().addAllValues(dateValues)).setLength(dateValues.size())
+				.addAllFlags(Arrays.asList(false, true, true, true, false, false)).build();
+
+		PreviewValuesList pv = helper.calculatePreview(mv6Dates, 2).build();
+		assertThat(pv.getAvgCount()).isEqualTo(1);
+		assertThat(pv.getMin(0).getDateArray().getValuesList()).containsExactly(toTimestamp("2019-02-02T06:30:00.500"),
+				toTimestamp("2019-04-01T06:10:00.100"));
+		assertThat(pv.getMax(0).getDateArray().getValuesList()).containsExactly(toTimestamp("2019-02-03T06:30:00.500"),
+				toTimestamp("2019-04-01T06:10:00.100"));
+		assertThat(pv.getAvg(0).getDateArray().getValuesList()).containsExactly(toTimestamp("2019-02-02T18:30:00.500"),
+				toTimestamp("2019-04-01T06:10:00.100"));
+	}
+
+	private Timestamp toTimestamp(String datetime) {
+		Instant instant = LocalDateTime.parse(datetime).toInstant(ZoneOffset.UTC);
+
+		return Timestamp.newBuilder().setSeconds(instant.getEpochSecond()).setNanos(instant.getNano()).build();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/utils/ProtobufConverterTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/utils/ProtobufConverterTest.java
new file mode 100644
index 0000000..9d8c3b7
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/utils/ProtobufConverterTest.java
@@ -0,0 +1,152 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.businessobjects.utils;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.anyList;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+
+import org.eclipse.mdm.api.base.massdata.ReadRequest;
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.Unit;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.protobuf.Mdm;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ProtobufConverterTest {
+
+	ChannelGroup channelGroup = mock(ChannelGroup.class);
+	Channel channel1 = mock(Channel.class);
+	Channel channel2 = mock(Channel.class);
+	Unit unit1 = mock(Unit.class);
+	Unit unit2 = mock(Unit.class);
+	EntityManager em = mock(EntityManager.class);
+	ApplicationContext context = mock(ApplicationContext.class);
+
+	@Before
+	public void init() {
+		when(channelGroup.getID()).thenReturn("1");
+		when(unit1.getID()).thenReturn("1");
+		when(unit2.getID()).thenReturn("2");
+		when(channel1.getID()).thenReturn("1");
+		when(channel1.getUnit()).thenReturn(unit1);
+		when(channel2.getID()).thenReturn("2");
+		when(channel2.getUnit()).thenReturn(unit2);
+
+		when(em.load(eq(ChannelGroup.class), anyString())).thenReturn(channelGroup);
+		when(em.load(eq(Channel.class), anyList())).thenReturn(Arrays.asList(channel1, channel2));
+		when(em.load(eq(Unit.class), anyList())).thenReturn(Arrays.asList(unit1, unit2));
+
+		when(context.getEntityManager()).thenReturn(Optional.of(em));
+	}
+
+	@Test
+	public void testRequestChannelWithDefaultUnit() {
+		ReadRequest readRequest = ProtobufConverter.convert(context,
+				Mdm.ReadRequest.newBuilder().setChannelGroupId("1").addChannelIds("1").build());
+
+		Map<Channel, Unit> channels = new HashMap<>();
+		channels.put(channel1, unit1);
+		assertThat(readRequest).hasFieldOrPropertyWithValue("channelGroup", channelGroup)
+				.hasFieldOrPropertyWithValue("channels", channels)
+				.hasFieldOrPropertyWithValue("loadAllChannels", false);
+	}
+
+	@Test
+	public void testRequestChannelWithExplicitUnit() {
+		ReadRequest channelWithUnit = ProtobufConverter.convert(context,
+				Mdm.ReadRequest.newBuilder().setChannelGroupId("1").addChannelIds("1").addUnitIds("1").build());
+
+		Map<Channel, Unit> channels = new HashMap<>();
+		channels.put(channel1, unit1);
+		assertThat(channelWithUnit).hasFieldOrPropertyWithValue("channelGroup", channelGroup)
+				.hasFieldOrPropertyWithValue("channels", channels)
+				.hasFieldOrPropertyWithValue("loadAllChannels", false);
+	}
+
+	@Test
+	public void testRequestAllChannelsWithDefaultUnits() {
+		ReadRequest allChannelWithoutUnits = ProtobufConverter.convert(context,
+				Mdm.ReadRequest.newBuilder().setChannelGroupId("1").build());
+
+		assertThat(allChannelWithoutUnits).hasFieldOrPropertyWithValue("channelGroup", channelGroup)
+				.hasFieldOrPropertyWithValue("channels", Collections.emptyMap())
+				.hasFieldOrPropertyWithValue("loadAllChannels", true);
+	}
+
+	@Test
+	public void testRequestAllChannelsWithExplicitUnits() {
+		ReadRequest allChannelWithUnits = ProtobufConverter.convert(context, Mdm.ReadRequest.newBuilder()
+				.setChannelGroupId("1").addChannelIds("1").addChannelIds("2").addUnitIds("2").addUnitIds("1").build());
+
+		Map<Channel, Unit> channels = new HashMap<>();
+		channels.put(channel1, unit2);
+		channels.put(channel2, unit1);
+		assertThat(allChannelWithUnits).hasFieldOrPropertyWithValue("channelGroup", channelGroup)
+				.hasFieldOrPropertyWithValue("channels", channels)
+				.hasFieldOrPropertyWithValue("loadAllChannels", false);
+	}
+
+	@Test
+	public void testSuperfluousUnitsAreIgnored() {
+		ReadRequest allChannelWithUnits = ProtobufConverter.convert(context, Mdm.ReadRequest.newBuilder()
+				.setChannelGroupId("1").addChannelIds("1").addUnitIds("2").addUnitIds("1").build());
+
+		Map<Channel, Unit> channels = new HashMap<>();
+		channels.put(channel1, unit2);
+		assertThat(allChannelWithUnits).hasFieldOrPropertyWithValue("channelGroup", channelGroup)
+				.hasFieldOrPropertyWithValue("channels", channels)
+				.hasFieldOrPropertyWithValue("loadAllChannels", false);
+	}
+
+	@Test
+	public void testLessUnitsThenChannels() {
+		ReadRequest allChannelWithUnits = ProtobufConverter.convert(context, Mdm.ReadRequest.newBuilder()
+				.setChannelGroupId("1").addChannelIds("1").addChannelIds("2").addUnitIds("2").build());
+
+		Map<Channel, Unit> channels = new HashMap<>();
+		channels.put(channel1, unit2);
+		channels.put(channel2, unit2); // no unitId was supplied -> default unit
+		assertThat(allChannelWithUnits).hasFieldOrPropertyWithValue("channelGroup", channelGroup)
+				.hasFieldOrPropertyWithValue("channels", channels)
+				.hasFieldOrPropertyWithValue("loadAllChannels", false);
+	}
+
+	@Test
+	public void testEmptyStringAsUnitIdIsInterpretedAsDefaultUnit() {
+		ReadRequest allChannelWithUnits = ProtobufConverter.convert(context, Mdm.ReadRequest.newBuilder()
+				.setChannelGroupId("1").addChannelIds("1").addChannelIds("2").addUnitIds("").addUnitIds("1").build());
+
+		Map<Channel, Unit> channels = new HashMap<>();
+		channels.put(channel1, unit1); // empty unitId was supplied -> default unit
+		channels.put(channel2, unit1);
+		assertThat(allChannelWithUnits).hasFieldOrPropertyWithValue("channelGroup", channelGroup)
+				.hasFieldOrPropertyWithValue("channels", channels)
+				.hasFieldOrPropertyWithValue("loadAllChannels", false);
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/utils/ReflectUtilTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/utils/ReflectUtilTest.java
new file mode 100644
index 0000000..3204c8d
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/utils/ReflectUtilTest.java
@@ -0,0 +1,117 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.businessobjects.utils;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.Test;
+
+public class ReflectUtilTest {
+
+	@Test
+	public void testApplyValueBoolean() throws Exception {
+		assertThat(ReflectUtil.isAssignableTo(Boolean.class, boolean.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(boolean.class, Boolean.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(boolean.class, boolean.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(Boolean.class, Boolean.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(String.class, Boolean.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(Boolean.class, String.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(boolean.class, String.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(String.class, boolean.class)).isFalse();
+	}
+
+	@Test
+	public void testApplyValueByte() throws Exception {
+		assertThat(ReflectUtil.isAssignableTo(Byte.class, byte.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(byte.class, Byte.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(byte.class, byte.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(Byte.class, Byte.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(String.class, Byte.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(Byte.class, String.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(byte.class, String.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(String.class, byte.class)).isFalse();
+	}
+
+	@Test
+	public void testApplyValueShort() throws Exception {
+		assertThat(ReflectUtil.isAssignableTo(Short.class, short.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(short.class, Short.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(short.class, short.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(Short.class, Short.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(String.class, Short.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(Short.class, String.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(short.class, String.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(String.class, short.class)).isFalse();
+	}
+
+	@Test
+	public void testApplyValueInt() throws Exception {
+		assertThat(ReflectUtil.isAssignableTo(Integer.class, int.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(int.class, Integer.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(int.class, int.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(Integer.class, Integer.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(String.class, Integer.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(Integer.class, String.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(int.class, String.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(String.class, int.class)).isFalse();
+	}
+
+	@Test
+	public void testApplyValueLong() throws Exception {
+		assertThat(ReflectUtil.isAssignableTo(Long.class, long.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(long.class, Long.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(long.class, long.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(Long.class, Long.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(String.class, Long.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(Long.class, String.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(long.class, String.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(String.class, long.class)).isFalse();
+	}
+
+	@Test
+	public void testApplyValueFloat() throws Exception {
+		assertThat(ReflectUtil.isAssignableTo(Float.class, float.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(float.class, Float.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(float.class, float.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(Float.class, Float.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(String.class, Float.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(Float.class, String.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(float.class, String.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(String.class, float.class)).isFalse();
+	}
+
+	@Test
+	public void testApplyValueDouble() throws Exception {
+		assertThat(ReflectUtil.isAssignableTo(Double.class, double.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(double.class, Double.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(double.class, double.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(Double.class, Double.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(String.class, Double.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(Double.class, String.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(double.class, String.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(String.class, double.class)).isFalse();
+	}
+
+	@Test
+	public void testApplyValueChar() throws Exception {
+		assertThat(ReflectUtil.isAssignableTo(Character.class, char.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(char.class, Character.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(char.class, char.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(Character.class, Character.class)).isTrue();
+		assertThat(ReflectUtil.isAssignableTo(String.class, Character.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(Character.class, String.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(char.class, String.class)).isFalse();
+		assertThat(ReflectUtil.isAssignableTo(String.class, char.class)).isFalse();
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/utils/SerializerTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/utils/SerializerTest.java
new file mode 100644
index 0000000..64516aa
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/businessobjects/utils/SerializerTest.java
@@ -0,0 +1,126 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.businessobjects.utils;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+import java.util.Arrays;
+import java.util.Map;
+
+import org.eclipse.mdm.api.base.model.FileLink;
+import org.eclipse.mdm.api.base.model.MimeType;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableMap;
+
+public class SerializerTest {
+
+	@Test
+	public void testApplyValueBoolean() throws Exception {
+
+		assertThat(Serializer.deserializeValue(ValueType.BOOLEAN, "1")).isEqualTo(Boolean.TRUE);
+		assertThat(Serializer.deserializeValue(ValueType.BOOLEAN, 1)).isEqualTo(Boolean.TRUE);
+		assertThat(Serializer.deserializeValue(ValueType.BOOLEAN, "0")).isEqualTo(Boolean.FALSE);
+		assertThat(Serializer.deserializeValue(ValueType.BOOLEAN, 0)).isEqualTo(Boolean.FALSE);
+		assertThat(Serializer.deserializeValue(ValueType.BOOLEAN, "2")).isEqualTo(Boolean.FALSE);
+		assertThat(Serializer.deserializeValue(ValueType.BOOLEAN, 2)).isEqualTo(Boolean.FALSE);
+	}
+
+	@Test
+	public void testApplyValueByte() throws Exception {
+
+		assertThat(Serializer.deserializeValue(ValueType.BYTE, "42")).isEqualTo((byte) 42);
+		assertThat(Serializer.deserializeValue(ValueType.BYTE, 42)).isEqualTo((byte) 42);
+		assertThat(Serializer.deserializeValue(ValueType.BYTE, (byte) 42)).isEqualTo((byte) 42);
+	}
+
+	@Test
+	public void testApplyValueShort() throws Exception {
+
+		assertThat(Serializer.deserializeValue(ValueType.SHORT, "42")).isEqualTo((short) 42);
+		assertThat(Serializer.deserializeValue(ValueType.SHORT, 42)).isEqualTo((short) 42);
+		assertThat(Serializer.deserializeValue(ValueType.SHORT, (short) 42)).isEqualTo((short) 42);
+	}
+
+	@Test
+	public void testApplyValueInt() throws Exception {
+
+		assertThat(Serializer.deserializeValue(ValueType.INTEGER, "42")).isEqualTo(42);
+		assertThat(Serializer.deserializeValue(ValueType.INTEGER, 42)).isEqualTo(42);
+		assertThat(Serializer.deserializeValue(ValueType.INTEGER, 42)).isEqualTo(42);
+	}
+
+	@Test
+	public void testApplyValueLong() throws Exception {
+
+		assertThat(Serializer.deserializeValue(ValueType.LONG, "42")).isEqualTo(42L);
+		assertThat(Serializer.deserializeValue(ValueType.LONG, 42)).isEqualTo(42L);
+		assertThat(Serializer.deserializeValue(ValueType.LONG, 42L)).isEqualTo(42L);
+	}
+
+	@Test
+	public void testApplyValueFloat() throws Exception {
+
+		assertThat(Serializer.deserializeValue(ValueType.FLOAT, "42.1")).isEqualTo(42.1f);
+		assertThat(Serializer.deserializeValue(ValueType.FLOAT, 42.1)).isEqualTo(42.1f);
+		assertThat(Serializer.deserializeValue(ValueType.FLOAT, 42)).isEqualTo(42.0f);
+	}
+
+	@Test
+	public void testApplyValueDouble() throws Exception {
+
+		assertThat(Serializer.deserializeValue(ValueType.DOUBLE, "42.1")).isEqualTo(42.1);
+		assertThat(Serializer.deserializeValue(ValueType.DOUBLE, 42.1)).isEqualTo(42.1);
+		assertThat(Serializer.deserializeValue(ValueType.DOUBLE, 42)).isEqualTo(42.0);
+	}
+
+	@Test
+	public void testApplyValueDate() throws Exception {
+
+		assertThat(Serializer.deserializeValue(ValueType.DATE, "2018-01-02T12:13:14Z"))
+				.isEqualTo(LocalDateTime.of(2018, 01, 02, 12, 13, 14));
+		assertThat(Serializer.deserializeValue(ValueType.DATE, 123456789L))
+				.isEqualTo(LocalDateTime.ofEpochSecond(123456789L, 0, ZoneOffset.UTC));
+	}
+
+	@Test
+	public void testDeserializeFileLink() throws Exception {
+
+		FileLink link1 = FileLink.newRemote("root/fileLink.pdf", new MimeType("application/pdf"), "desc");
+
+		Map<String, String> map = ImmutableMap.of("remotePath", "root/fileLink.pdf", "mimeType", "application/pdf",
+				"description", "desc");
+
+		assertThat(Serializer.deserializeValue(ValueType.FILE_LINK, map)).isEqualTo(link1);
+	}
+
+	@Test
+	public void testDeserializeFileLinkSequence() throws Exception {
+
+		FileLink link1 = FileLink.newRemote("root/fileLink1.pdf", new MimeType("application/pdf"), "desc1");
+		FileLink link2 = FileLink.newRemote("root/image.jpeg", new MimeType("application/jpeg"), "desc2");
+
+		Map<String, String> map1 = ImmutableMap.of("remotePath", "root/fileLink1.pdf", "mimeType", "application/pdf",
+				"description", "desc1");
+
+		Map<String, String> map2 = ImmutableMap.of("remotePath", "root/image.jpeg", "mimeType", "application/jpeg",
+				"description", "desc2");
+
+		assertThat((FileLink[]) Serializer.deserializeValue(ValueType.FILE_LINK_SEQUENCE, Arrays.asList(map1, map2)))
+				.containsExactly(link1, link2);
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/query/boundary/QueryServiceTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/query/boundary/QueryServiceTest.java
new file mode 100644
index 0000000..d61b38b
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/query/boundary/QueryServiceTest.java
@@ -0,0 +1,307 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.query.boundary;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Optional;
+
+import org.assertj.core.groups.Tuple;
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.ModelManager;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.base.query.Query;
+import org.eclipse.mdm.api.base.query.Record;
+import org.eclipse.mdm.api.base.query.Result;
+import org.eclipse.mdm.api.base.search.SearchService;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.api.dflt.model.Pool;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+import org.eclipse.mdm.connector.boundary.ConnectorServiceException;
+import org.eclipse.mdm.query.entity.Column;
+import org.eclipse.mdm.query.entity.QueryRequest;
+import org.eclipse.mdm.query.entity.Row;
+import org.eclipse.mdm.query.entity.SourceFilter;
+import org.eclipse.mdm.query.entity.SuggestionRequest;
+import org.mockito.Mockito;
+
+public class QueryServiceTest {
+
+	@org.junit.Test
+	public void testQuery() throws DataAccessException {
+
+		ApplicationContext context = mockContext();
+		ConnectorService connectorService = Mockito.mock(ConnectorService.class);
+		when(connectorService.getContextByName("env1")).thenReturn(context);
+
+		QueryService queryService = new QueryService();
+		queryService.connectorService = connectorService;
+
+		SourceFilter filter = new SourceFilter();
+		filter.setSourceName("env1");
+		filter.setFilter("Test.Name lk \"*\"");
+
+		QueryRequest request = new QueryRequest();
+		request.setResultType("Test");
+		request.setColumns(Arrays.asList("Test.Id", "Test.Name"));
+		request.setFilters(Arrays.asList(filter));
+
+		Row expectedRow = new Row();
+		expectedRow.setSource("env1");
+		expectedRow.setType("Test");
+		expectedRow.setId("id1");
+		expectedRow.addColumns(
+				Arrays.asList(new Column("Test", "Id", "id1", null), new Column("Test", "Name", "Test-Name", null)));
+
+		assertThat(queryService.queryRows(request)).contains(expectedRow);
+	}
+
+	@org.junit.Test
+	public void testQuerySingleQuote() throws DataAccessException {
+
+		ApplicationContext context = mockContext();
+		ConnectorService connectorService = Mockito.mock(ConnectorService.class);
+		when(connectorService.getContextByName("env1")).thenReturn(context);
+
+		QueryService queryService = new QueryService();
+		queryService.connectorService = connectorService;
+
+		SourceFilter filter = new SourceFilter();
+		filter.setSourceName("env1");
+		filter.setFilter("Test.Name lk '*'");
+
+		QueryRequest request = new QueryRequest();
+		request.setResultType("Test");
+		request.setColumns(Arrays.asList("Test.Id", "Test.Name"));
+		request.setFilters(Arrays.asList(filter));
+
+		Row expectedRow = new Row();
+		expectedRow.setSource("env1");
+		expectedRow.setType("Test");
+		expectedRow.setId("id1");
+		expectedRow.addColumns(
+				Arrays.asList(new Column("Test", "Id", "id1", null), new Column("Test", "Name", "Test-Name", null)));
+
+		assertThat(queryService.queryRows(request)).contains(expectedRow);
+	}
+
+	@org.junit.Test
+	public void testQueryMissingEnvironmentShouldByIgnored() throws DataAccessException {
+
+		ApplicationContext context = mockContext();
+		ConnectorService connectorService = Mockito.mock(ConnectorService.class);
+		when(connectorService.getContextByName("env1")).thenReturn(context);
+		doThrow(ConnectorServiceException.class).when(connectorService).getContextByName("env2");
+
+		QueryService queryService = new QueryService();
+		queryService.connectorService = connectorService;
+
+		SourceFilter filterEnv1 = new SourceFilter();
+		filterEnv1.setSourceName("env1");
+		filterEnv1.setFilter("Test.Name lk '*'");
+
+		SourceFilter filterEnv2 = new SourceFilter();
+		filterEnv2.setSourceName("env2");
+		filterEnv2.setFilter("Test.Name lk '*'");
+
+		QueryRequest request = new QueryRequest();
+		request.setResultType("Test");
+		request.setColumns(Arrays.asList("Test.Id", "Test.Name", "Pool.Name"));
+		request.setFilters(Arrays.asList(filterEnv1, filterEnv2));
+
+		Row expectedRow = new Row();
+		expectedRow.setSource("env1");
+		expectedRow.setType("Test");
+		expectedRow.setId("id1");
+		expectedRow.addColumns(
+				Arrays.asList(new Column("Test", "Id", "id1", null), new Column("Test", "Name", "Test-Name", null)));
+
+		assertThat(queryService.queryRows(request)).contains(expectedRow);
+	}
+
+	@org.junit.Test
+	public void testQueryMissingEntitiesShouldBeIgnored() throws DataAccessException {
+
+		ApplicationContext context1 = mockContext();
+		ApplicationContext context2 = mockContext();
+		ConnectorService connectorService = Mockito.mock(ConnectorService.class);
+		when(connectorService.getContextByName("env1")).thenReturn(context1);
+		when(connectorService.getContextByName("env2")).thenReturn(context2);
+
+		EntityType type = mockEntity("env2", "Test");
+		EntityType pool = mockEntity("env2", "Pool");
+
+		when(context2.getModelManager().get().getEntityType(Test.class)).thenReturn(type);
+		when(context2.getModelManager().get().getEntityType("Test")).thenReturn(type);
+		when(context2.getModelManager().get().getEntityType(Pool.class)).thenReturn(pool);
+		when(context2.getModelManager().get().getEntityType("Pool")).thenReturn(pool);
+
+		SearchService ss = mock(SearchService.class);
+		EntityType test = context2.getModelManager().get().getEntityType(Test.class);
+		when(ss.listEntityTypes(Mockito.eq(Test.class))).thenReturn(Arrays.asList(test, pool));
+		when(ss.listSearchableTypes()).thenReturn(Arrays.asList(Test.class));
+
+		Record recordTest = new Record(context2.getModelManager().get().getEntityType(Test.class));
+		recordTest.addValue(ValueType.STRING.create("Id", "id1"));
+		recordTest.addValue(ValueType.STRING.create("Name", "Test-Name"));
+
+		Record recordPool = new Record(context2.getModelManager().get().getEntityType(Pool.class));
+		recordPool.addValue(ValueType.STRING.create("Name", "Pool-Name"));
+		Result result = new Result();
+		result.addRecord(recordPool);
+		result.addRecord(recordTest);
+		when(context2.getSearchService().get().fetchResults(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any()))
+				.thenReturn(Arrays.asList(result));
+
+		QueryService queryService = new QueryService();
+		queryService.connectorService = connectorService;
+
+		SourceFilter filterEnv1 = new SourceFilter();
+		filterEnv1.setSourceName("env1");
+		filterEnv1.setFilter("Test.Name lk '*'");
+
+		SourceFilter filterEnv2 = new SourceFilter();
+		filterEnv2.setSourceName("env2");
+		filterEnv2.setFilter("Test.Name lk '*'");
+
+		QueryRequest request = new QueryRequest();
+		request.setResultType("Test");
+		request.setColumns(Arrays.asList("Test.Id", "Test.Name", "Pool.Name"));
+		request.setFilters(Arrays.asList(filterEnv1, filterEnv2));
+
+		Row expectedRowEnv1 = new Row();
+		expectedRowEnv1.setSource("env1");
+		expectedRowEnv1.setType("Test");
+		expectedRowEnv1.setId("id1");
+		expectedRowEnv1.addColumns(
+				Arrays.asList(new Column("Test", "Id", "id1", null), new Column("Test", "Name", "Test-Name", null)));
+
+		Row expectedRowEnv2 = new Row();
+		expectedRowEnv2.setSource("env2");
+		expectedRowEnv2.setType("Test");
+		expectedRowEnv2.setId("id1");
+		expectedRowEnv2.addColumns(Arrays.asList(new Column("Test", "Id", "id1", null),
+				new Column("Test", "Name", "Test-Name", null), new Column("Pool", "Name", "Pool-Name", null)));
+
+		List<Row> list = queryService.queryRows(request);
+
+		assertThat(list).extracting("source", "type", "id").containsOnly(new Tuple("env1", "Test", "id1"),
+				new Tuple("env2", "Test", "id1"));
+
+		assertThat(list.get(0).getColumns()).containsOnlyElementsOf(expectedRowEnv1.getColumns());
+
+		assertThat(list.get(1).getColumns()).containsOnlyElementsOf(expectedRowEnv2.getColumns());
+
+	}
+
+	public static EntityType mockEntity(String sourceName, String name) {
+		Attribute attrId = mock(Attribute.class);
+		when(attrId.getName()).thenReturn("Id");
+		when(attrId.getValueType()).thenReturn(ValueType.LONG);
+
+		Attribute attrName = mock(Attribute.class);
+		when(attrName.getName()).thenReturn("Name");
+		when(attrName.getValueType()).thenReturn(ValueType.STRING);
+
+		EntityType entity = mock(EntityType.class);
+		when(entity.getSourceName()).thenReturn(sourceName);
+		when(entity.getName()).thenReturn(name);
+		when(entity.getAttributes()).thenReturn(Arrays.asList(attrId, attrName));
+		when(entity.getAttribute("Name")).thenReturn(attrName);
+		when(entity.getNameAttribute()).thenReturn(attrName);
+		when(entity.getIDAttribute()).thenReturn(attrId);
+
+		when(attrId.getEntityType()).thenReturn(entity);
+		when(attrName.getEntityType()).thenReturn(entity);
+
+		return entity;
+	}
+
+	public static ApplicationContext mockContext() {
+		ModelManager mm = mockModelManager();
+		EntityManager em = Mockito.mock(EntityManager.class);
+
+		SearchService ss = mock(SearchService.class);
+		EntityType type = mm.getEntityType(Test.class);
+		when(ss.listEntityTypes(Mockito.eq(Test.class))).thenReturn(Arrays.asList(type));
+		when(ss.listSearchableTypes()).thenReturn(Arrays.asList(Test.class));
+
+		Record record = new Record(mm.getEntityType(Test.class));
+		record.addValue(ValueType.STRING.create("Id", "id1"));
+		record.addValue(ValueType.STRING.create("Name", "Test-Name"));
+		Result result = new Result();
+		result.addRecord(record);
+		when(ss.fetchResults(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any()))
+				.thenReturn(Arrays.asList(result));
+
+		ApplicationContext context = Mockito.mock(ApplicationContext.class);
+		when(context.getEntityManager()).thenReturn(Optional.of(em));
+		when(context.getModelManager()).thenReturn(Optional.of(mm));
+		when(context.getSearchService()).thenReturn(Optional.of(ss));
+		return context;
+	}
+
+	public static ModelManager mockModelManager() {
+		EntityType type = mockEntity("env1", "Test");
+
+		ModelManager mm = mock(ModelManager.class);
+		when(mm.getEntityType(Test.class)).thenReturn(type);
+		when(mm.getEntityType("Test")).thenReturn(type);
+
+		return mm;
+	}
+
+	@org.junit.Test
+	public void testGetSuggestions() throws Exception {
+		ApplicationContext context = mockContext();
+
+		Record record = new Record(context.getModelManager().get().getEntityType(Test.class));
+		record.addValue(ValueType.LONG.create("Id", 1L));
+		record.addValue(ValueType.STRING.create("Name", "Test-Name"));
+		Result result = new Result();
+		result.addRecord(record);
+
+		Query query = mock(Query.class);
+		when(query.select(Mockito.any(Attribute.class))).thenReturn(query);
+		when(query.group(Mockito.any(Attribute.class))).thenReturn(query);
+		when(query.fetch()).thenReturn(Arrays.asList(result));
+
+		org.eclipse.mdm.api.base.query.QueryService qs = mock(org.eclipse.mdm.api.base.query.QueryService.class);
+		when(qs.createQuery()).thenReturn(query);
+		when(context.getQueryService()).thenReturn(Optional.of(qs));
+
+		ConnectorService connectorService = Mockito.mock(ConnectorService.class);
+		when(connectorService.getContextByName("env1")).thenReturn(context);
+
+		QueryService queryService = new QueryService();
+		queryService.connectorService = connectorService;
+
+		SuggestionRequest request = new SuggestionRequest();
+		request.setSourceNames(Arrays.asList("env1"));
+		request.setType("Test");
+		request.setAttrName("Name");
+
+		assertThat(queryService.getSuggestions(request)).contains("Test-Name");
+	}
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/query/boundary/QueryTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/query/boundary/QueryTest.java
new file mode 100644
index 0000000..6bac3ba
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/query/boundary/QueryTest.java
@@ -0,0 +1,134 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.query.boundary;
+
+import static org.eclipse.mdm.api.odsadapter.ODSContextFactory.PARAM_NAMESERVICE;
+import static org.eclipse.mdm.api.odsadapter.ODSContextFactory.PARAM_PASSWORD;
+import static org.eclipse.mdm.api.odsadapter.ODSContextFactory.PARAM_SERVICENAME;
+import static org.eclipse.mdm.api.odsadapter.ODSContextFactory.PARAM_USER;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+import org.eclipse.mdm.api.base.ConnectionException;
+import org.eclipse.mdm.api.base.ServiceNotProvidedException;
+import org.eclipse.mdm.api.base.adapter.ModelManager;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.base.query.QueryService;
+import org.eclipse.mdm.api.base.query.Record;
+import org.eclipse.mdm.api.base.query.Result;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.odsadapter.ODSContextFactory;
+import org.eclipse.mdm.query.entity.Column;
+import org.eclipse.mdm.query.entity.Row;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+
+import com.fasterxml.jackson.core.JsonGenerationException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.google.common.base.Strings;
+
+public class QueryTest {
+
+	/*
+	 * ATTENTION: ==========
+	 *
+	 * To run this test make sure the target service is running a MDM default model
+	 * and any database constraint which enforces a relation of Test to a parent
+	 * entity is deactivated!
+	 */
+
+	private static final String NAME_SERVICE = "corbaloc::1.2@%s:%s/NameService";
+
+	private static final String USER = "sa";
+	private static final String PASSWORD = "sa";
+
+	private static ApplicationContext context;
+	private static ModelManager modelManager;
+	private static org.eclipse.mdm.api.base.query.QueryService queryService;
+
+	@BeforeClass
+	public static void setUpBeforeClass() throws ConnectionException {
+		String nameServiceHost = System.getProperty("host");
+		String nameServicePort = System.getProperty("port");
+		String serviceName = System.getProperty("service");
+
+		if (nameServiceHost == null || nameServiceHost.isEmpty()) {
+			throw new IllegalArgumentException("name service host is unknown: define system property 'host'");
+		}
+
+		nameServicePort = nameServicePort == null || nameServicePort.isEmpty() ? String.valueOf(2809) : nameServicePort;
+		if (nameServicePort == null || nameServicePort.isEmpty()) {
+			throw new IllegalArgumentException("name service port is unknown: define system property 'port'");
+		}
+
+		if (serviceName == null || serviceName.isEmpty()) {
+			throw new IllegalArgumentException("service name is unknown: define system property 'service'");
+		}
+
+		Map<String, String> connectionParameters = new HashMap<>();
+		connectionParameters.put(PARAM_NAMESERVICE, String.format(NAME_SERVICE, nameServiceHost, nameServicePort));
+		connectionParameters.put(PARAM_SERVICENAME, serviceName + ".ASAM-ODS");
+		connectionParameters.put(PARAM_USER, USER);
+		connectionParameters.put(PARAM_PASSWORD, PASSWORD);
+
+		context = new ODSContextFactory().connect(connectionParameters);
+		modelManager = context.getModelManager().orElseThrow(() -> new ServiceNotProvidedException(ModelManager.class));
+		queryService = context.getQueryService().orElseThrow(() -> new ServiceNotProvidedException(QueryService.class));
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() throws ConnectionException {
+		if (context != null) {
+			context.close();
+		}
+	}
+
+	@org.junit.Test
+	@Ignore
+	public void test() throws DataAccessException, JsonGenerationException, JsonMappingException, IOException {
+
+		List<Result> result = queryService.createQuery().select(modelManager.getEntityType("Test").getAttribute("Id"))
+				.select(modelManager.getEntityType("Test").getAttribute("Name"))
+				.select(modelManager.getEntityType("TestStep").getAttribute("Id"))
+				.select(modelManager.getEntityType("TestStep").getAttribute("Name")).fetch();
+
+		List<Row> rows = new ArrayList<>();
+
+		for (Result r : result) {
+			Row row = new Row();
+			for (Record record : r) {
+				for (Value value : record.getValues().values()) {
+					row.addColumn(new Column(record.getEntityType().getName(), value.getName(),
+							Strings.emptyToNull(Objects.toString(value.extract())),
+							Strings.emptyToNull(value.getUnit())));
+				}
+			}
+			rows.add(row);
+		}
+
+		ObjectMapper mapper = new ObjectMapper();
+		mapper.enable(SerializationFeature.INDENT_OUTPUT);
+		mapper.writeValue(System.out, rows);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/shoppingbasket/boundary/ShoppingBasketResourceTest.java b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/shoppingbasket/boundary/ShoppingBasketResourceTest.java
new file mode 100644
index 0000000..ed7c7b3
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/java/org/eclipse/mdm/shoppingbasket/boundary/ShoppingBasketResourceTest.java
@@ -0,0 +1,173 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.shoppingbasket.boundary;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.fail;
+import static org.mockito.Mockito.when;
+
+import java.io.InputStream;
+import java.io.StringReader;
+import java.net.URISyntaxException;
+import java.util.Arrays;
+import java.util.Optional;
+
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.core.Application;
+import javax.ws.rs.core.UriBuilder;
+import javax.xml.XMLConstants;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+import javax.xml.validation.Validator;
+
+import org.assertj.core.groups.Tuple;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+import org.eclipse.mdm.shoppingbasket.entity.MDMItem;
+import org.eclipse.mdm.shoppingbasket.entity.ShoppingBasket;
+import org.eclipse.mdm.shoppingbasket.entity.ShoppingBasketRequest;
+import org.glassfish.hk2.api.Factory;
+import org.glassfish.hk2.utilities.binding.AbstractBinder;
+import org.glassfish.jersey.jackson.JacksonFeature;
+import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.test.JerseyTest;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import com.google.common.collect.ImmutableMap;
+
+public class ShoppingBasketResourceTest extends JerseyTest {
+
+	private static ApplicationContext context = Mockito.mock(ApplicationContext.class);
+	private static EntityManager em = Mockito.mock(EntityManager.class);
+	private static ConnectorService connectorService = Mockito.mock(ConnectorService.class);
+
+	private static TestStep testStep = Mockito.mock(TestStep.class);
+	private static Measurement measurement = Mockito.mock(Measurement.class);
+
+	public static class ConnectorServiceFactory implements Factory<ConnectorService> {
+		@Override
+		public void dispose(ConnectorService connectorService) {
+			// nothing to do here
+		}
+
+		@Override
+		public ConnectorService provide() {
+			return connectorService;
+		}
+	}
+
+	@Override
+	public Application configure() {
+		ResourceConfig config = new ResourceConfig();
+
+		config.register(new AbstractBinder() {
+			@Override
+			protected void configure() {
+				bindFactory(ConnectorServiceFactory.class).to(ConnectorService.class);
+			}
+		});
+
+		config.register(ShoppingBasketResource.class);
+		config.register(JacksonFeature.class);
+		return config;
+	}
+
+	@Before
+	public void init() {
+
+		when(testStep.getSourceName()).thenReturn("MDMTEST");
+		when(testStep.getTypeName()).thenReturn("TestStep");
+		when(testStep.getID()).thenReturn("1");
+
+		when(measurement.getSourceName()).thenReturn("MDMTEST");
+		when(measurement.getTypeName()).thenReturn("Measurement");
+		when(measurement.getID()).thenReturn("2");
+
+		when(connectorService.getContextByName("MDMTEST")).thenReturn(context);
+		when(context.getEntityManager()).thenReturn(Optional.of(em));
+		when(em.load(TestStep.class, "1")).thenReturn(testStep);
+		when(context.getAdapterType()).thenReturn("ods");
+		when(em.getLinks(Mockito.anyList())).thenReturn(ImmutableMap.of(testStep, "servicename/asampath"));
+	}
+
+	@Test
+	public void testEmptyShoppingBasketRequest() {
+		ShoppingBasketRequest request = new ShoppingBasketRequest();
+
+		ShoppingBasket basket = target("shoppingbasket").request().post(Entity.json(request), ShoppingBasket.class);
+		assertThat(basket.getItems()).isEmpty();
+	}
+
+	@Test
+	public void testShoppingBasket() throws DataAccessException, URISyntaxException {
+		when(em.getLinks(Mockito.anyList())).thenReturn(ImmutableMap.of(testStep, "servicename/asampath/testStep",
+				measurement, "servicename/asampath/measurement"));
+
+		ShoppingBasket basket = target("shoppingbasket").request().post(Entity.json(getShoppingBasketRequest()),
+				ShoppingBasket.class);
+
+		assertThat(basket.getName()).isEqualTo("my shopping basket (<äöüß\\/>)");
+		assertThat(basket.getItems()).extracting(i -> Tuple.tuple(i.getSource(), i.getLink(), i.getRestURI()))
+				.containsExactly(
+						Tuple.tuple("ods", "servicename/asampath/testStep",
+								UriBuilder.fromUri(this.getBaseUri()).path("/environments/MDMTEST/teststeps/1")
+										.build()),
+						Tuple.tuple("ods", "servicename/asampath/measurement", UriBuilder.fromUri(this.getBaseUri())
+								.path("/environments/MDMTEST/measurements/2").build()));
+	}
+
+	@Test
+	public void testValidateShoppingBasketXml() {
+		String xml = target("shoppingbasket").request().post(Entity.json(getShoppingBasketRequest()), String.class);
+		validateAgainstXSD(xml, ShoppingBasketResourceTest.class.getResourceAsStream("/shoppingbasket1.0.xsd"));
+		System.out.println(xml);
+	}
+
+	private ShoppingBasketRequest getShoppingBasketRequest() {
+		MDMItem item1 = new MDMItem();
+		item1.setSource("MDMTEST");
+		item1.setType("TestStep");
+		item1.setId("1");
+
+		MDMItem item2 = new MDMItem();
+		item2.setSource("MDMTEST");
+		item2.setType("Measurement");
+		item2.setId("2");
+
+		ShoppingBasketRequest request = new ShoppingBasketRequest();
+		request.setName("my shopping basket (<äöüß\\/>)");
+		request.setItems(Arrays.asList(item1, item2));
+		return request;
+	}
+
+	private void validateAgainstXSD(String xml, InputStream xsd) {
+		try {
+			SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+			Schema schema = factory.newSchema(new StreamSource(xsd));
+			Validator validator = schema.newValidator();
+			validator.validate(new StreamSource(new StringReader(xml)));
+		} catch (Exception ex) {
+			fail("XML could not be validated: " + xml, ex);
+		}
+	}
+
+}
diff --git a/org.eclipse.mdm.businessobjects/src/test/resources/logback-test.xml b/org.eclipse.mdm.businessobjects/src/test/resources/logback-test.xml
new file mode 100644
index 0000000..07612dd
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/src/test/resources/logback-test.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration debug="false" scan="true">
+
+  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+    <!-- encoders are assigned the type
+         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
+    <encoder>
+      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+    </encoder>
+  </appender>
+
+  <logger name="org.eclipse.mdm" level="DEBUG" />
+  
+  <root level="INFO">
+    <appender-ref ref="STDOUT" />
+  </root>
+</configuration>
\ No newline at end of file
diff --git a/org.eclipse.mdm.businessobjects/target/generated-sources/antlr4/org/eclipse/mdm/businessobjects/filter/.gitignore b/org.eclipse.mdm.businessobjects/target/generated-sources/antlr4/org/eclipse/mdm/businessobjects/filter/.gitignore
new file mode 100644
index 0000000..651663d
--- /dev/null
+++ b/org.eclipse.mdm.businessobjects/target/generated-sources/antlr4/org/eclipse/mdm/businessobjects/filter/.gitignore
@@ -0,0 +1,8 @@
+/FilterGrammar.tokens
+/FilterGrammarBaseListener.java
+/FilterGrammarBaseVisitor.java
+/FilterGrammarLexer.java
+/FilterGrammarLexer.tokens
+/FilterGrammarListener.java
+/FilterGrammarParser.java
+/FilterGrammarVisitor.java
diff --git a/org.eclipse.mdm.connector/build.gradle b/org.eclipse.mdm.connector/build.gradle
new file mode 100644
index 0000000..0664b25
--- /dev/null
+++ b/org.eclipse.mdm.connector/build.gradle
@@ -0,0 +1,31 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+description = 'MDM Connector'
+
+dependencies {
+	compile "org.eclipse.mdm:org.eclipse.mdm.api.default:${version}"
+	compile project(':org.eclipse.mdm.property')
+	compile group: 'com.google.guava', name: 'guava', version: "25.0-jre"
+
+	compile group: 'org.apache.commons', name: 'commons-text', version: '1.6'
+
+	compileOnly 'javax:javaee-api:7.0'
+}
+
+jar {
+	metaInf { from '../NOTICE.txt' }
+	metaInf { from '../LICENSE.txt' }
+}
diff --git a/org.eclipse.mdm.connector/src/main/configuration/service.xml b/org.eclipse.mdm.connector/src/main/configuration/service.xml
new file mode 100644
index 0000000..feeecfa
--- /dev/null
+++ b/org.eclipse.mdm.connector/src/main/configuration/service.xml
@@ -0,0 +1,46 @@
+<!-- 
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ -->
+
+<services>
+	<service entityManagerFactoryClass="org.eclipse.mdm.api.odsadapter.ODSContextFactory">
+		<param name="nameservice">corbaloc::1.2@YOUR_HOST1:2809/NameService</param>
+		<param name="servicename">YOUR_SERVICE1.ASAM-ODS</param>
+	</service>
+	<service entityManagerFactoryClass="org.eclipse.mdm.api.odsadapter.ODSContextFactory">
+		<param name="nameservice">corbaloc::1.2@YOUR_HOST2:2809/NameService</param>
+		<param name="servicename">YOUR_SERVICE2.ASAM-ODS</param>
+		
+		<!-- Specify the credentials of the technical user which opens sessions on behalf of the login user -->
+		<param name="user">sa</param>
+		<!-- param values can contain lookups. For example ${sys:odsPassword} will be replaced with the contents of the system variable 'odsPassword' -->
+		<param name="password">sa</param>
+		
+		<!--Activeate indexing on Peak ODS Server -->
+		<param name="freetext.active">true</param>
+		<param name="freetext.notificationType">peak</param>
+		<param name="freetext.notificationUrl">http://YOUR_HOST2:8089/api</param>
+	</service>
+	<service entityManagerFactoryClass="org.eclipse.mdm.api.odsadapter.ODSContextFactory">
+		<param name="nameservice">corbaloc::1.2@YOUR_HOST3:2809/NameService</param>
+		<param name="servicename">YOUR_SERVICE3.ASAM-ODS</param>
+		
+		<!-- Specify the credentials of the technical user which opens sessions on behalf of the login user -->
+		<param name="user">sa</param>
+		<param name="password">sa</param>
+		
+		<!--Activate indexing on a Avalon server -->
+		<param name="freetext.active">true</param>
+		<param name="freetext.notificationType">avalon</param>
+		<param name="freetext.pollingInterval">5000</param>
+	</service>
+</services>
diff --git a/org.eclipse.mdm.connector/src/main/java/org/eclipse/mdm/connector/boundary/ConnectorService.java b/org.eclipse.mdm.connector/src/main/java/org/eclipse/mdm/connector/boundary/ConnectorService.java
new file mode 100644
index 0000000..756ea6a
--- /dev/null
+++ b/org.eclipse.mdm.connector/src/main/java/org/eclipse/mdm/connector/boundary/ConnectorService.java
@@ -0,0 +1,236 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.connector.boundary;
+
+import java.io.Serializable;
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.enterprise.context.SessionScoped;
+import javax.inject.Inject;
+import javax.security.auth.spi.LoginModule;
+
+import org.apache.commons.text.StringSubstitutor;
+import org.apache.commons.text.lookup.StringLookup;
+import org.apache.commons.text.lookup.StringLookupFactory;
+import org.eclipse.mdm.api.base.ConnectionException;
+import org.eclipse.mdm.api.base.ServiceNotProvidedException;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.ApplicationContextFactory;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.connector.control.ServiceConfigurationActivity;
+import org.eclipse.mdm.connector.entity.ServiceConfiguration;
+import org.eclipse.mdm.property.GlobalProperty;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+
+/**
+ * ConnectorServcie Bean implementation to create and close connections
+ *
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ * @author Canoo Engineering (removal of hardcoded ODS dependencies)
+ *
+ */
+@SessionScoped
+public class ConnectorService implements Serializable {
+
+	private static final long serialVersionUID = -5891142709182298531L;
+
+	private static final Logger LOG = LoggerFactory.getLogger(ConnectorService.class);
+	private static final String CONNECTION_PARAM_FOR_USER = "for_user";
+
+	@Inject
+	Principal principal;
+
+	@Inject
+	ServiceConfigurationActivity serviceConfigurationActivity;
+
+	@Inject
+	@GlobalProperty
+	private Map<String, String> globalProperties = Collections.emptyMap();
+
+	private List<ApplicationContext> contexts = Lists.newArrayList();
+
+	private Map<ApplicationContext, ServiceConfiguration> serviceConfigs = new ConcurrentHashMap<>();
+
+	private transient StringLookup stringLookup = StringLookupFactory.INSTANCE.interpolatorStringLookup();
+	private transient StringSubstitutor substitutor = new StringSubstitutor(stringLookup);
+
+	public ConnectorService() {
+		// empty constructor for CDI
+	}
+
+	/**
+	 * Creates a connector service for usage outside the session scope of CDI.
+	 * 
+	 * @param principal        Principal the connector service uses.
+	 * @param globalProperties global properties supplied the opened application
+	 *                         contexts.
+	 */
+	public ConnectorService(Principal principal, Map<String, String> globalProperties) {
+		super();
+		this.principal = principal;
+		this.serviceConfigurationActivity = new ServiceConfigurationActivity();
+		this.globalProperties = globalProperties;
+	}
+
+	/**
+	 * returns all available {@link ApplicationContext}s
+	 *
+	 * @return list of available {@link ApplicationContext}s
+	 */
+	public List<ApplicationContext> getContexts() {
+		return ImmutableList.copyOf(contexts);
+	}
+
+	/**
+	 * returns an {@link ApplicationContext} identified by the given name
+	 *
+	 * @param name source name (e.g. MDM {@link Environment} name)
+	 * @return the matching {@link ApplicationContext}
+	 */
+	public ApplicationContext getContextByName(String name) {
+		try {
+			for (ApplicationContext context : getContexts()) {
+				String sourceName = context.getEntityManager()
+						.orElseThrow(() -> new ServiceNotProvidedException(EntityManager.class)).loadEnvironment()
+						.getSourceName();
+
+				if (sourceName.equals(name)) {
+					return context;
+				}
+			}
+			String errorMessage = "no data source with environment name '" + name + "' connected!";
+			throw new ConnectorServiceException(errorMessage);
+
+		} catch (DataAccessException e) {
+			throw new ConnectorServiceException(e.getMessage(), e);
+		}
+
+	}
+
+	@PostConstruct
+	public void connect() {
+		LOG.info("connecting user with name '" + principal.getName() + "'");
+		this.contexts = serviceConfigurationActivity.readServiceConfigurations().stream().map(this::connectContexts)
+				.filter(Optional::isPresent).map(Optional::get).collect(Collectors.toList());
+	}
+
+	/**
+	 * disconnect from all connected data sources This method is call from a
+	 * {@link LoginModule} at logout
+	 *
+	 * This method is call from a {@link LoginModule}
+	 *
+	 */
+	@PreDestroy
+	public void disconnect() {
+		for (ApplicationContext context : new ArrayList<>(contexts)) {
+			disconnectContext(context);
+		}
+		LOG.info("user with name '" + principal.getName() + "' has been disconnected!");
+	}
+
+	/**
+	 * Tries to close the given context and reconnect.
+	 * 
+	 * @param context ApplicationContext to reconnect
+	 * @return the reconnected context
+	 */
+	public Optional<ApplicationContext> reconnect(ApplicationContext context) {
+		try {
+			context.close();
+		} catch (Exception e) {
+			LOG.warn("Unable to close ApplicationContext!", e);
+		}
+		ServiceConfiguration serviceConfig = serviceConfigs.remove(context);
+		contexts.remove(context);
+
+		if (serviceConfig == null) {
+			LOG.warn("Could not reconnect ApplicationContext, because service configuration is null!");
+			return Optional.empty();
+		} else {
+			return connectContexts(serviceConfig);
+		}
+	}
+
+	private Optional<ApplicationContext> connectContexts(ServiceConfiguration source) {
+		try {
+
+			Class<? extends ApplicationContextFactory> contextFactoryClass = Thread.currentThread()
+					.getContextClassLoader().loadClass(source.getContextFactoryClass())
+					.asSubclass(ApplicationContextFactory.class);
+			ApplicationContextFactory contextFactory = contextFactoryClass.newInstance();
+
+			Map<String, String> connectionParameters = new HashMap<>();
+			connectionParameters.putAll(globalProperties);
+			connectionParameters.putAll(processLookups(source.getConnectionParameters()));
+			connectionParameters.put(CONNECTION_PARAM_FOR_USER, principal.getName());
+
+			ApplicationContext context = contextFactory.connect(connectionParameters);
+			serviceConfigs.put(context, source);
+			contexts.add(context);
+			return Optional.of(context);
+
+		} catch (ConnectionException e) {
+			LOG.warn("unable to logon user with name '" + principal.getName() + "' at data source '"
+					+ source.getContextFactoryClass() + "' (reason: " + e.getMessage() + ")");
+		} catch (Exception e) {
+			LOG.error("failed to initialize entity manager using factory '" + source.getContextFactoryClass()
+					+ "' (reason: " + e + ")", e);
+		}
+		return Optional.empty();
+	}
+
+	/**
+	 * Processes lookups on the values of the map
+	 * 
+	 * @param map
+	 * @return map with applied lookups
+	 */
+	protected Map<String, String> processLookups(Map<String, String> map) {
+		return map.entrySet().stream().collect(Collectors.toMap(Entry::getKey, e -> substitutor.replace(e.getValue())));
+	}
+
+	private void disconnectContext(ApplicationContext context) {
+		try {
+			if (context != null) {
+				context.close();
+			}
+		} catch (ConnectionException e) {
+			LOG.error("unable to logout user from MDM datasource (reason: " + e.getMessage() + ")");
+			throw new ConnectorServiceException(e.getMessage(), e);
+		} finally {
+			serviceConfigs.remove(context);
+			contexts.remove(context);
+		}
+	}
+
+}
diff --git a/org.eclipse.mdm.connector/src/main/java/org/eclipse/mdm/connector/boundary/ConnectorServiceException.java b/org.eclipse.mdm.connector/src/main/java/org/eclipse/mdm/connector/boundary/ConnectorServiceException.java
new file mode 100644
index 0000000..8ee13c4
--- /dev/null
+++ b/org.eclipse.mdm.connector/src/main/java/org/eclipse/mdm/connector/boundary/ConnectorServiceException.java
@@ -0,0 +1,29 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.connector.boundary;
+
+public class ConnectorServiceException extends RuntimeException {
+
+	private static final long serialVersionUID = 3491930665127242286L;
+
+	public ConnectorServiceException(String message) {
+		super(message);
+	}
+
+	public ConnectorServiceException(String message, Throwable t) {
+		super(message, t);
+	}
+
+}
diff --git a/org.eclipse.mdm.connector/src/main/java/org/eclipse/mdm/connector/control/ServiceConfigurationActivity.java b/org.eclipse.mdm.connector/src/main/java/org/eclipse/mdm/connector/control/ServiceConfigurationActivity.java
new file mode 100644
index 0000000..2dc8f08
--- /dev/null
+++ b/org.eclipse.mdm.connector/src/main/java/org/eclipse/mdm/connector/control/ServiceConfigurationActivity.java
@@ -0,0 +1,139 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.connector.control;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.ejb.Stateless;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.eclipse.mdm.connector.boundary.ConnectorServiceException;
+import org.eclipse.mdm.connector.entity.ServiceConfiguration;
+import org.eclipse.mdm.property.GlobalPropertyService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+/**
+ * ServiceConfigurationReader to read MDM Service configurations from a
+ * service.xml file
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ * @author Canoo Engineering AG (support for arbitrary entity manager factories
+ *         and connection parameters)
+ *
+ */
+@Stateless
+public class ServiceConfigurationActivity {
+
+	private static final Logger LOG = LoggerFactory.getLogger(ServiceConfigurationActivity.class);
+
+	private static final String COMPONENT_CONFIG_FOLDER = "org.eclipse.mdm.connector";
+	private static final String SERVICE_XML_FILE_NAME = "service.xml";
+
+	private static final String ROOT_ELEMENT_NAME = "services";
+	private static final String SERVICE_ELEMENT_NAME = "service";
+	private static final String PARAM_ELEMENT_NAME = "param";
+	private static final String EMFACTORYCLASS_ATTRIBUTE_NAME = "entityManagerFactoryClass";
+	private static final String NAME_ATTRIBUTE_NAME = "name";
+
+	public List<ServiceConfiguration> readServiceConfigurations() {
+
+		try (InputStream is = new BufferedInputStream(getServiceConfiguration())) {
+
+			DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+			Document doc = db.parse(is);
+
+			Element root = doc.getDocumentElement();
+			if (!ROOT_ELEMENT_NAME.equals(root.getNodeName())) {
+				throw new ConnectorServiceException(
+						"unable to find root element with name '" + ROOT_ELEMENT_NAME + "'");
+			}
+
+			NodeList serviceElements = root.getElementsByTagName(SERVICE_ELEMENT_NAME);
+			List<ServiceConfiguration> parsedServiceElements = new ArrayList<>(serviceElements.getLength());
+			for (int i = 0, n = serviceElements.getLength(); i < n; i++) {
+				parsedServiceElements.add(parseServiceElement((Element) serviceElements.item(i)));
+			}
+
+			if (parsedServiceElements.isEmpty()) {
+				LOG.warn("No service connectors are configured. This is probably wrong!");
+				throw new IllegalStateException("No configured connectors!");
+			}
+			return parsedServiceElements;
+
+		} catch (ConnectorServiceException e) {
+			LOG.error("Could not create connector service", e);
+			throw e;
+		} catch (Exception e) {
+			LOG.error("Could not create connector service", e);
+			throw new ConnectorServiceException(e.toString(), e);
+		}
+	}
+
+	private static ServiceConfiguration parseServiceElement(Element serviceElement) {
+		String entityManagerFactoryClass = readElementAttribute(serviceElement, EMFACTORYCLASS_ATTRIBUTE_NAME);
+		NodeList paramElements = serviceElement.getElementsByTagName(PARAM_ELEMENT_NAME);
+		Map<String, String> connectionParameters = new LinkedHashMap<>(paramElements.getLength());
+		for (int i = 0, n = paramElements.getLength(); i < n; i++) {
+			Element paramElement = (Element) paramElements.item(i);
+			String paramName = readElementAttribute(paramElement, NAME_ATTRIBUTE_NAME);
+			String paramValue = paramElement.getTextContent();
+			if (paramValue != null && !(paramValue = paramValue.trim()).isEmpty()) {
+				connectionParameters.put(paramName, paramValue);
+			}
+		}
+		return new ServiceConfiguration(entityManagerFactoryClass, connectionParameters);
+	}
+
+	private static String readElementAttribute(Element element, String attrName) {
+		String value = element.getAttribute(attrName);
+		if (value.trim().isEmpty()) {
+			throw new ConnectorServiceException(
+					"mandatory attribute '" + attrName + "' of element '" + element.getNodeName() + "' is missing!");
+		}
+		return value;
+	}
+
+	private static InputStream getServiceConfiguration() throws FileNotFoundException {
+		String configRoot = System.getProperty(GlobalPropertyService.PROPERTY_CONFIG_PATH, ".");
+		LOG.info("found system property {} with value {}", GlobalPropertyService.PROPERTY_CONFIG_PATH, configRoot);
+
+		File file = new File(configRoot, COMPONENT_CONFIG_FOLDER);
+		if (!file.exists() || !file.isDirectory()) {
+			throw new ConnectorServiceException(
+					"mandatory configuration folder '" + file.getAbsolutePath() + "' does not exist!");
+		}
+		File serviceXML = new File(file, SERVICE_XML_FILE_NAME);
+		if (!file.exists()) {
+			throw new ConnectorServiceException(
+					"mandatory service configuration file at '" + serviceXML.getAbsolutePath() + "' does not exist!");
+		}
+
+		LOG.info("loading service configuration from file: {}", serviceXML);
+		return new FileInputStream(serviceXML);
+	}
+}
diff --git a/org.eclipse.mdm.connector/src/main/java/org/eclipse/mdm/connector/entity/ServiceConfiguration.java b/org.eclipse.mdm.connector/src/main/java/org/eclipse/mdm/connector/entity/ServiceConfiguration.java
new file mode 100644
index 0000000..b1074e5
--- /dev/null
+++ b/org.eclipse.mdm.connector/src/main/java/org/eclipse/mdm/connector/entity/ServiceConfiguration.java
@@ -0,0 +1,90 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.connector.entity;
+
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * ServiceConfiguration
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ * @author Canoo Engineering AG (support for arbitrary entity manager factories
+ *         and connection parameters)
+ *
+ */
+public class ServiceConfiguration {
+
+	/**
+	 * The fully qualified class name of the entity manager factory for this
+	 * backend, never null.
+	 */
+	private final String contextFactoryClass;
+
+	/**
+	 * An unmodifiable map holding the connection parameters for this backend; never
+	 * null, but possibly empty.
+	 */
+	private final Map<String, String> connectionParameters;
+
+	/**
+	 * Constructs a new instance with the specified properties. The specified
+	 * parameter map is copied by this constructor and no reference to the original
+	 * is retained.
+	 * 
+	 * @param entityManagerFactoryClass the fully qualified class name of the entity
+	 *                                  manager factory for this backend, must not
+	 *                                  be null
+	 * @param connectionParameters      a map holding the connection parameters for
+	 *                                  this backend, or null to use an empty map
+	 *                                  instead
+	 */
+	public ServiceConfiguration(String contextFactoryClass, Map<String, String> connectionParameters) {
+		this.contextFactoryClass = Objects.requireNonNull(contextFactoryClass,
+				"Null \"contextFactoryClass\" argument passed to ServiceConfiguration constructor");
+		this.connectionParameters = (connectionParameters == null ? Collections.emptyMap()
+				: Collections.unmodifiableMap(new LinkedHashMap<>(connectionParameters)));
+	}
+
+	/**
+	 * Returns the fully qualified class name of the entity manager factory for this
+	 * backend. The result is never null.
+	 * 
+	 * @return the entity manager factory class name passed to the constructor,
+	 *         never null
+	 */
+	public String getContextFactoryClass() {
+		return contextFactoryClass;
+	}
+
+	/**
+	 * Returns an unmodifiable map holding the connection parameters for this
+	 * backend. The result is never null, but may be empty.
+	 * 
+	 * @return an unmodifiable copy of the connection parameter map passed to the
+	 *         constructor; never null, but possibly empty
+	 */
+	public Map<String, String> getConnectionParameters() {
+		return connectionParameters;
+	}
+
+	@Override
+	public String toString() {
+		return this.contextFactoryClass + "#" + connectionParameters;
+	}
+
+}
diff --git a/org.eclipse.mdm.connector/src/test/java/org/eclipse/mdm/connector/boundary/ConnectorServiceTest.java b/org.eclipse.mdm.connector/src/test/java/org/eclipse/mdm/connector/boundary/ConnectorServiceTest.java
new file mode 100644
index 0000000..e9af581
--- /dev/null
+++ b/org.eclipse.mdm.connector/src/test/java/org/eclipse/mdm/connector/boundary/ConnectorServiceTest.java
@@ -0,0 +1,196 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.connector.boundary;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.lang.reflect.Constructor;
+import java.security.Principal;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+
+import javax.ejb.SessionContext;
+
+import org.eclipse.mdm.api.base.ConnectionException;
+import org.eclipse.mdm.api.base.adapter.Core;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.ApplicationContextFactory;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.connector.control.ServiceConfigurationActivity;
+import org.eclipse.mdm.connector.entity.ServiceConfiguration;
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableMap;
+
+/**
+ * JUNIT Test for {@link ConnectorService}
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ * @author Canoo Engineering (more tests)
+ *
+ */
+@SuppressWarnings("javadoc")
+public class ConnectorServiceTest {
+
+	private final Principal testUser = new SimplePrincipal("testUser");
+	private static final String testSourceName = "testSource";
+	private final String differentSourceName = "differentSource";
+
+	@Test
+	public void testGetEntityManagers_happyFlow() throws Exception {
+		ConnectorService connectorService = createConnectorService(testUser);
+		connectorService.connect();
+		assertThat(connectorService.getContexts().size(), is(1));
+	}
+
+	@Test(expected = ConnectorServiceException.class)
+	public void testGetEntityManagerByName_differentSourceName() throws Exception {
+		ConnectorService connectorService = createConnectorService(testUser);
+		connectorService.connect();
+		connectorService.getContextByName(differentSourceName);
+	}
+
+	@Test
+	public void testGetEntityManagerByName_happyFlow() throws Exception {
+		ConnectorService connectorService = createConnectorService(testUser);
+		connectorService.connect();
+		assertNotNull(connectorService.getContextByName(testSourceName));
+	}
+
+	@Test
+	public void testDisconnect() throws Exception {
+		ConnectorService connectorService = createConnectorService(testUser);
+		connectorService.disconnect();
+	}
+
+	private static final class SimplePrincipal implements Principal {
+		private final String name;
+
+		SimplePrincipal(String name) {
+			this.name = Objects.requireNonNull(name);
+		}
+
+		@Override
+		public String getName() {
+			return name;
+		}
+
+		@Override
+		public boolean equals(Object obj) {
+			return (obj instanceof SimplePrincipal && ((SimplePrincipal) obj).name.equals(name));
+		}
+
+		@Override
+		public int hashCode() {
+			return name.hashCode();
+		}
+
+		@Override
+		public String toString() {
+			return name;
+		}
+
+	}
+
+	private static ConnectorService createConnectorService(Principal user) throws Exception {
+
+		SessionContext sessionContextMock = mock(SessionContext.class);
+		when(sessionContextMock.getCallerPrincipal()).thenReturn(user);
+
+		ServiceConfiguration serviceConfiguration = new ServiceConfiguration(TestContextFactory.class.getName(),
+				Collections.emptyMap());
+
+		ConnectorService connectorService = new ConnectorService();
+
+		connectorService.principal = user;
+
+		ServiceConfigurationActivity serviceConfigurationActivity = mock(ServiceConfigurationActivity.class);
+		when(serviceConfigurationActivity.readServiceConfigurations())
+				.thenReturn(Collections.singletonList(serviceConfiguration));
+		connectorService.serviceConfigurationActivity = serviceConfigurationActivity;
+
+		return connectorService;
+	}
+
+	public static final class TestContextFactory implements ApplicationContextFactory {
+
+		@Override
+		public ApplicationContext connect(Map<String, String> connectionParameters) throws ConnectionException {
+			return createContext(testSourceName);
+		}
+	}
+
+	private static ApplicationContext createContext(String sourceName) {
+		Environment env = createEntityMock(Environment.class, "MDMTest", sourceName, "1");
+
+		EntityManager em = mock(EntityManager.class);
+		when(em.loadEnvironment()).thenReturn(env);
+
+		ApplicationContext ctx = mock(ApplicationContext.class);
+		when(ctx.getEntityManager()).thenReturn(Optional.of(em));
+
+		return ctx;
+	}
+
+	private static <T extends Entity> T createEntityMock(Class<T> type, String name, String sourceName, String id) {
+
+		Map<String, Value> entityAttributes = new HashMap<>();
+		entityAttributes.put("Name", ValueType.STRING.create("Name", name));
+
+		Core core = mock(Core.class);
+		when(core.getSourceName()).thenReturn(sourceName);
+		when(core.getValues()).thenReturn(entityAttributes);
+		when(core.getID()).thenReturn(id);
+
+		try {
+			Constructor<T> constructor = type.getDeclaredConstructor(Core.class);
+			constructor.setAccessible(true);
+			return constructor.newInstance(core);
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	@Test
+	public void testProcessLookupsSys() throws Exception {
+		ConnectorService connectorService = createConnectorService(testUser);
+
+		System.setProperty("MY_PASSWORD", "s3cr3t");
+		assertThat(connectorService.processLookups(ImmutableMap.of("password", "${sys:MY_PASSWORD}")))
+				.containsEntry("password", "s3cr3t");
+		System.setProperty("MY_PASSWORD", "");
+	}
+
+	@Test
+	public void testProcessLookupsProperties() throws Exception {
+		ConnectorService connectorService = createConnectorService(testUser);
+
+		assertThat(connectorService.processLookups(
+				ImmutableMap.of("password", "${properties:src/test/resources/lookup.properties::MyPassword}")))
+						.containsEntry("password", "s4cr4t");
+	}
+}
diff --git a/org.eclipse.mdm.connector/src/test/resources/lookup.properties b/org.eclipse.mdm.connector/src/test/resources/lookup.properties
new file mode 100644
index 0000000..6340709
--- /dev/null
+++ b/org.eclipse.mdm.connector/src/test/resources/lookup.properties
@@ -0,0 +1 @@
+MyPassword=s4cr4t
\ No newline at end of file
diff --git a/org.eclipse.mdm.filerelease/build.gradle b/org.eclipse.mdm.filerelease/build.gradle
new file mode 100644
index 0000000..d7aad6d
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/build.gradle
@@ -0,0 +1,39 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+description = 'file release component'
+
+apply plugin: 'java'
+apply plugin: 'maven'
+apply plugin: 'eclipse'
+sourceCompatibility = 1.8
+targetCompatibility = 1.8
+
+
+repositories {
+	mavenLocal()
+	mavenCentral()
+}
+
+
+dependencies {
+	compile project (':org.eclipse.mdm.connector')
+	compile project (':org.eclipse.mdm.property')
+}
+
+jar {
+	metaInf { from '../NOTICE.txt' }
+	metaInf { from '../LICENSE.txt' }
+}
diff --git a/org.eclipse.mdm.filerelease/src/main/configuration/BESA/model.atfx.technical b/org.eclipse.mdm.filerelease/src/main/configuration/BESA/model.atfx.technical
new file mode 100644
index 0000000..43ab7a0
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/main/configuration/BESA/model.atfx.technical
@@ -0,0 +1,17 @@
+﻿<!-- ********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ******************************************************************************** -->
+<?xml version="1.0" encoding="utf-8"?>
+
+<atfx_file xmlns="http://www.asam.net/ODS/5.1/Schema" version="atfx_file: V1.1.0" xmlns:ext="urn:schemas-microsoft-com:xslt" xmlns:rdb="http://www.muellerbbm-vas.de/ods/rdb" xmlns:utils="java:vas.xml.Util"><base_model_version>asam29</base_model_version><application_model><application_enumeration><name>axistype</name><item><name>Xaxis</name><value>0</value></item><item><name>Yaxis</name><value>1</value></item><item><name>Both</name><value>2</value></item></application_enumeration><application_enumeration><name>coordinate_system_types</name><item><name>Cartesian</name><value>0</value></item><item><name>Polar</name><value>1</value></item><item><name>Cylindric</name><value>2</value></item></application_enumeration><application_enumeration><name>location_modes</name><item><name>Fixed</name><value>0</value></item><item><name>Varying</name><value>1</value></item></application_enumeration><application_element><name>env</name><basetype>AoEnvironment</basetype><application_attribute><name>env_iid</name><base_attribute>id</base_attribute><rdb:column>ENV_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>skill</name><datatype>DT_LONG</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>SKILL</rdb:column></application_attribute><application_attribute><name>id</name><datatype>DT_LONG</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>ID</rdb:column></application_attribute><application_attribute><name>touched</name><datatype>DT_LONG</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>TOUCHED</rdb:column></application_attribute><application_attribute><name>description</name><base_attribute>description</base_attribute><length>4000</length><rdb:column>DESCR</rdb:column></application_attribute><application_attribute><name>version</name><datatype>DT_LONG</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>VERSION</rdb:column></application_attribute><relation_attribute><name>prj_iid</name><ref_to>prj</ref_to><base_relation>tests</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>env_iid</inverse_name><rdb:join>PROJECT__.ENV_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>ins_iid</name><ref_to>ins</ref_to><base_relation>equipments</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>env_iid</inverse_name><rdb:join>SETUP_.ENV_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>fremdmotor_iid</name><ref_to>fremdmotor</ref_to><base_relation>uuts</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>env_iid</inverse_name><rdb:join>FREMDMOTOR_.ENV_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>motor_iid</name><ref_to>motor</ref_to><base_relation>uuts</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>env_iid</inverse_name><rdb:join>MOTOR_.ENV_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>messtext_iid</name><ref_to>messtext</ref_to><base_relation>sequences</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>env_iid</inverse_name><rdb:join>MESSTEXT_.ENV_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>randbedingung_iid</name><ref_to>randbedingung</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>env_iid</inverse_name><rdb:join>RANDBEDINGUNG_.ENV_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>messzyklus_iid</name><ref_to>messzyklus</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>env_iid</inverse_name><rdb:join>MESSZYKLUS_.ENV_IID IN (?)</rdb:join></relation_attribute><rdb:aid>1</rdb:aid><rdb:table>ENVIRONMENT_</rdb:table></application_element><application_element><name>dim</name><basetype>AoPhysicalDimension</basetype><application_attribute><name>dim_iid</name><base_attribute>id</base_attribute><rdb:column>DIM_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>meter_exp</name><base_attribute>length_exp</base_attribute><rdb:column>LEN</rdb:column></application_attribute><application_attribute><name>kilogramm_exp</name><base_attribute>mass_exp</base_attribute><rdb:column>MASS</rdb:column></application_attribute><application_attribute><name>second_exp</name><base_attribute>time_exp</base_attribute><rdb:column>TIM</rdb:column></application_attribute><application_attribute><name>ampere_exp</name><base_attribute>current_exp</base_attribute><rdb:column>CUR</rdb:column></application_attribute><application_attribute><name>kelvin_exp</name><base_attribute>temperature_exp</base_attribute><rdb:column>T</rdb:column></application_attribute><application_attribute><name>mol_exp</name><base_attribute>molar_amount_exp</base_attribute><rdb:column>PART</rdb:column></application_attribute><application_attribute><name>candela_exp</name><base_attribute>luminous_intensity_exp</base_attribute><rdb:column>LUM</rdb:column></application_attribute><application_attribute><name>angle</name><datatype>DT_LONG</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>ANGLE</rdb:column></application_attribute><relation_attribute><name>unt_iid</name><ref_to>unt</ref_to><base_relation>units</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>dim_iid</inverse_name><rdb:join>UNIT_.DIM_IID IN (?)</rdb:join></relation_attribute><rdb:aid>2</rdb:aid><rdb:table>DIMENSION_</rdb:table></application_element><application_element><name>gru</name><basetype>AoUnitGroup</basetype><application_attribute><name>gru_iid</name><base_attribute>id</base_attribute><rdb:column>GRU_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><relation_attribute><name>unt_iid</name><ref_to>unt</ref_to><base_relation>units</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>gru_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>UNIT_.UNT_IID=.UNT_IID AND .GRU_IID IN (?)</rdb:join></relation_attribute><rdb:aid>3</rdb:aid><rdb:table>UNITSYSTEM_</rdb:table></application_element><application_element><name>unt</name><basetype>AoUnit</basetype><application_attribute><name>unt_iid</name><base_attribute>id</base_attribute><rdb:column>UNT_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>offset</name><base_attribute>offset</base_attribute><rdb:column>OFFSET</rdb:column></application_attribute><application_attribute><name>factor</name><base_attribute>factor</base_attribute><rdb:column>FACTOR</rdb:column></application_attribute><application_attribute><name>dB</name><datatype>DT_SHORT</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>DBFLG</rdb:column></application_attribute><application_attribute><name>dB_reference_factor</name><datatype>DT_FLOAT</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>DBREF</rdb:column></application_attribute><relation_attribute><name>dim_iid</name><ref_to>dim</ref_to><base_relation>phys_dimension</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>unt_iid</inverse_name><rdb:column>DIM_IID</rdb:column><rdb:join>UNIT_.UNT_IID IN (?) AND UNIT_.DIM_IID=DIMENSION_.DIM_IID</rdb:join></relation_attribute><relation_attribute><name>quantity_iid</name><ref_to>quantity</ref_to><base_relation>quantities</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>unt_iid</inverse_name><rdb:join>QUANTITY_.UNT_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>meq_iid</name><ref_to>meq</ref_to><base_relation>measurement_quantities</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>unt_iid</inverse_name><rdb:join>MEASURING QUANTITY_.UNT_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>par_iid</name><ref_to>par</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>unt_iid</inverse_name><rdb:join>PARAMETER_.UNT_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>gru_iid</name><ref_to>gru</ref_to><base_relation>groups</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>unt_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>UNITSYSTEM_.GRU_IID=.GRU_IID AND .UNT_IID IN (?)</rdb:join></relation_attribute><rdb:aid>4</rdb:aid><rdb:table>UNIT_</rdb:table></application_element><application_element><name>grq</name><basetype>AoQuantityGroup</basetype><application_attribute><name>grq_iid</name><base_attribute>id</base_attribute><rdb:column>GRQ_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><relation_attribute><name>quantity_iid</name><ref_to>quantity</ref_to><base_relation>quantities</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>grq_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>QUANTITY_.QUANTITY_IID=.QUANTITY_IID AND .GRQ_IID IN (?)</rdb:join></relation_attribute><rdb:aid>5</rdb:aid><rdb:table>QUANTITYSYSTEM_</rdb:table></application_element><application_element><name>prj</name><basetype>AoTest</basetype><application_attribute><name>prj_iid</name><base_attribute>id</base_attribute><rdb:column>PRJ_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><relation_attribute><name>env_iid</name><ref_to>env</ref_to><base_relation>environment</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>prj_iid</inverse_name><rdb:column>ENV_IID</rdb:column><rdb:join>PROJECT__.PRJ_IID IN (?) AND PROJECT__.ENV_IID=ENVIRONMENT_.ENV_IID</rdb:join></relation_attribute><relation_attribute><name>tstser_iid</name><ref_to>tstser</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>prj_iid</inverse_name><rdb:join>TEST_.PRJ_IID IN (?)</rdb:join></relation_attribute><rdb:aid>6</rdb:aid><rdb:table>PROJECT__</rdb:table></application_element><application_element><name>tstser</name><basetype>AoSubTest</basetype><application_attribute><name>tstser_iid</name><base_attribute>id</base_attribute><rdb:column>TSTSER_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>mime_type</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MIME_TYPE</rdb:column></application_attribute><relation_attribute><name>prj_iid</name><ref_to>prj</ref_to><base_relation>parent_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>tstser_iid</inverse_name><rdb:column>PRJ_IID</rdb:column><rdb:join>TEST_.TSTSER_IID IN (?) AND TEST_.PRJ_IID=PROJECT__.PRJ_IID</rdb:join></relation_attribute><relation_attribute><name>mea_iid</name><ref_to>mea</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>tstser_iid</inverse_name><rdb:join>MEASUREMENT_.TSTSER_IID IN (?)</rdb:join></relation_attribute><rdb:aid>7</rdb:aid><rdb:table>TEST_</rdb:table></application_element><application_element><name>ins</name><basetype>AoTestEquipment</basetype><application_attribute><name>ins_iid</name><base_attribute>id</base_attribute><rdb:column>INS_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>version</name><base_attribute>version</base_attribute><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>setting</name><datatype>DT_BLOB</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>SETTING</rdb:column><rdb:sql>SELECT BLOB FROM SETUP_ WHERE INS_IID=?</rdb:sql></application_attribute><application_attribute><name>ramp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>RAMP</rdb:column></application_attribute><relation_attribute><name>env_iid</name><ref_to>env</ref_to><base_relation>environment</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>ins_iid</inverse_name><rdb:column>ENV_IID</rdb:column><rdb:join>SETUP_.INS_IID IN (?) AND SETUP_.ENV_IID=ENVIRONMENT_.ENV_IID</rdb:join></relation_attribute><relation_attribute><name>devchain_iid</name><ref_to>devchain</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ins_iid</inverse_name><rdb:join>MEAS.DEV.CHAIN_.INS_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>mea_iid</name><ref_to>mea</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ins_iid</inverse_name><rdb:join>MEASUREMENT_.INS_IID IN (?)</rdb:join></relation_attribute><rdb:aid>8</rdb:aid><rdb:table>SETUP_</rdb:table></application_element><application_element><name>devchain</name><basetype>AoTestEquipmentPart</basetype><application_attribute><name>devofs</name><datatype>DT_FLOAT</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>DEVOFS</rdb:column></application_attribute><application_attribute><name>devchain_iid</name><base_attribute>id</base_attribute><rdb:column>DEVCHAIN_IID</rdb:column></application_attribute><application_attribute><name>smod1inp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SMOD1INP</rdb:column></application_attribute><application_attribute><name>smod2typ</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SMOD2TYP</rdb:column></application_attribute><application_attribute><name>smod2sno</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SMOD2SNO</rdb:column></application_attribute><application_attribute><name>smod2pro</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SMOD2PRO</rdb:column></application_attribute><application_attribute><name>smod2st</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SMOD2ST</rdb:column></application_attribute><application_attribute><name>smod2inp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SMOD2INP</rdb:column></application_attribute><application_attribute><name>imodinp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>IMODINP</rdb:column></application_attribute><application_attribute><name>dev</name><datatype>DT_FLOAT</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>DEV</rdb:column></application_attribute><application_attribute><name>ctrltyp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>CTRLTYP</rdb:column></application_attribute><application_attribute><name>ctrlsno</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>CTRLSNO</rdb:column></application_attribute><application_attribute><name>ctrlpro</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>CTRLPRO</rdb:column></application_attribute><application_attribute><name>ctrlst</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>CTRLST</rdb:column></application_attribute><application_attribute><name>modtyp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MODTYP</rdb:column></application_attribute><application_attribute><name>modsno</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MODSNO</rdb:column></application_attribute><application_attribute><name>modpro</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MODPRO</rdb:column></application_attribute><application_attribute><name>modst</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MODST</rdb:column></application_attribute><application_attribute><name>imodtyp</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>IMODTYP</rdb:column></application_attribute><application_attribute><name>imodsno</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>IMODSNO</rdb:column></application_attribute><application_attribute><name>imodpro</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>IMODPRO</rdb:column></application_attribute><application_attribute><name>imodst</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>IMODST</rdb:column></application_attribute><application_attribute><name>imodswreva</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>IMODSWREVA</rdb:column></application_attribute><application_attribute><name>imodswrevb</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>IMODSWREVB</rdb:column></application_attribute><application_attribute><name>smod1typ</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SMOD1TYP</rdb:column></application_attribute><application_attribute><name>smod1sno</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SMOD1SNO</rdb:column></application_attribute><application_attribute><name>smod1pro</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SMOD1PRO</rdb:column></application_attribute><application_attribute><name>smod1st</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SMOD1ST</rdb:column></application_attribute><application_attribute><name>senstyp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SENSTYP</rdb:column></application_attribute><application_attribute><name>senssno</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SENSSNO</rdb:column></application_attribute><application_attribute><name>senspro</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SENSPRO</rdb:column></application_attribute><application_attribute><name>sensst</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SENSST</rdb:column></application_attribute><relation_attribute><name>ins_iid</name><ref_to>ins</ref_to><base_relation>parent_equipment</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>devchain_iid</inverse_name><rdb:column>INS_IID</rdb:column><rdb:join>MEAS.DEV.CHAIN_.DEVCHAIN_IID IN (?) AND MEAS.DEV.CHAIN_.INS_IID=SETUP_.INS_IID</rdb:join></relation_attribute><relation_attribute><name>meq_iid</name><ref_to>meq</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>sen_iid</inverse_name><rdb:join>MEASURING QUANTITY_.SEN_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>measurement_locations</name><ref_to>measurement_location</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>devchain_iid</inverse_name></relation_attribute><rdb:aid>9</rdb:aid><rdb:table>MEAS.DEV.CHAIN_</rdb:table></application_element><application_element><name>dsk</name><basetype>AoAny</basetype><application_attribute><name>dsk_iid</name><base_attribute>id</base_attribute><rdb:column>DSK_IID</rdb:column></application_attribute><application_attribute><name>created</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CREATED</rdb:column></application_attribute><application_attribute><name>creator</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>CREATOR</rdb:column></application_attribute><application_attribute><name>host</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>HOST</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><relation_attribute><name>mea_iid</name><ref_to>mea</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>dsk_iid</inverse_name><rdb:join>MEASUREMENT_.DSK_IID IN (?)</rdb:join></relation_attribute><rdb:aid>10</rdb:aid><rdb:table>DISKS_</rdb:table></application_element><application_element><name>fremdmotor</name><basetype>AoUnitUnderTest</basetype><application_attribute><name>fremdmotor_iid</name><base_attribute>id</base_attribute><rdb:column>FREMDMOTOR__IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>version</name><base_attribute>version</base_attribute><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>manuf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MANUF_</rdb:column></application_attribute><application_attribute><name>verbr_typ</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERBR_TYP_</rdb:column></application_attribute><application_attribute><name>zylzahl</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ZYLZAHL_</rdb:column></application_attribute><application_attribute><name>bauform</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>BAUFORM_</rdb:column></application_attribute><application_attribute><name>besond</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>BESOND_</rdb:column></application_attribute><relation_attribute><name>env_iid</name><ref_to>env</ref_to><base_relation>environment</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>fremdmotor_iid</inverse_name><rdb:column>ENV_IID</rdb:column><rdb:join>FREMDMOTOR_.FREMDMOTOR__IID IN (?) AND FREMDMOTOR_.ENV_IID=ENVIRONMENT_.ENV_IID</rdb:join></relation_attribute><relation_attribute><name>fremdmotor.exhaustsystem_iid</name><ref_to>fremdmotor.exhaustsystem</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>fremdmotor_iid</inverse_name><rdb:join>FREMDMOTOR_EXHAUSTSYSTEM.FREMDMOTOR__IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>fremdmotor.motoraufbau_iid</name><ref_to>fremdmotor.motoraufbau</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>fremdmotor_iid</inverse_name><rdb:join>FREMDMOTOR_MOTORAUFBAU.FREMDMOTOR__IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>fremdmotor.additional_iid</name><ref_to>fremdmotor.additional</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>fremdmotor_iid</inverse_name><rdb:join>FREMDMOTOR_ADDITIONAL.FREMDMOTOR__IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>mea_iid</name><ref_to>mea</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>fremdmotor_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MEASUREMENT_.MEA_IID=.MEA_IID AND .FREMDMOTOR__IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>dts_iid</name><ref_to>dts</ref_to><base_relation>measurement</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>fremdmotor_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>DATA-SET_.DTS_IID=.DTS_IID AND .FREMDMOTOR__IID IN (?)</rdb:join></relation_attribute><rdb:aid>11</rdb:aid><rdb:table>FREMDMOTOR_</rdb:table></application_element><application_element><name>fremdmotor.exhaustsystem</name><basetype>AoUnitUnderTestPart</basetype><application_attribute><name>fremdmotor.exhaustsystem_iid</name><base_attribute>id</base_attribute><rdb:column>FREMDMOTOR_EXHAUSTSYSTEM_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>version</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>elbow</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ELBOW_</rdb:column></application_attribute><application_attribute><name>inlet</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>INLET_</rdb:column></application_attribute><application_attribute><name>mixing</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MIXING_</rdb:column></application_attribute><application_attribute><name>cat</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>CAT_</rdb:column></application_attribute><application_attribute><name>dpf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>DPF_</rdb:column></application_attribute><application_attribute><name>fr_mf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>FR_MF_</rdb:column></application_attribute><application_attribute><name>tube2_</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TUBE2__</rdb:column></application_attribute><application_attribute><name>in_mf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>IN_MF_</rdb:column></application_attribute><application_attribute><name>tube3_</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TUBE3__</rdb:column></application_attribute><application_attribute><name>rr_mf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>RR_MF_</rdb:column></application_attribute><application_attribute><name>outlet</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>OUTLET_</rdb:column></application_attribute><application_attribute><name>mount</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MOUNT_</rdb:column></application_attribute><application_attribute><name>absorb</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ABSORB_</rdb:column></application_attribute><application_attribute><name>suspen</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SUSPEN_</rdb:column></application_attribute><application_attribute><name>weitere</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>WEITERE_</rdb:column></application_attribute><application_attribute><name>tube1_</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TUBE1__</rdb:column></application_attribute><relation_attribute><name>fremdmotor_iid</name><ref_to>fremdmotor</ref_to><base_relation>parent_unit_under_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>fremdmotor.exhaustsystem_iid</inverse_name><rdb:column>FREMDMOTOR__IID</rdb:column><rdb:join>FREMDMOTOR_EXHAUSTSYSTEM.FREMDMOTOR_EXHAUSTSYSTEM_IID IN (?) AND FREMDMOTOR_EXHAUSTSYSTEM.FREMDMOTOR__IID=FREMDMOTOR_.FREMDMOTOR__IID</rdb:join></relation_attribute><relation_attribute><name>mea_iid</name><ref_to>mea</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>fremdmotor.exhaustsystem_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MEASUREMENT_.MEA_IID=.MEA_IID AND .FREMDMOTOR_EXHAUSTSYSTEM_IID IN (?)</rdb:join></relation_attribute><rdb:aid>12</rdb:aid><rdb:table>FREMDMOTOR_EXHAUSTSYSTEM</rdb:table></application_element><application_element><name>motor</name><basetype>AoUnitUnderTest</basetype><application_attribute><name>motor_iid</name><base_attribute>id</base_attribute><rdb:column>MOTOR__IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>version</name><base_attribute>version</base_attribute><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>motbegkart</name><datatype>DT_BLOB</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>MOTBEGKART_</rdb:column><rdb:sql>SELECT BLOB FROM MOTOR_ WHERE MOTOR__IID=?</rdb:sql></application_attribute><application_attribute><name>mtyp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MTYP_</rdb:column></application_attribute><application_attribute><name>mtnr</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MTNR_</rdb:column></application_attribute><application_attribute><name>bauz</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>BAUZ_</rdb:column></application_attribute><application_attribute><name>verbrenn</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERBRENN_</rdb:column></application_attribute><application_attribute><name>bauart</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>BAUART_</rdb:column></application_attribute><application_attribute><name>fahrzeug</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>FAHRZEUG_</rdb:column></application_attribute><application_attribute><name>kennz</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KENNZ_</rdb:column></application_attribute><application_attribute><name>gtyp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>GTYP_</rdb:column></application_attribute><application_attribute><name>gnr</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>GNR_</rdb:column></application_attribute><application_attribute><name>riementr</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>RIEMENTR_</rdb:column></application_attribute><application_attribute><name>generator</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>GENERATOR_</rdb:column></application_attribute><application_attribute><name>kmv</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KMV_</rdb:column></application_attribute><application_attribute><name>lhp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LHP_</rdb:column></application_attribute><application_attribute><name>abcpumpe</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ABCPUMPE_</rdb:column></application_attribute><application_attribute><name>aggrsonst</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>AGGRSONST_</rdb:column></application_attribute><application_attribute><name>besond</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>BESOND_</rdb:column></application_attribute><relation_attribute><name>env_iid</name><ref_to>env</ref_to><base_relation>environment</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>motor_iid</inverse_name><rdb:column>ENV_IID</rdb:column><rdb:join>MOTOR_.MOTOR__IID IN (?) AND MOTOR_.ENV_IID=ENVIRONMENT_.ENV_IID</rdb:join></relation_attribute><relation_attribute><name>motor.exhaustsystem_iid</name><ref_to>motor.exhaustsystem</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>motor_iid</inverse_name><rdb:join>MOTOR_EXHAUSTSYSTEM.MOTOR__IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>motor.motoraufbau_iid</name><ref_to>motor.motoraufbau</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>motor_iid</inverse_name><rdb:join>MOTOR_MOTORAUFBAU.MOTOR__IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>motor.additional_iid</name><ref_to>motor.additional</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>motor_iid</inverse_name><rdb:join>MOTOR_ADDITIONAL.MOTOR__IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>mea_iid</name><ref_to>mea</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>motor_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MEASUREMENT_.MEA_IID=.MEA_IID AND .MOTOR__IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>dts_iid</name><ref_to>dts</ref_to><base_relation>measurement</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>motor_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>DATA-SET_.DTS_IID=.DTS_IID AND .MOTOR__IID IN (?)</rdb:join></relation_attribute><rdb:aid>13</rdb:aid><rdb:table>MOTOR_</rdb:table></application_element><application_element><name>motor.exhaustsystem</name><basetype>AoUnitUnderTestPart</basetype><application_attribute><name>motor.exhaustsystem_iid</name><base_attribute>id</base_attribute><rdb:column>MOTOR_EXHAUSTSYSTEM_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>version</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>elbow</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ELBOW_</rdb:column></application_attribute><application_attribute><name>suspen</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SUSPEN_</rdb:column></application_attribute><application_attribute><name>inlet</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>INLET_</rdb:column></application_attribute><application_attribute><name>mixing</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MIXING_</rdb:column></application_attribute><application_attribute><name>cat</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>CAT_</rdb:column></application_attribute><application_attribute><name>dpf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>DPF_</rdb:column></application_attribute><application_attribute><name>tube1_</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TUBE1__</rdb:column></application_attribute><application_attribute><name>fr_mf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>FR_MF_</rdb:column></application_attribute><application_attribute><name>tube2_</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TUBE2__</rdb:column></application_attribute><application_attribute><name>in_mf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>IN_MF_</rdb:column></application_attribute><application_attribute><name>tube3_</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TUBE3__</rdb:column></application_attribute><application_attribute><name>rr_mf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>RR_MF_</rdb:column></application_attribute><application_attribute><name>outlet</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>OUTLET_</rdb:column></application_attribute><application_attribute><name>mount</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MOUNT_</rdb:column></application_attribute><application_attribute><name>absorb</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ABSORB_</rdb:column></application_attribute><application_attribute><name>weitere</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>WEITERE_</rdb:column></application_attribute><relation_attribute><name>motor_iid</name><ref_to>motor</ref_to><base_relation>parent_unit_under_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>motor.exhaustsystem_iid</inverse_name><rdb:column>MOTOR__IID</rdb:column><rdb:join>MOTOR_EXHAUSTSYSTEM.MOTOR_EXHAUSTSYSTEM_IID IN (?) AND MOTOR_EXHAUSTSYSTEM.MOTOR__IID=MOTOR_.MOTOR__IID</rdb:join></relation_attribute><relation_attribute><name>mea_iid</name><ref_to>mea</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>motor.exhaustsystem_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MEASUREMENT_.MEA_IID=.MEA_IID AND .MOTOR_EXHAUSTSYSTEM_IID IN (?)</rdb:join></relation_attribute><rdb:aid>14</rdb:aid><rdb:table>MOTOR_EXHAUSTSYSTEM</rdb:table></application_element><application_element><name>messtext</name><basetype>AoTestSequence</basetype><application_attribute><name>messtext_iid</name><base_attribute>id</base_attribute><rdb:column>MESSTEXT__IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>version</name><base_attribute>version</base_attribute><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>aufnehmer</name><datatype>DT_BLOB</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>AUFNEHMER_</rdb:column><rdb:sql>SELECT BLOB FROM MESSTEXT_ WHERE MESSTEXT__IID=?</rdb:sql></application_attribute><application_attribute><name>t</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>T_</rdb:column></application_attribute><relation_attribute><name>env_iid</name><ref_to>env</ref_to><base_relation>environment</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>messtext_iid</inverse_name><rdb:column>ENV_IID</rdb:column><rdb:join>MESSTEXT_.MESSTEXT__IID IN (?) AND MESSTEXT_.ENV_IID=ENVIRONMENT_.ENV_IID</rdb:join></relation_attribute><relation_attribute><name>mea_iid</name><ref_to>mea</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>messtext_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MEASUREMENT_.MEA_IID=.MEA_IID AND .MESSTEXT__IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>dts_iid</name><ref_to>dts</ref_to><base_relation>measurement</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>messtext_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>DATA-SET_.DTS_IID=.DTS_IID AND .MESSTEXT__IID IN (?)</rdb:join></relation_attribute><rdb:aid>15</rdb:aid><rdb:table>MESSTEXT_</rdb:table></application_element><application_element><name>randbedingung</name><basetype>AoAny</basetype><application_attribute><name>version</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>randbedingung_iid</name><base_attribute>id</base_attribute><rdb:column>RANDBEDINGUNG__IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>ftemp</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>FTEMP_</rdb:column></application_attribute><application_attribute><name>wgeschw</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>WGESCHW_</rdb:column></application_attribute><application_attribute><name>wricht</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>WRICHT_</rdb:column></application_attribute><application_attribute><name>mdat</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MDAT_</rdb:column></application_attribute><application_attribute><name>mtim</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MTIM_</rdb:column></application_attribute><application_attribute><name>mort</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MORT_</rdb:column></application_attribute><application_attribute><name>prbes</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>PRBES_</rdb:column></application_attribute><application_attribute><name>ltemp</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>LTEMP_</rdb:column></application_attribute><application_attribute><name>ldruck</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>LDRUCK_</rdb:column></application_attribute><application_attribute><name>feuchte</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>FEUCHTE_</rdb:column></application_attribute><relation_attribute><name>env_iid</name><ref_to>env</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>randbedingung_iid</inverse_name><rdb:column>ENV_IID</rdb:column><rdb:join>RANDBEDINGUNG_.RANDBEDINGUNG__IID IN (?) AND RANDBEDINGUNG_.ENV_IID=ENVIRONMENT_.ENV_IID</rdb:join></relation_attribute><relation_attribute><name>mea-for-AnyId</name><ref_to>mea</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>AnyId</inverse_name><rdb:reftable/><rdb:refname>AnyId</rdb:refname><rdb:join>MEASUREMENT_.MEA_IID=.MEA_IID AND .RANDBEDINGUNG__IID IN (?)</rdb:join></relation_attribute><rdb:aid>16</rdb:aid><rdb:table>RANDBEDINGUNG_</rdb:table></application_element><application_element><name>messzyklus</name><basetype>AoAny</basetype><application_attribute><name>messzyklus_iid</name><base_attribute>id</base_attribute><rdb:column>MESSZYKLUS__IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>version</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>zyklus</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ZYKLUS_</rdb:column></application_attribute><application_attribute><name>zykl_ber</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ZYKL_BER_</rdb:column></application_attribute><application_attribute><name>lastzust</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LASTZUST_</rdb:column></application_attribute><application_attribute><name>kueb</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KUEB_</rdb:column></application_attribute><application_attribute><name>aufnehmer</name><datatype>DT_BLOB</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>AUFNEHMER_</rdb:column><rdb:sql>SELECT BLOB FROM MESSZYKLUS_ WHERE MESSZYKLUS__IID=?</rdb:sql></application_attribute><application_attribute><name>gang</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>GANG_</rdb:column></application_attribute><application_attribute><name>kmvkomm</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KMVKOMM_</rdb:column></application_attribute><application_attribute><name>lhp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LHP_</rdb:column></application_attribute><application_attribute><name>lhpkomm</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LHPKOMM_</rdb:column></application_attribute><application_attribute><name>lima</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LIMA_</rdb:column></application_attribute><application_attribute><name>limakomm</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LIMAKOMM_</rdb:column></application_attribute><application_attribute><name>measc</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MEASC_</rdb:column></application_attribute><application_attribute><name>kmv</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KMV_</rdb:column></application_attribute><relation_attribute><name>env_iid</name><ref_to>env</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>messzyklus_iid</inverse_name><rdb:column>ENV_IID</rdb:column><rdb:join>MESSZYKLUS_.MESSZYKLUS__IID IN (?) AND MESSZYKLUS_.ENV_IID=ENVIRONMENT_.ENV_IID</rdb:join></relation_attribute><relation_attribute><name>mea-for-CycId</name><ref_to>mea</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CycId</inverse_name><rdb:reftable/><rdb:refname>CycId</rdb:refname><rdb:join>MEASUREMENT_.MEA_IID=.MEA_IID AND .MESSZYKLUS__IID IN (?)</rdb:join></relation_attribute><rdb:aid>17</rdb:aid><rdb:table>MESSZYKLUS_</rdb:table></application_element><application_element><name>mea</name><basetype>AoSubTest</basetype><application_attribute><name>postproc</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>POSTPROC</rdb:column></application_attribute><application_attribute><name>touchdate</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>TOUCHDATE</rdb:column></application_attribute><application_attribute><name>cirevision</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>CIREVISION</rdb:column></application_attribute><application_attribute><name>version</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>mea_iid</name><base_attribute>id</base_attribute><rdb:column>MEA_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>mime_type</name><base_attribute>mime_type</base_attribute><length>4000</length><rdb:column>MIME_TYPE</rdb:column></application_attribute><application_attribute><name>meastime</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MEASTIME</rdb:column></application_attribute><application_attribute><name>size</name><datatype>DT_LONG</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>SPACE</rdb:column></application_attribute><application_attribute><name>swrevision</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SWREVISION</rdb:column></application_attribute><application_attribute><name>prj</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>PRJ</rdb:column></application_attribute><application_attribute><name>tstser</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TSTSER</rdb:column></application_attribute><application_attribute><name>seq</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SEQ</rdb:column></application_attribute><application_attribute><name>ins</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>INS</rdb:column></application_attribute><application_attribute><name>uut</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>UUT</rdb:column></application_attribute><application_attribute><name>label</name><base_attribute>version</base_attribute><rdb:column>DSK_IID</rdb:column></application_attribute><application_attribute><name>measdate</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>MEASDATE</rdb:column></application_attribute><application_attribute><name>swstate</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SWSTATE</rdb:column></application_attribute><application_attribute><name>state</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>STATE</rdb:column></application_attribute><application_attribute><name>cidate</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CIDATE</rdb:column></application_attribute><application_attribute><name>discpath</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>DISCPATH</rdb:column></application_attribute><application_attribute><name>typ</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TYP</rdb:column></application_attribute><application_attribute><name>tstsubject</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TSTSUBJECT_</rdb:column></application_attribute><application_attribute><name>tststand</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TSTSTAND_</rdb:column></application_attribute><application_attribute><name>expert</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>EXPERT_</rdb:column></application_attribute><application_attribute><name>expertdiv</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>EXPERTDIV_</rdb:column></application_attribute><application_attribute><name>orderer</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ORDERER_</rdb:column></application_attribute><application_attribute><name>ordererdiv</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ORDERERDIV_</rdb:column></application_attribute><application_attribute><name>auftrdat</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>AUFTRDAT_</rdb:column></application_attribute><application_attribute><name>ausfuehrdat</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>AUSFUEHRDAT_</rdb:column></application_attribute><application_attribute><name>kontierung</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KONTIERUNG_</rdb:column></application_attribute><application_attribute><name>auftrnr</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>AUFTRNR_</rdb:column></application_attribute><relation_attribute><name>tstser_iid</name><ref_to>tstser</ref_to><base_relation>parent_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>mea_iid</inverse_name><rdb:column>TSTSER_IID</rdb:column><rdb:join>MEASUREMENT_.MEA_IID IN (?) AND MEASUREMENT_.TSTSER_IID=TEST_.TSTSER_IID</rdb:join></relation_attribute><relation_attribute><name>ins_iid</name><ref_to>ins</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>mea_iid</inverse_name><rdb:column>INS_IID</rdb:column><rdb:join>MEASUREMENT_.MEA_IID IN (?) AND MEASUREMENT_.INS_IID=SETUP_.INS_IID</rdb:join></relation_attribute><relation_attribute><name>dsk_iid</name><ref_to>dsk</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>mea_iid</inverse_name><rdb:column>DSK_IID</rdb:column><rdb:join>MEASUREMENT_.MEA_IID IN (?) AND MEASUREMENT_.DSK_IID=DISKS_.DSK_IID</rdb:join></relation_attribute><application_attribute><name>attachments</name><datatype>DS_EXTERNALREFERENCE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>ATTACHMENTS</rdb:column><rdb:value>'NULL'</rdb:value><rdb:sql>N/A</rdb:sql></application_attribute><relation_attribute><name>dts_iid</name><ref_to>dts</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>mea_iid</inverse_name><rdb:join>DATA-SET_.MEA_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>fremdmotor_iid</name><ref_to>fremdmotor</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>mea_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>FREMDMOTOR_.FREMDMOTOR__IID=.FREMDMOTOR__IID AND .MEA_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>fremdmotor.exhaustsystem_iid</name><ref_to>fremdmotor.exhaustsystem</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>mea_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>FREMDMOTOR_EXHAUSTSYSTEM.FREMDMOTOR_EXHAUSTSYSTEM_IID=.FREMDMOTOR_EXHAUSTSYSTEM_IID AND .MEA_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>motor_iid</name><ref_to>motor</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>mea_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MOTOR_.MOTOR__IID=.MOTOR__IID AND .MEA_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>motor.exhaustsystem_iid</name><ref_to>motor.exhaustsystem</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>mea_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MOTOR_EXHAUSTSYSTEM.MOTOR_EXHAUSTSYSTEM_IID=.MOTOR_EXHAUSTSYSTEM_IID AND .MEA_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>messtext_iid</name><ref_to>messtext</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>mea_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MESSTEXT_.MESSTEXT__IID=.MESSTEXT__IID AND .MEA_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>AnyId</name><ref_to>randbedingung</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>mea-for-AnyId</inverse_name><rdb:reftable/><rdb:refname>AnyId</rdb:refname><rdb:join>RANDBEDINGUNG_.RANDBEDINGUNG__IID=.RANDBEDINGUNG__IID AND .MEA_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>CycId</name><ref_to>messzyklus</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>mea-for-CycId</inverse_name><rdb:reftable/><rdb:refname>CycId</rdb:refname><rdb:join>MESSZYKLUS_.MESSZYKLUS__IID=.MESSZYKLUS__IID AND .MEA_IID IN (?)</rdb:join></relation_attribute><rdb:aid>18</rdb:aid><rdb:table>MEASUREMENT_</rdb:table></application_element><application_element><name>pas</name><basetype>AoParameterSet</basetype><application_attribute><name>pas_iid</name><base_attribute>id</base_attribute><rdb:column>PAS_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>version</name><base_attribute>version</base_attribute><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>description</name><base_attribute>description</base_attribute><length>4000</length><rdb:column>DESCR</rdb:column></application_attribute><relation_attribute><name>par_iid</name><ref_to>par</ref_to><base_relation>parameters</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>pas_iid</inverse_name><rdb:join>PARAMETER_.PAS_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>meq_iid</name><ref_to>meq</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>pas_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MEASURING QUANTITY_.MEQ_IID=.MEQ_IID AND .PAS_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>dts_iid</name><ref_to>dts</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>pas_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>DATA-SET_.DTS_IID=.DTS_IID AND .PAS_IID IN (?)</rdb:join></relation_attribute><rdb:aid>19</rdb:aid><rdb:table>PARAMETER-SET_</rdb:table></application_element><application_element><name>dts</name><basetype>AoMeasurement</basetype><application_attribute><name>dts_iid</name><base_attribute>id</base_attribute><rdb:column>DTS_IID</rdb:column></application_attribute><application_attribute><name>measbegin</name><base_attribute>measurement_begin</base_attribute><rdb:column>MEASBEGIN</rdb:column></application_attribute><application_attribute><name>measend</name><base_attribute>measurement_end</base_attribute><rdb:column>MEASEND</rdb:column></application_attribute><application_attribute><name>version</name><base_attribute>version</base_attribute><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>mime_type</name><base_attribute>mime_type</base_attribute><length>4000</length><rdb:column>MIME_TYPE</rdb:column></application_attribute><relation_attribute><name>mea_iid</name><ref_to>mea</ref_to><base_relation>test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>dts_iid</inverse_name><rdb:column>MEA_IID</rdb:column><rdb:join>DATA-SET_.DTS_IID IN (?) AND DATA-SET_.MEA_IID=MEASUREMENT_.MEA_IID</rdb:join></relation_attribute><relation_attribute><name>meq_iid</name><ref_to>meq</ref_to><base_relation>measurement_quantities</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>dts_iid</inverse_name><rdb:join>MEASURING QUANTITY_.DTS_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>pas_iid</name><ref_to>pas</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>dts_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>PARAMETER-SET_.PAS_IID=.PAS_IID AND .DTS_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>fremdmotor_iid</name><ref_to>fremdmotor</ref_to><base_relation>units_under_test</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>dts_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>FREMDMOTOR_.FREMDMOTOR__IID=.FREMDMOTOR__IID AND .DTS_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>motor_iid</name><ref_to>motor</ref_to><base_relation>units_under_test</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>dts_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MOTOR_.MOTOR__IID=.MOTOR__IID AND .DTS_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>messtext_iid</name><ref_to>messtext</ref_to><base_relation>sequences</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>dts_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MESSTEXT_.MESSTEXT__IID=.MESSTEXT__IID AND .DTS_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>sm_iid</name><ref_to>sm</ref_to><base_relation>submatrices</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>dts_iid</inverse_name></relation_attribute><relation_attribute><name>geometry</name><ref_to>geometry</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>measurements_on_geometry</inverse_name></relation_attribute><rdb:aid>20</rdb:aid><rdb:table>DATA-SET_</rdb:table></application_element><application_element><name>quantity</name><basetype>AoQuantity</basetype><application_attribute><name>quantity_iid</name><base_attribute>id</base_attribute><rdb:column>QUANTITY_IID</rdb:column></application_attribute><application_attribute><name>mime_type</name><base_attribute>mime_type</base_attribute><length>4000</length><rdb:column>MIME_TYPE</rdb:column></application_attribute><application_attribute><name>def_name</name><base_attribute>default_mq_name</base_attribute><length>4000</length><rdb:column>DEF_NAME</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><relation_attribute><name>unt_iid</name><ref_to>unt</ref_to><base_relation>default_unit</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>quantity_iid</inverse_name><rdb:column>UNT_IID</rdb:column><rdb:join>QUANTITY_.QUANTITY_IID IN (?) AND QUANTITY_.UNT_IID=UNIT_.UNT_IID</rdb:join></relation_attribute><relation_attribute><name>pred_iid</name><ref_to>quantity</ref_to><base_relation>predecessor</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>suc_iid</inverse_name><rdb:column>PRED_IID</rdb:column><rdb:join>QUANTITY_.QUANTITY_IID=(SELECT QUANTITY_.PRED_IID FROM QUANTITY_ WHERE QUANTITY_.QUANTITY_IID IN (?))</rdb:join></relation_attribute><relation_attribute><name>suc_iid</name><ref_to>quantity</ref_to><base_relation>successors</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>pred_iid</inverse_name><rdb:join>QUANTITY_.PRED_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>meq_iid</name><ref_to>meq</ref_to><base_relation>measurement_quantities</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>quantity_iid</inverse_name><rdb:join>MEASURING QUANTITY_.QUANTITY_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>grq_iid</name><ref_to>grq</ref_to><base_relation>groups</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>quantity_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>QUANTITYSYSTEM_.GRQ_IID=.GRQ_IID AND .QUANTITY_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>meq-for-non_reference_channel_quantity</name><ref_to>meq</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>non_reference_channel_quantity</inverse_name><rdb:reftable/><rdb:refname>non_reference_channel_quantity</rdb:refname><rdb:join>MEASURING QUANTITY_.MEQ_IID=.MEQ_IID AND .QUANTITY_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>meq-for-reference_channel_quantity</name><ref_to>meq</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>reference_channel_quantity</inverse_name><rdb:reftable/><rdb:refname>reference_channel_quantity</rdb:refname><rdb:join>MEASURING QUANTITY_.MEQ_IID=.MEQ_IID AND .QUANTITY_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>used_in_measurement_locations</name><ref_to>measurement_location</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>channel_quantity</inverse_name></relation_attribute><rdb:aid>21</rdb:aid><rdb:table>QUANTITY_</rdb:table></application_element><application_element><name>meq</name><basetype>AoMeasurementQuantity</basetype><application_attribute><name>meq_iid</name><base_attribute>id</base_attribute><rdb:column>MEQ_IID</rdb:column></application_attribute><application_attribute><name>aodt</name><base_attribute>datatype</base_attribute><rdb:column>AODT</rdb:column></application_attribute><application_attribute><name>non_reference_channel_name</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>NONREFCHN</rdb:column></application_attribute><application_attribute><name>reference_channel_name</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>REFCHN</rdb:column></application_attribute><application_attribute><name>min_val</name><base_attribute>minimum</base_attribute><rdb:column>MIN_VAL</rdb:column></application_attribute><application_attribute><name>max_val</name><base_attribute>maximum</base_attribute><rdb:column>MAX_VAL</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>description</name><base_attribute>description</base_attribute><length>4000</length><rdb:column>DESCR</rdb:column></application_attribute><application_attribute><name>mime_type</name><base_attribute>mime_type</base_attribute><length>4000</length><rdb:column>MIME_TYPE</rdb:column></application_attribute><relation_attribute><name>dts_iid</name><ref_to>dts</ref_to><base_relation>measurement</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>meq_iid</inverse_name><rdb:column>DTS_IID</rdb:column><rdb:join>MEASURING QUANTITY_.MEQ_IID IN (?) AND MEASURING QUANTITY_.DTS_IID=DATA-SET_.DTS_IID</rdb:join></relation_attribute><relation_attribute><name>quantity_iid</name><ref_to>quantity</ref_to><base_relation>quantity</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>meq_iid</inverse_name><rdb:column>QUANTITY_IID</rdb:column><rdb:join>MEASURING QUANTITY_.MEQ_IID IN (?) AND MEASURING QUANTITY_.QUANTITY_IID=QUANTITY_.QUANTITY_IID</rdb:join></relation_attribute><relation_attribute><name>sen_iid</name><ref_to>devchain</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>meq_iid</inverse_name><rdb:column>SEN_IID</rdb:column><rdb:join>MEASURING QUANTITY_.MEQ_IID IN (?) AND MEASURING QUANTITY_.SEN_IID=MEAS.DEV.CHAIN_.DEVCHAIN_IID</rdb:join></relation_attribute><relation_attribute><name>unt_iid</name><ref_to>unt</ref_to><base_relation>unit</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>meq_iid</inverse_name><rdb:column>UNT_IID</rdb:column><rdb:join>MEASURING QUANTITY_.MEQ_IID IN (?) AND MEASURING QUANTITY_.UNT_IID=UNIT_.UNT_IID</rdb:join></relation_attribute><relation_attribute><name>non_reference_channel_quantity</name><ref_to>quantity</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>meq-for-non_reference_channel_quantity</inverse_name><rdb:reftable/><rdb:refname>non_reference_channel_quantity</rdb:refname><rdb:join>QUANTITY_.QUANTITY_IID=.QUANTITY_IID AND .MEQ_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>reference_channel_quantity</name><ref_to>quantity</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>meq-for-reference_channel_quantity</inverse_name><rdb:reftable/><rdb:refname>reference_channel_quantity</rdb:refname><rdb:join>QUANTITY_.QUANTITY_IID=.QUANTITY_IID AND .MEQ_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>pas_iid</name><ref_to>pas</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>meq_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>PARAMETER-SET_.PAS_IID=.PAS_IID AND .MEQ_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>lc_iid</name><ref_to>lc</ref_to><base_relation>local_columns</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>meq_iid</inverse_name></relation_attribute><relation_attribute><name>non_reference_locations</name><ref_to>measurement_location</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>in_reference_location</inverse_name></relation_attribute><relation_attribute><name>reference_locations</name><ref_to>measurement_location</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>in_non_reference_location</inverse_name></relation_attribute><rdb:aid>22</rdb:aid><rdb:table>MEASURING QUANTITY_</rdb:table></application_element><application_element><name>par</name><basetype>AoParameter</basetype><application_attribute><name>par_iid</name><base_attribute>id</base_attribute><rdb:column>PAR_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>pval</name><base_attribute>pvalue</base_attribute><length>4000</length><rdb:column>PVAL</rdb:column></application_attribute><application_attribute><name>ptyp</name><base_attribute>parameter_datatype</base_attribute><rdb:column>PTYP</rdb:column></application_attribute><relation_attribute><name>unt_iid</name><ref_to>unt</ref_to><base_relation>unit</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>par_iid</inverse_name><rdb:column>UNT_IID</rdb:column><rdb:join>PARAMETER_.PAR_IID IN (?) AND PARAMETER_.UNT_IID=UNIT_.UNT_IID</rdb:join></relation_attribute><relation_attribute><name>pas_iid</name><ref_to>pas</ref_to><base_relation>parameter_set</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>par_iid</inverse_name><rdb:column>PAS_IID</rdb:column><rdb:join>PARAMETER_.PAR_IID IN (?) AND PARAMETER_.PAS_IID=PARAMETER-SET_.PAS_IID</rdb:join></relation_attribute><rdb:aid>26</rdb:aid><rdb:table>PARAMETER_</rdb:table></application_element><application_element><name>fremdmotor.motoraufbau</name><basetype>AoUnitUnderTestPart</basetype><application_attribute><name>fremdmotor.motoraufbau_iid</name><base_attribute>id</base_attribute><rdb:column>FREMDMOTOR_MOTORAUFBAU_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>version</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>kurbelwelle</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KURBELWELLE_</rdb:column></application_attribute><application_attribute><name>kolben</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KOLBEN_</rdb:column></application_attribute><application_attribute><name>ladeluftkueh</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LADELUFTKUEH_</rdb:column></application_attribute><application_attribute><name>ladeluftleit</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LADELUFTLEIT_</rdb:column></application_attribute><application_attribute><name>absblenden</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ABSBLENDEN_</rdb:column></application_attribute><application_attribute><name>kraftstoff</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KRAFTSTOFF_</rdb:column></application_attribute><application_attribute><name>klopfregelung</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KLOPFREGELUNG_</rdb:column></application_attribute><application_attribute><name>gelenkwelle</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>GELENKWELLE_</rdb:column></application_attribute><application_attribute><name>sonst</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SONST_</rdb:column></application_attribute><application_attribute><name>swstand</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SWSTAND_</rdb:column></application_attribute><application_attribute><name>abdeckung</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ABDECKUNG_</rdb:column></application_attribute><application_attribute><name>rohlufthutzen</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ROHLUFTHUTZEN_</rdb:column></application_attribute><application_attribute><name>luftfilter</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LUFTFILTER_</rdb:column></application_attribute><application_attribute><name>oelwanne</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>OELWANNE_</rdb:column></application_attribute><application_attribute><name>motorlager</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MOTORLAGER_</rdb:column></application_attribute><application_attribute><name>motortraeger</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MOTORTRAEGER_</rdb:column></application_attribute><application_attribute><name>getriebelager</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>GETRIEBELAGER_</rdb:column></application_attribute><application_attribute><name>torsdaempf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TORSDAEMPF_</rdb:column></application_attribute><application_attribute><name>kurbelgeh</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KURBELGEH_</rdb:column></application_attribute><application_attribute><name>zylkopf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ZYLKOPF_</rdb:column></application_attribute><relation_attribute><name>fremdmotor_iid</name><ref_to>fremdmotor</ref_to><base_relation>parent_unit_under_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>fremdmotor.motoraufbau_iid</inverse_name><rdb:column>FREMDMOTOR__IID</rdb:column><rdb:join>FREMDMOTOR_MOTORAUFBAU.FREMDMOTOR_MOTORAUFBAU_IID IN (?) AND FREMDMOTOR_MOTORAUFBAU.FREMDMOTOR__IID=FREMDMOTOR_.FREMDMOTOR__IID</rdb:join></relation_attribute><rdb:aid>27</rdb:aid><rdb:table>FREMDMOTOR_MOTORAUFBAU</rdb:table></application_element><application_element><name>fremdmotor.additional</name><basetype>AoUnitUnderTestPart</basetype><application_attribute><name>fremdmotor.additional_iid</name><base_attribute>id</base_attribute><rdb:column>FREMDMOTOR_ADDITIONAL_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>version</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>add</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ADD_</rdb:column></application_attribute><application_attribute><name>auftrag</name><datatype>DT_BLOB</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>AUFTRAG_</rdb:column><rdb:sql>SELECT BLOB FROM FREMDMOTOR_ADDITIONAL WHERE FREMDMOTOR_ADDITIONAL_IID=?</rdb:sql></application_attribute><relation_attribute><name>fremdmotor_iid</name><ref_to>fremdmotor</ref_to><base_relation>parent_unit_under_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>fremdmotor.additional_iid</inverse_name><rdb:column>FREMDMOTOR__IID</rdb:column><rdb:join>FREMDMOTOR_ADDITIONAL.FREMDMOTOR_ADDITIONAL_IID IN (?) AND FREMDMOTOR_ADDITIONAL.FREMDMOTOR__IID=FREMDMOTOR_.FREMDMOTOR__IID</rdb:join></relation_attribute><rdb:aid>28</rdb:aid><rdb:table>FREMDMOTOR_ADDITIONAL</rdb:table></application_element><application_element><name>motor.motoraufbau</name><basetype>AoUnitUnderTestPart</basetype><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>version</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>motor.motoraufbau_iid</name><base_attribute>id</base_attribute><rdb:column>MOTOR_MOTORAUFBAU_IID</rdb:column></application_attribute><application_attribute><name>swstand</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SWSTAND_</rdb:column></application_attribute><application_attribute><name>abdeckung</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ABDECKUNG_</rdb:column></application_attribute><application_attribute><name>rohlufthutzen</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ROHLUFTHUTZEN_</rdb:column></application_attribute><application_attribute><name>luftfilter</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LUFTFILTER_</rdb:column></application_attribute><application_attribute><name>oelwanne</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>OELWANNE_</rdb:column></application_attribute><application_attribute><name>motorlager</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MOTORLAGER_</rdb:column></application_attribute><application_attribute><name>motortraeger</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MOTORTRAEGER_</rdb:column></application_attribute><application_attribute><name>getriebelager</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>GETRIEBELAGER_</rdb:column></application_attribute><application_attribute><name>torsdaempf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TORSDAEMPF_</rdb:column></application_attribute><application_attribute><name>zylkopf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ZYLKOPF_</rdb:column></application_attribute><application_attribute><name>kurbelgeh</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KURBELGEH_</rdb:column></application_attribute><application_attribute><name>kurbelwelle</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KURBELWELLE_</rdb:column></application_attribute><application_attribute><name>kolben</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KOLBEN_</rdb:column></application_attribute><application_attribute><name>ladeluftkueh</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LADELUFTKUEH_</rdb:column></application_attribute><application_attribute><name>ladeluftleit</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LADELUFTLEIT_</rdb:column></application_attribute><application_attribute><name>absblenden</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ABSBLENDEN_</rdb:column></application_attribute><application_attribute><name>kraftstoff</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KRAFTSTOFF_</rdb:column></application_attribute><application_attribute><name>klopfregelung</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KLOPFREGELUNG_</rdb:column></application_attribute><application_attribute><name>sonst</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SONST_</rdb:column></application_attribute><application_attribute><name>gelenkwelle</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>GELENKWELLE_</rdb:column></application_attribute><relation_attribute><name>motor_iid</name><ref_to>motor</ref_to><base_relation>parent_unit_under_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>motor.motoraufbau_iid</inverse_name><rdb:column>MOTOR__IID</rdb:column><rdb:join>MOTOR_MOTORAUFBAU.MOTOR_MOTORAUFBAU_IID IN (?) AND MOTOR_MOTORAUFBAU.MOTOR__IID=MOTOR_.MOTOR__IID</rdb:join></relation_attribute><rdb:aid>29</rdb:aid><rdb:table>MOTOR_MOTORAUFBAU</rdb:table></application_element><application_element><name>motor.additional</name><basetype>AoUnitUnderTestPart</basetype><application_attribute><name>motor.additional_iid</name><base_attribute>id</base_attribute><rdb:column>MOTOR_ADDITIONAL_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>version</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>add</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ADD_</rdb:column></application_attribute><application_attribute><name>auftrag</name><datatype>DT_BLOB</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>AUFTRAG_</rdb:column><rdb:sql>SELECT BLOB FROM MOTOR_ADDITIONAL WHERE MOTOR_ADDITIONAL_IID=?</rdb:sql></application_attribute><relation_attribute><name>motor_iid</name><ref_to>motor</ref_to><base_relation>parent_unit_under_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>motor.additional_iid</inverse_name><rdb:column>MOTOR__IID</rdb:column><rdb:join>MOTOR_ADDITIONAL.MOTOR_ADDITIONAL_IID IN (?) AND MOTOR_ADDITIONAL.MOTOR__IID=MOTOR_.MOTOR__IID</rdb:join></relation_attribute><rdb:aid>30</rdb:aid><rdb:table>MOTOR_ADDITIONAL</rdb:table></application_element><application_element><name>sm</name><basetype>AoSubmatrix</basetype><application_attribute><name>sm_iid</name><base_attribute>id</base_attribute></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute></application_attribute><application_attribute><name>mime_type</name><base_attribute>mime_type</base_attribute></application_attribute><application_attribute><name>number_of_rows</name><base_attribute>number_of_rows</base_attribute></application_attribute><relation_attribute><name>lc_iid</name><ref_to>lc</ref_to><base_relation>local_columns</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>sm_iid</inverse_name></relation_attribute><relation_attribute><name>dts_iid</name><ref_to>dts</ref_to><base_relation>measurement</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>sm_iid</inverse_name></relation_attribute><relation_attribute><name>x-axis-for-y-axis</name><ref_to>sm</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>y-axis-for-x-axis</inverse_name></relation_attribute><relation_attribute><name>z-axis-for-y-axis</name><ref_to>sm</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>y-axis-for-z-axis</inverse_name></relation_attribute><relation_attribute><name>y-axis-for-x-axis</name><ref_to>sm</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>x-axis-for-y-axis</inverse_name></relation_attribute><relation_attribute><name>y-axis-for-z-axis</name><ref_to>sm</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>z-axis-for-y-axis</inverse_name></relation_attribute><relation_attribute><name>geometry</name><ref_to>geometry</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>geometry_shapes</inverse_name></relation_attribute></application_element><application_element><name>lc</name><basetype>AoLocalColumn</basetype><application_attribute><name>lc_iid</name><base_attribute>id</base_attribute></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute></application_attribute><application_attribute><name>independent</name><base_attribute>independent</base_attribute></application_attribute><application_attribute><name>values</name><base_attribute>values</base_attribute></application_attribute><application_attribute><name>sequence_representation</name><base_attribute>sequence_representation</base_attribute></application_attribute><application_attribute><name>generation_parameters</name><base_attribute>generation_parameters</base_attribute></application_attribute><application_attribute><name>raw_datatype</name><base_attribute>raw_datatype</base_attribute></application_attribute><application_attribute><name>axistype</name><datatype>DT_ENUM</datatype><enumeration_type>axistype</enumeration_type></application_attribute><application_attribute><name>global_flag</name><base_attribute>global_flag</base_attribute></application_attribute><application_attribute><name>flags</name><base_attribute>flags</base_attribute></application_attribute><relation_attribute><name>ec_iid</name><ref_to>ec</ref_to><base_relation>external_component</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>lc_iid</inverse_name></relation_attribute><relation_attribute><name>sm_iid</name><ref_to>sm</ref_to><base_relation>submatrix</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>lc_iid</inverse_name></relation_attribute><relation_attribute><name>meq_iid</name><ref_to>meq</ref_to><base_relation>measurement_quantity</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>lc_iid</inverse_name></relation_attribute></application_element><application_element><name>ec</name><basetype>AoExternalComponent</basetype><application_attribute><name>ec_iid</name><base_attribute>id</base_attribute></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute></application_attribute><application_attribute><name>description</name><base_attribute>description</base_attribute></application_attribute><application_attribute><name>ordinal_number</name><base_attribute>ordinal_number</base_attribute></application_attribute><application_attribute><name>component_length</name><base_attribute>component_length</base_attribute></application_attribute><application_attribute><name>filename_url</name><base_attribute>filename_url</base_attribute></application_attribute><application_attribute><name>value_type</name><base_attribute>value_type</base_attribute></application_attribute><application_attribute><name>start_offset</name><base_attribute>start_offset</base_attribute></application_attribute><application_attribute><name>block_size</name><base_attribute>block_size</base_attribute></application_attribute><application_attribute><name>valuesperblock</name><base_attribute>valuesperblock</base_attribute></application_attribute><application_attribute><name>value_offset</name><base_attribute>value_offset</base_attribute></application_attribute><relation_attribute><name>lc_iid</name><ref_to>lc</ref_to><base_relation>local_column</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>ec_iid</inverse_name></relation_attribute></application_element><application_element><name>coordinate_system</name><basetype>AoAny</basetype><application_attribute><name>id</name><base_attribute>id</base_attribute></application_attribute><application_attribute><name>name</name><base_attribute>name</base_attribute></application_attribute><application_attribute><name>version</name><base_attribute>version</base_attribute></application_attribute><application_attribute><name>coordinate_system_type</name><datatype>DT_ENUM</datatype><enumeration_type>coordinate_system_types</enumeration_type></application_attribute><application_attribute><name>origin_1</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory></application_attribute><application_attribute><name>origin_2</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory></application_attribute><application_attribute><name>origin_3</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory></application_attribute><application_attribute><name>x_axis_1</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory></application_attribute><application_attribute><name>x_axis_2</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory></application_attribute><application_attribute><name>x_axis_3</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory></application_attribute><application_attribute><name>xz_plane_1</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory></application_attribute><application_attribute><name>xz_plane_2</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory></application_attribute><application_attribute><name>xz_plane_3</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory></application_attribute><relation_attribute><name>reference_system</name><ref_to>coordinate_system</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>locale_systems</inverse_name></relation_attribute><relation_attribute><name>locale_systems</name><ref_to>coordinate_system</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>reference_system</inverse_name></relation_attribute><relation_attribute><name>used_in_geometries</name><ref_to>geometry</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>coordinate_system</inverse_name></relation_attribute><relation_attribute><name>used_in_measurement_locations</name><ref_to>measurement_location</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>coordinate_system</inverse_name></relation_attribute></application_element><application_element><name>geometry</name><basetype>AoAny</basetype><application_attribute><name>id</name><base_attribute>id</base_attribute></application_attribute><application_attribute><name>name</name><base_attribute>name</base_attribute></application_attribute><application_attribute><name>version</name><base_attribute>version</base_attribute></application_attribute><application_attribute><name>geometry_id</name><datatype>DT_LONG</datatype></application_attribute><relation_attribute><name>coordinate_system</name><ref_to>coordinate_system</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>used_in_geometries</inverse_name></relation_attribute><relation_attribute><name>sub_geometries</name><ref_to>geometry</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>parent_geometry</inverse_name></relation_attribute><relation_attribute><name>parent_geometry</name><ref_to>geometry</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>sub_geometries</inverse_name></relation_attribute><relation_attribute><name>measurements_on_geometry</name><ref_to>dts</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>geometry</inverse_name></relation_attribute><relation_attribute><name>geometry_shapes</name><ref_to>sm</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>geometry</inverse_name></relation_attribute></application_element><application_element><name>measurement_location</name><basetype>AoTestEquipmentPart</basetype><application_attribute><name>id</name><base_attribute>id</base_attribute></application_attribute><application_attribute><name>name</name><base_attribute>name</base_attribute></application_attribute><application_attribute><name>location_shape_id</name><datatype>DT_LONG</datatype><obligatory>true</obligatory></application_attribute><application_attribute><name>location_geometry_id</name><datatype>DT_LONG</datatype><obligatory>true</obligatory></application_attribute><application_attribute><name>location_mode</name><datatype>DT_ENUM</datatype><enumeration_type>location_modes</enumeration_type><obligatory>true</obligatory></application_attribute><application_attribute><name>channel_name</name><datatype>DT_STRING</datatype><obligatory>true</obligatory></application_attribute><application_attribute><name>channel_description</name><datatype>DT_STRING</datatype><obligatory>true</obligatory></application_attribute><application_attribute><name>u</name><datatype>DT_FLOAT</datatype><obligatory>true</obligatory></application_attribute><application_attribute><name>v</name><datatype>DT_FLOAT</datatype><obligatory>true</obligatory></application_attribute><application_attribute><name>w</name><datatype>DT_FLOAT</datatype><obligatory>true</obligatory></application_attribute><relation_attribute><name>coordinate_system</name><ref_to>coordinate_system</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>used_in_measurement_locations</inverse_name></relation_attribute><relation_attribute><name>channel_quantity</name><ref_to>quantity</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>used_in_measurement_locations</inverse_name></relation_attribute><relation_attribute><name>in_reference_location</name><ref_to>meq</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>reference_locations</inverse_name></relation_attribute><relation_attribute><name>in_non_reference_location</name><ref_to>meq</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>non_reference_locations</inverse_name></relation_attribute><relation_attribute><name>devchain_iid</name><ref_to>devchain</ref_to><base_relation>parent_equipment_part</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>measurement_locations</inverse_name></relation_attribute></application_element></application_model></atfx_file>
+
diff --git a/org.eclipse.mdm.filerelease/src/main/configuration/EXP/model.atfx.technical b/org.eclipse.mdm.filerelease/src/main/configuration/EXP/model.atfx.technical
new file mode 100644
index 0000000..19c9e77
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/main/configuration/EXP/model.atfx.technical
@@ -0,0 +1,17 @@
+<!-- ********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ******************************************************************************** -->
+﻿<?xml version="1.0" encoding="utf-8"?>
+
+<atfx_file xmlns="http://www.asam.net/ODS/5.1/Schema" version="atfx_file: V1.1.0" xmlns:ext="urn:schemas-microsoft-com:xslt" xmlns:rdb="http://www.muellerbbm-vas.de/ods/rdb" xmlns:utils="java:vas.xml.Util"><base_model_version>asam29</base_model_version><application_model><application_enumeration><name>axistype</name><item><name>Xaxis</name><value>0</value></item><item><name>Yaxis</name><value>1</value></item><item><name>Both</name><value>2</value></item></application_enumeration><application_enumeration><name>coordinate_system_types</name><item><name>Cartesian</name><value>0</value></item><item><name>Polar</name><value>1</value></item><item><name>Cylindric</name><value>2</value></item></application_enumeration><application_enumeration><name>location_modes</name><item><name>Fixed</name><value>0</value></item><item><name>Varying</name><value>1</value></item></application_enumeration><application_element><name>env</name><basetype>AoEnvironment</basetype><application_attribute><name>env_iid</name><base_attribute>id</base_attribute><rdb:column>ENV_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>skill</name><datatype>DT_LONG</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>SKILL</rdb:column></application_attribute><application_attribute><name>id</name><datatype>DT_LONG</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>ID</rdb:column></application_attribute><application_attribute><name>touched</name><datatype>DT_LONG</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>TOUCHED</rdb:column></application_attribute><application_attribute><name>description</name><base_attribute>description</base_attribute><length>4000</length><rdb:column>DESCR</rdb:column></application_attribute><application_attribute><name>version</name><datatype>DT_LONG</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>VERSION</rdb:column></application_attribute><relation_attribute><name>prj_iid</name><ref_to>prj</ref_to><base_relation>tests</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>env_iid</inverse_name><rdb:join>PROJECT__.ENV_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>ins_iid</name><ref_to>ins</ref_to><base_relation>equipments</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>env_iid</inverse_name><rdb:join>SETUP_.ENV_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>fremdmotor_iid</name><ref_to>fremdmotor</ref_to><base_relation>uuts</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>env_iid</inverse_name><rdb:join>FREMDMOTOR_.ENV_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>motor_iid</name><ref_to>motor</ref_to><base_relation>uuts</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>env_iid</inverse_name><rdb:join>MOTOR_.ENV_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>messtext_iid</name><ref_to>messtext</ref_to><base_relation>sequences</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>env_iid</inverse_name><rdb:join>MESSTEXT_.ENV_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>randbedingung_iid</name><ref_to>randbedingung</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>env_iid</inverse_name><rdb:join>RANDBEDINGUNG_.ENV_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>messzyklus_iid</name><ref_to>messzyklus</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>env_iid</inverse_name><rdb:join>MESSZYKLUS_.ENV_IID IN (?)</rdb:join></relation_attribute><rdb:aid>1</rdb:aid><rdb:table>ENVIRONMENT_</rdb:table></application_element><application_element><name>dim</name><basetype>AoPhysicalDimension</basetype><application_attribute><name>dim_iid</name><base_attribute>id</base_attribute><rdb:column>DIM_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>meter_exp</name><base_attribute>length_exp</base_attribute><rdb:column>LEN</rdb:column></application_attribute><application_attribute><name>kilogramm_exp</name><base_attribute>mass_exp</base_attribute><rdb:column>MASS</rdb:column></application_attribute><application_attribute><name>second_exp</name><base_attribute>time_exp</base_attribute><rdb:column>TIM</rdb:column></application_attribute><application_attribute><name>ampere_exp</name><base_attribute>current_exp</base_attribute><rdb:column>CUR</rdb:column></application_attribute><application_attribute><name>kelvin_exp</name><base_attribute>temperature_exp</base_attribute><rdb:column>T</rdb:column></application_attribute><application_attribute><name>mol_exp</name><base_attribute>molar_amount_exp</base_attribute><rdb:column>PART</rdb:column></application_attribute><application_attribute><name>candela_exp</name><base_attribute>luminous_intensity_exp</base_attribute><rdb:column>LUM</rdb:column></application_attribute><application_attribute><name>angle</name><datatype>DT_LONG</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>ANGLE</rdb:column></application_attribute><relation_attribute><name>unt_iid</name><ref_to>unt</ref_to><base_relation>units</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>dim_iid</inverse_name><rdb:join>UNIT_.DIM_IID IN (?)</rdb:join></relation_attribute><rdb:aid>2</rdb:aid><rdb:table>DIMENSION_</rdb:table></application_element><application_element><name>gru</name><basetype>AoUnitGroup</basetype><application_attribute><name>gru_iid</name><base_attribute>id</base_attribute><rdb:column>GRU_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><relation_attribute><name>unt_iid</name><ref_to>unt</ref_to><base_relation>units</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>gru_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>UNIT_.UNT_IID=.UNT_IID AND .GRU_IID IN (?)</rdb:join></relation_attribute><rdb:aid>3</rdb:aid><rdb:table>UNITSYSTEM_</rdb:table></application_element><application_element><name>unt</name><basetype>AoUnit</basetype><application_attribute><name>unt_iid</name><base_attribute>id</base_attribute><rdb:column>UNT_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>offset</name><base_attribute>offset</base_attribute><rdb:column>OFFSET</rdb:column></application_attribute><application_attribute><name>factor</name><base_attribute>factor</base_attribute><rdb:column>FACTOR</rdb:column></application_attribute><application_attribute><name>dB</name><datatype>DT_SHORT</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>DBFLG</rdb:column></application_attribute><application_attribute><name>dB_reference_factor</name><datatype>DT_FLOAT</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>DBREF</rdb:column></application_attribute><relation_attribute><name>dim_iid</name><ref_to>dim</ref_to><base_relation>phys_dimension</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>unt_iid</inverse_name><rdb:column>DIM_IID</rdb:column><rdb:join>UNIT_.UNT_IID IN (?) AND UNIT_.DIM_IID=DIMENSION_.DIM_IID</rdb:join></relation_attribute><relation_attribute><name>quantity_iid</name><ref_to>quantity</ref_to><base_relation>quantities</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>unt_iid</inverse_name><rdb:join>QUANTITY_.UNT_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>meq_iid</name><ref_to>meq</ref_to><base_relation>measurement_quantities</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>unt_iid</inverse_name><rdb:join>MEASURING QUANTITY_.UNT_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>par_iid</name><ref_to>par</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>unt_iid</inverse_name><rdb:join>PARAMETER_.UNT_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>gru_iid</name><ref_to>gru</ref_to><base_relation>groups</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>unt_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>UNITSYSTEM_.GRU_IID=.GRU_IID AND .UNT_IID IN (?)</rdb:join></relation_attribute><rdb:aid>4</rdb:aid><rdb:table>UNIT_</rdb:table></application_element><application_element><name>grq</name><basetype>AoQuantityGroup</basetype><application_attribute><name>grq_iid</name><base_attribute>id</base_attribute><rdb:column>GRQ_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><relation_attribute><name>quantity_iid</name><ref_to>quantity</ref_to><base_relation>quantities</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>grq_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>QUANTITY_.QUANTITY_IID=.QUANTITY_IID AND .GRQ_IID IN (?)</rdb:join></relation_attribute><rdb:aid>5</rdb:aid><rdb:table>QUANTITYSYSTEM_</rdb:table></application_element><application_element><name>prj</name><basetype>AoTest</basetype><application_attribute><name>prj_iid</name><base_attribute>id</base_attribute><rdb:column>PRJ_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><relation_attribute><name>env_iid</name><ref_to>env</ref_to><base_relation>environment</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>prj_iid</inverse_name><rdb:column>ENV_IID</rdb:column><rdb:join>PROJECT__.PRJ_IID IN (?) AND PROJECT__.ENV_IID=ENVIRONMENT_.ENV_IID</rdb:join></relation_attribute><relation_attribute><name>tstser_iid</name><ref_to>tstser</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>prj_iid</inverse_name><rdb:join>TEST_.PRJ_IID IN (?)</rdb:join></relation_attribute><rdb:aid>6</rdb:aid><rdb:table>PROJECT__</rdb:table></application_element><application_element><name>tstser</name><basetype>AoSubTest</basetype><application_attribute><name>tstser_iid</name><base_attribute>id</base_attribute><rdb:column>TSTSER_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>mime_type</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MIME_TYPE</rdb:column></application_attribute><relation_attribute><name>prj_iid</name><ref_to>prj</ref_to><base_relation>parent_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>tstser_iid</inverse_name><rdb:column>PRJ_IID</rdb:column><rdb:join>TEST_.TSTSER_IID IN (?) AND TEST_.PRJ_IID=PROJECT__.PRJ_IID</rdb:join></relation_attribute><relation_attribute><name>mea_iid</name><ref_to>mea</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>tstser_iid</inverse_name><rdb:join>MEASUREMENT_.TSTSER_IID IN (?)</rdb:join></relation_attribute><rdb:aid>7</rdb:aid><rdb:table>TEST_</rdb:table></application_element><application_element><name>ins</name><basetype>AoTestEquipment</basetype><application_attribute><name>ins_iid</name><base_attribute>id</base_attribute><rdb:column>INS_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>version</name><base_attribute>version</base_attribute><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>setting</name><datatype>DT_BLOB</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>SETTING</rdb:column><rdb:sql>SELECT BLOB FROM SETUP_ WHERE INS_IID=?</rdb:sql></application_attribute><application_attribute><name>ramp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>RAMP</rdb:column></application_attribute><relation_attribute><name>env_iid</name><ref_to>env</ref_to><base_relation>environment</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>ins_iid</inverse_name><rdb:column>ENV_IID</rdb:column><rdb:join>SETUP_.INS_IID IN (?) AND SETUP_.ENV_IID=ENVIRONMENT_.ENV_IID</rdb:join></relation_attribute><relation_attribute><name>devchain_iid</name><ref_to>devchain</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ins_iid</inverse_name><rdb:join>MEAS.DEV.CHAIN_.INS_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>mea_iid</name><ref_to>mea</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>ins_iid</inverse_name><rdb:join>MEASUREMENT_.INS_IID IN (?)</rdb:join></relation_attribute><rdb:aid>8</rdb:aid><rdb:table>SETUP_</rdb:table></application_element><application_element><name>devchain</name><basetype>AoTestEquipmentPart</basetype><application_attribute><name>devofs</name><datatype>DT_FLOAT</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>DEVOFS</rdb:column></application_attribute><application_attribute><name>devchain_iid</name><base_attribute>id</base_attribute><rdb:column>DEVCHAIN_IID</rdb:column></application_attribute><application_attribute><name>smod1inp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SMOD1INP</rdb:column></application_attribute><application_attribute><name>smod2typ</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SMOD2TYP</rdb:column></application_attribute><application_attribute><name>smod2sno</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SMOD2SNO</rdb:column></application_attribute><application_attribute><name>smod2pro</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SMOD2PRO</rdb:column></application_attribute><application_attribute><name>smod2st</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SMOD2ST</rdb:column></application_attribute><application_attribute><name>smod2inp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SMOD2INP</rdb:column></application_attribute><application_attribute><name>imodinp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>IMODINP</rdb:column></application_attribute><application_attribute><name>dev</name><datatype>DT_FLOAT</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>DEV</rdb:column></application_attribute><application_attribute><name>ctrltyp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>CTRLTYP</rdb:column></application_attribute><application_attribute><name>ctrlsno</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>CTRLSNO</rdb:column></application_attribute><application_attribute><name>ctrlpro</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>CTRLPRO</rdb:column></application_attribute><application_attribute><name>ctrlst</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>CTRLST</rdb:column></application_attribute><application_attribute><name>modtyp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MODTYP</rdb:column></application_attribute><application_attribute><name>modsno</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MODSNO</rdb:column></application_attribute><application_attribute><name>modpro</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MODPRO</rdb:column></application_attribute><application_attribute><name>modst</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MODST</rdb:column></application_attribute><application_attribute><name>imodtyp</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>IMODTYP</rdb:column></application_attribute><application_attribute><name>imodsno</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>IMODSNO</rdb:column></application_attribute><application_attribute><name>imodpro</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>IMODPRO</rdb:column></application_attribute><application_attribute><name>imodst</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>IMODST</rdb:column></application_attribute><application_attribute><name>imodswreva</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>IMODSWREVA</rdb:column></application_attribute><application_attribute><name>imodswrevb</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>IMODSWREVB</rdb:column></application_attribute><application_attribute><name>smod1typ</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SMOD1TYP</rdb:column></application_attribute><application_attribute><name>smod1sno</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SMOD1SNO</rdb:column></application_attribute><application_attribute><name>smod1pro</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SMOD1PRO</rdb:column></application_attribute><application_attribute><name>smod1st</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SMOD1ST</rdb:column></application_attribute><application_attribute><name>senstyp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SENSTYP</rdb:column></application_attribute><application_attribute><name>senssno</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SENSSNO</rdb:column></application_attribute><application_attribute><name>senspro</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SENSPRO</rdb:column></application_attribute><application_attribute><name>sensst</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SENSST</rdb:column></application_attribute><relation_attribute><name>ins_iid</name><ref_to>ins</ref_to><base_relation>parent_equipment</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>devchain_iid</inverse_name><rdb:column>INS_IID</rdb:column><rdb:join>MEAS.DEV.CHAIN_.DEVCHAIN_IID IN (?) AND MEAS.DEV.CHAIN_.INS_IID=SETUP_.INS_IID</rdb:join></relation_attribute><relation_attribute><name>meq_iid</name><ref_to>meq</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>sen_iid</inverse_name><rdb:join>MEASURING QUANTITY_.SEN_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>measurement_locations</name><ref_to>measurement_location</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>devchain_iid</inverse_name></relation_attribute><rdb:aid>9</rdb:aid><rdb:table>MEAS.DEV.CHAIN_</rdb:table></application_element><application_element><name>dsk</name><basetype>AoAny</basetype><application_attribute><name>dsk_iid</name><base_attribute>id</base_attribute><rdb:column>DSK_IID</rdb:column></application_attribute><application_attribute><name>created</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CREATED</rdb:column></application_attribute><application_attribute><name>creator</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>CREATOR</rdb:column></application_attribute><application_attribute><name>host</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>HOST</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><relation_attribute><name>mea_iid</name><ref_to>mea</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>dsk_iid</inverse_name><rdb:join>MEASUREMENT_.DSK_IID IN (?)</rdb:join></relation_attribute><rdb:aid>10</rdb:aid><rdb:table>DISKS_</rdb:table></application_element><application_element><name>fremdmotor</name><basetype>AoUnitUnderTest</basetype><application_attribute><name>fremdmotor_iid</name><base_attribute>id</base_attribute><rdb:column>FREMDMOTOR__IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>version</name><base_attribute>version</base_attribute><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>manuf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MANUF_</rdb:column></application_attribute><application_attribute><name>verbr_typ</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERBR_TYP_</rdb:column></application_attribute><application_attribute><name>zylzahl</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ZYLZAHL_</rdb:column></application_attribute><application_attribute><name>bauform</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>BAUFORM_</rdb:column></application_attribute><application_attribute><name>besond</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>BESOND_</rdb:column></application_attribute><relation_attribute><name>env_iid</name><ref_to>env</ref_to><base_relation>environment</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>fremdmotor_iid</inverse_name><rdb:column>ENV_IID</rdb:column><rdb:join>FREMDMOTOR_.FREMDMOTOR__IID IN (?) AND FREMDMOTOR_.ENV_IID=ENVIRONMENT_.ENV_IID</rdb:join></relation_attribute><relation_attribute><name>fremdmotor.exhaustsystem_iid</name><ref_to>fremdmotor.exhaustsystem</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>fremdmotor_iid</inverse_name><rdb:join>FREMDMOTOR_EXHAUSTSYSTEM.FREMDMOTOR__IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>fremdmotor.motoraufbau_iid</name><ref_to>fremdmotor.motoraufbau</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>fremdmotor_iid</inverse_name><rdb:join>FREMDMOTOR_MOTORAUFBAU.FREMDMOTOR__IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>fremdmotor.additional_iid</name><ref_to>fremdmotor.additional</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>fremdmotor_iid</inverse_name><rdb:join>FREMDMOTOR_ADDITIONAL.FREMDMOTOR__IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>mea_iid</name><ref_to>mea</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>fremdmotor_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MEASUREMENT_.MEA_IID=.MEA_IID AND .FREMDMOTOR__IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>dts_iid</name><ref_to>dts</ref_to><base_relation>measurement</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>fremdmotor_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>DATA-SET_.DTS_IID=.DTS_IID AND .FREMDMOTOR__IID IN (?)</rdb:join></relation_attribute><rdb:aid>11</rdb:aid><rdb:table>FREMDMOTOR_</rdb:table></application_element><application_element><name>fremdmotor.exhaustsystem</name><basetype>AoUnitUnderTestPart</basetype><application_attribute><name>fremdmotor.exhaustsystem_iid</name><base_attribute>id</base_attribute><rdb:column>FREMDMOTOR_EXHAUSTSYSTEM_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>version</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>elbow</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ELBOW_</rdb:column></application_attribute><application_attribute><name>inlet</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>INLET_</rdb:column></application_attribute><application_attribute><name>mixing</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MIXING_</rdb:column></application_attribute><application_attribute><name>cat</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>CAT_</rdb:column></application_attribute><application_attribute><name>dpf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>DPF_</rdb:column></application_attribute><application_attribute><name>fr_mf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>FR_MF_</rdb:column></application_attribute><application_attribute><name>tube2_</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TUBE2__</rdb:column></application_attribute><application_attribute><name>in_mf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>IN_MF_</rdb:column></application_attribute><application_attribute><name>tube3_</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TUBE3__</rdb:column></application_attribute><application_attribute><name>rr_mf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>RR_MF_</rdb:column></application_attribute><application_attribute><name>outlet</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>OUTLET_</rdb:column></application_attribute><application_attribute><name>mount</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MOUNT_</rdb:column></application_attribute><application_attribute><name>absorb</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ABSORB_</rdb:column></application_attribute><application_attribute><name>suspen</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SUSPEN_</rdb:column></application_attribute><application_attribute><name>weitere</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>WEITERE_</rdb:column></application_attribute><application_attribute><name>tube1_</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TUBE1__</rdb:column></application_attribute><relation_attribute><name>fremdmotor_iid</name><ref_to>fremdmotor</ref_to><base_relation>parent_unit_under_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>fremdmotor.exhaustsystem_iid</inverse_name><rdb:column>FREMDMOTOR__IID</rdb:column><rdb:join>FREMDMOTOR_EXHAUSTSYSTEM.FREMDMOTOR_EXHAUSTSYSTEM_IID IN (?) AND FREMDMOTOR_EXHAUSTSYSTEM.FREMDMOTOR__IID=FREMDMOTOR_.FREMDMOTOR__IID</rdb:join></relation_attribute><relation_attribute><name>mea_iid</name><ref_to>mea</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>fremdmotor.exhaustsystem_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MEASUREMENT_.MEA_IID=.MEA_IID AND .FREMDMOTOR_EXHAUSTSYSTEM_IID IN (?)</rdb:join></relation_attribute><rdb:aid>12</rdb:aid><rdb:table>FREMDMOTOR_EXHAUSTSYSTEM</rdb:table></application_element><application_element><name>motor</name><basetype>AoUnitUnderTest</basetype><application_attribute><name>motor_iid</name><base_attribute>id</base_attribute><rdb:column>MOTOR__IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>version</name><base_attribute>version</base_attribute><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>motbegkart</name><datatype>DT_BLOB</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>MOTBEGKART_</rdb:column><rdb:sql>SELECT BLOB FROM MOTOR_ WHERE MOTOR__IID=?</rdb:sql></application_attribute><application_attribute><name>mtyp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MTYP_</rdb:column></application_attribute><application_attribute><name>mtnr</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MTNR_</rdb:column></application_attribute><application_attribute><name>bauz</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>BAUZ_</rdb:column></application_attribute><application_attribute><name>verbrenn</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERBRENN_</rdb:column></application_attribute><application_attribute><name>bauart</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>BAUART_</rdb:column></application_attribute><application_attribute><name>fahrzeug</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>FAHRZEUG_</rdb:column></application_attribute><application_attribute><name>kennz</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KENNZ_</rdb:column></application_attribute><application_attribute><name>gtyp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>GTYP_</rdb:column></application_attribute><application_attribute><name>gnr</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>GNR_</rdb:column></application_attribute><application_attribute><name>riementr</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>RIEMENTR_</rdb:column></application_attribute><application_attribute><name>generator</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>GENERATOR_</rdb:column></application_attribute><application_attribute><name>kmv</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KMV_</rdb:column></application_attribute><application_attribute><name>lhp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LHP_</rdb:column></application_attribute><application_attribute><name>abcpumpe</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ABCPUMPE_</rdb:column></application_attribute><application_attribute><name>aggrsonst</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>AGGRSONST_</rdb:column></application_attribute><application_attribute><name>besond</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>BESOND_</rdb:column></application_attribute><relation_attribute><name>env_iid</name><ref_to>env</ref_to><base_relation>environment</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>motor_iid</inverse_name><rdb:column>ENV_IID</rdb:column><rdb:join>MOTOR_.MOTOR__IID IN (?) AND MOTOR_.ENV_IID=ENVIRONMENT_.ENV_IID</rdb:join></relation_attribute><relation_attribute><name>motor.exhaustsystem_iid</name><ref_to>motor.exhaustsystem</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>motor_iid</inverse_name><rdb:join>MOTOR_EXHAUSTSYSTEM.MOTOR__IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>motor.motoraufbau_iid</name><ref_to>motor.motoraufbau</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>motor_iid</inverse_name><rdb:join>MOTOR_MOTORAUFBAU.MOTOR__IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>motor.additional_iid</name><ref_to>motor.additional</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>motor_iid</inverse_name><rdb:join>MOTOR_ADDITIONAL.MOTOR__IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>mea_iid</name><ref_to>mea</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>motor_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MEASUREMENT_.MEA_IID=.MEA_IID AND .MOTOR__IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>dts_iid</name><ref_to>dts</ref_to><base_relation>measurement</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>motor_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>DATA-SET_.DTS_IID=.DTS_IID AND .MOTOR__IID IN (?)</rdb:join></relation_attribute><rdb:aid>13</rdb:aid><rdb:table>MOTOR_</rdb:table></application_element><application_element><name>motor.exhaustsystem</name><basetype>AoUnitUnderTestPart</basetype><application_attribute><name>motor.exhaustsystem_iid</name><base_attribute>id</base_attribute><rdb:column>MOTOR_EXHAUSTSYSTEM_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>version</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>elbow</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ELBOW_</rdb:column></application_attribute><application_attribute><name>suspen</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SUSPEN_</rdb:column></application_attribute><application_attribute><name>inlet</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>INLET_</rdb:column></application_attribute><application_attribute><name>mixing</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MIXING_</rdb:column></application_attribute><application_attribute><name>cat</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>CAT_</rdb:column></application_attribute><application_attribute><name>dpf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>DPF_</rdb:column></application_attribute><application_attribute><name>tube1_</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TUBE1__</rdb:column></application_attribute><application_attribute><name>fr_mf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>FR_MF_</rdb:column></application_attribute><application_attribute><name>tube2_</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TUBE2__</rdb:column></application_attribute><application_attribute><name>in_mf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>IN_MF_</rdb:column></application_attribute><application_attribute><name>tube3_</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TUBE3__</rdb:column></application_attribute><application_attribute><name>rr_mf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>RR_MF_</rdb:column></application_attribute><application_attribute><name>outlet</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>OUTLET_</rdb:column></application_attribute><application_attribute><name>mount</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MOUNT_</rdb:column></application_attribute><application_attribute><name>absorb</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ABSORB_</rdb:column></application_attribute><application_attribute><name>weitere</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>WEITERE_</rdb:column></application_attribute><relation_attribute><name>motor_iid</name><ref_to>motor</ref_to><base_relation>parent_unit_under_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>motor.exhaustsystem_iid</inverse_name><rdb:column>MOTOR__IID</rdb:column><rdb:join>MOTOR_EXHAUSTSYSTEM.MOTOR_EXHAUSTSYSTEM_IID IN (?) AND MOTOR_EXHAUSTSYSTEM.MOTOR__IID=MOTOR_.MOTOR__IID</rdb:join></relation_attribute><relation_attribute><name>mea_iid</name><ref_to>mea</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>motor.exhaustsystem_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MEASUREMENT_.MEA_IID=.MEA_IID AND .MOTOR_EXHAUSTSYSTEM_IID IN (?)</rdb:join></relation_attribute><rdb:aid>14</rdb:aid><rdb:table>MOTOR_EXHAUSTSYSTEM</rdb:table></application_element><application_element><name>messtext</name><basetype>AoTestSequence</basetype><application_attribute><name>messtext_iid</name><base_attribute>id</base_attribute><rdb:column>MESSTEXT__IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>version</name><base_attribute>version</base_attribute><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>aufnehmer</name><datatype>DT_BLOB</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>AUFNEHMER_</rdb:column><rdb:sql>SELECT BLOB FROM MESSTEXT_ WHERE MESSTEXT__IID=?</rdb:sql></application_attribute><application_attribute><name>t</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>T_</rdb:column></application_attribute><relation_attribute><name>env_iid</name><ref_to>env</ref_to><base_relation>environment</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>messtext_iid</inverse_name><rdb:column>ENV_IID</rdb:column><rdb:join>MESSTEXT_.MESSTEXT__IID IN (?) AND MESSTEXT_.ENV_IID=ENVIRONMENT_.ENV_IID</rdb:join></relation_attribute><relation_attribute><name>mea_iid</name><ref_to>mea</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>messtext_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MEASUREMENT_.MEA_IID=.MEA_IID AND .MESSTEXT__IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>dts_iid</name><ref_to>dts</ref_to><base_relation>measurement</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>messtext_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>DATA-SET_.DTS_IID=.DTS_IID AND .MESSTEXT__IID IN (?)</rdb:join></relation_attribute><rdb:aid>15</rdb:aid><rdb:table>MESSTEXT_</rdb:table></application_element><application_element><name>randbedingung</name><basetype>AoAny</basetype><application_attribute><name>version</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>randbedingung_iid</name><base_attribute>id</base_attribute><rdb:column>RANDBEDINGUNG__IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>ftemp</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>FTEMP_</rdb:column></application_attribute><application_attribute><name>wgeschw</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>WGESCHW_</rdb:column></application_attribute><application_attribute><name>wricht</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>WRICHT_</rdb:column></application_attribute><application_attribute><name>mdat</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MDAT_</rdb:column></application_attribute><application_attribute><name>mtim</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MTIM_</rdb:column></application_attribute><application_attribute><name>mort</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MORT_</rdb:column></application_attribute><application_attribute><name>prbes</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>PRBES_</rdb:column></application_attribute><application_attribute><name>ltemp</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>LTEMP_</rdb:column></application_attribute><application_attribute><name>ldruck</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>LDRUCK_</rdb:column></application_attribute><application_attribute><name>feuchte</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>FEUCHTE_</rdb:column></application_attribute><relation_attribute><name>env_iid</name><ref_to>env</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>randbedingung_iid</inverse_name><rdb:column>ENV_IID</rdb:column><rdb:join>RANDBEDINGUNG_.RANDBEDINGUNG__IID IN (?) AND RANDBEDINGUNG_.ENV_IID=ENVIRONMENT_.ENV_IID</rdb:join></relation_attribute><relation_attribute><name>mea-for-AnyId</name><ref_to>mea</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>AnyId</inverse_name><rdb:reftable/><rdb:refname>AnyId</rdb:refname><rdb:join>MEASUREMENT_.MEA_IID=.MEA_IID AND .RANDBEDINGUNG__IID IN (?)</rdb:join></relation_attribute><rdb:aid>16</rdb:aid><rdb:table>RANDBEDINGUNG_</rdb:table></application_element><application_element><name>messzyklus</name><basetype>AoAny</basetype><application_attribute><name>messzyklus_iid</name><base_attribute>id</base_attribute><rdb:column>MESSZYKLUS__IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>version</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>zyklus</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ZYKLUS_</rdb:column></application_attribute><application_attribute><name>zykl_ber</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ZYKL_BER_</rdb:column></application_attribute><application_attribute><name>lastzust</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LASTZUST_</rdb:column></application_attribute><application_attribute><name>kueb</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KUEB_</rdb:column></application_attribute><application_attribute><name>aufnehmer</name><datatype>DT_BLOB</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>AUFNEHMER_</rdb:column><rdb:sql>SELECT BLOB FROM MESSZYKLUS_ WHERE MESSZYKLUS__IID=?</rdb:sql></application_attribute><application_attribute><name>gang</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>GANG_</rdb:column></application_attribute><application_attribute><name>kmvkomm</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KMVKOMM_</rdb:column></application_attribute><application_attribute><name>lhp</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LHP_</rdb:column></application_attribute><application_attribute><name>lhpkomm</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LHPKOMM_</rdb:column></application_attribute><application_attribute><name>lima</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LIMA_</rdb:column></application_attribute><application_attribute><name>limakomm</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LIMAKOMM_</rdb:column></application_attribute><application_attribute><name>measc</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MEASC_</rdb:column></application_attribute><application_attribute><name>kmv</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KMV_</rdb:column></application_attribute><relation_attribute><name>env_iid</name><ref_to>env</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>messzyklus_iid</inverse_name><rdb:column>ENV_IID</rdb:column><rdb:join>MESSZYKLUS_.MESSZYKLUS__IID IN (?) AND MESSZYKLUS_.ENV_IID=ENVIRONMENT_.ENV_IID</rdb:join></relation_attribute><relation_attribute><name>mea-for-CycId</name><ref_to>mea</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>CycId</inverse_name><rdb:reftable/><rdb:refname>CycId</rdb:refname><rdb:join>MEASUREMENT_.MEA_IID=.MEA_IID AND .MESSZYKLUS__IID IN (?)</rdb:join></relation_attribute><rdb:aid>17</rdb:aid><rdb:table>MESSZYKLUS_</rdb:table></application_element><application_element><name>mea</name><basetype>AoSubTest</basetype><application_attribute><name>postproc</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>POSTPROC</rdb:column></application_attribute><application_attribute><name>touchdate</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>TOUCHDATE</rdb:column></application_attribute><application_attribute><name>cirevision</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>CIREVISION</rdb:column></application_attribute><application_attribute><name>version</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>mea_iid</name><base_attribute>id</base_attribute><rdb:column>MEA_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>mime_type</name><base_attribute>mime_type</base_attribute><length>4000</length><rdb:column>MIME_TYPE</rdb:column></application_attribute><application_attribute><name>meastime</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MEASTIME</rdb:column></application_attribute><application_attribute><name>size</name><datatype>DT_LONG</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>SPACE</rdb:column></application_attribute><application_attribute><name>swrevision</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SWREVISION</rdb:column></application_attribute><application_attribute><name>prj</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>PRJ</rdb:column></application_attribute><application_attribute><name>tstser</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TSTSER</rdb:column></application_attribute><application_attribute><name>seq</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SEQ</rdb:column></application_attribute><application_attribute><name>ins</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>INS</rdb:column></application_attribute><application_attribute><name>uut</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>UUT</rdb:column></application_attribute><application_attribute><name>label</name><base_attribute>version</base_attribute><rdb:column>DSK_IID</rdb:column></application_attribute><application_attribute><name>measdate</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>MEASDATE</rdb:column></application_attribute><application_attribute><name>swstate</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SWSTATE</rdb:column></application_attribute><application_attribute><name>state</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>STATE</rdb:column></application_attribute><application_attribute><name>cidate</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CIDATE</rdb:column></application_attribute><application_attribute><name>discpath</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>DISCPATH</rdb:column></application_attribute><application_attribute><name>typ</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TYP</rdb:column></application_attribute><application_attribute><name>tstsubject</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TSTSUBJECT_</rdb:column></application_attribute><application_attribute><name>tststand</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TSTSTAND_</rdb:column></application_attribute><application_attribute><name>expert</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>EXPERT_</rdb:column></application_attribute><application_attribute><name>expertdiv</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>EXPERTDIV_</rdb:column></application_attribute><application_attribute><name>orderer</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ORDERER_</rdb:column></application_attribute><application_attribute><name>ordererdiv</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ORDERERDIV_</rdb:column></application_attribute><application_attribute><name>auftrdat</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>AUFTRDAT_</rdb:column></application_attribute><application_attribute><name>ausfuehrdat</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>AUSFUEHRDAT_</rdb:column></application_attribute><application_attribute><name>kontierung</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KONTIERUNG_</rdb:column></application_attribute><application_attribute><name>auftrnr</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>AUFTRNR_</rdb:column></application_attribute><relation_attribute><name>tstser_iid</name><ref_to>tstser</ref_to><base_relation>parent_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>mea_iid</inverse_name><rdb:column>TSTSER_IID</rdb:column><rdb:join>MEASUREMENT_.MEA_IID IN (?) AND MEASUREMENT_.TSTSER_IID=TEST_.TSTSER_IID</rdb:join></relation_attribute><relation_attribute><name>ins_iid</name><ref_to>ins</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>mea_iid</inverse_name><rdb:column>INS_IID</rdb:column><rdb:join>MEASUREMENT_.MEA_IID IN (?) AND MEASUREMENT_.INS_IID=SETUP_.INS_IID</rdb:join></relation_attribute><relation_attribute><name>dsk_iid</name><ref_to>dsk</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>mea_iid</inverse_name><rdb:column>DSK_IID</rdb:column><rdb:join>MEASUREMENT_.MEA_IID IN (?) AND MEASUREMENT_.DSK_IID=DISKS_.DSK_IID</rdb:join></relation_attribute><application_attribute><name>attachments</name><datatype>DS_EXTERNALREFERENCE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>ATTACHMENTS</rdb:column><rdb:value>'NULL'</rdb:value><rdb:sql>N/A</rdb:sql></application_attribute><relation_attribute><name>dts_iid</name><ref_to>dts</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>mea_iid</inverse_name><rdb:join>DATA-SET_.MEA_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>fremdmotor_iid</name><ref_to>fremdmotor</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>mea_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>FREMDMOTOR_.FREMDMOTOR__IID=.FREMDMOTOR__IID AND .MEA_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>fremdmotor.exhaustsystem_iid</name><ref_to>fremdmotor.exhaustsystem</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>mea_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>FREMDMOTOR_EXHAUSTSYSTEM.FREMDMOTOR_EXHAUSTSYSTEM_IID=.FREMDMOTOR_EXHAUSTSYSTEM_IID AND .MEA_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>motor_iid</name><ref_to>motor</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>mea_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MOTOR_.MOTOR__IID=.MOTOR__IID AND .MEA_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>motor.exhaustsystem_iid</name><ref_to>motor.exhaustsystem</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>mea_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MOTOR_EXHAUSTSYSTEM.MOTOR_EXHAUSTSYSTEM_IID=.MOTOR_EXHAUSTSYSTEM_IID AND .MEA_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>messtext_iid</name><ref_to>messtext</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>mea_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MESSTEXT_.MESSTEXT__IID=.MESSTEXT__IID AND .MEA_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>AnyId</name><ref_to>randbedingung</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>mea-for-AnyId</inverse_name><rdb:reftable/><rdb:refname>AnyId</rdb:refname><rdb:join>RANDBEDINGUNG_.RANDBEDINGUNG__IID=.RANDBEDINGUNG__IID AND .MEA_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>CycId</name><ref_to>messzyklus</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>mea-for-CycId</inverse_name><rdb:reftable/><rdb:refname>CycId</rdb:refname><rdb:join>MESSZYKLUS_.MESSZYKLUS__IID=.MESSZYKLUS__IID AND .MEA_IID IN (?)</rdb:join></relation_attribute><rdb:aid>18</rdb:aid><rdb:table>MEASUREMENT_</rdb:table></application_element><application_element><name>pas</name><basetype>AoParameterSet</basetype><application_attribute><name>pas_iid</name><base_attribute>id</base_attribute><rdb:column>PAS_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>version</name><base_attribute>version</base_attribute><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>description</name><base_attribute>description</base_attribute><length>4000</length><rdb:column>DESCR</rdb:column></application_attribute><relation_attribute><name>par_iid</name><ref_to>par</ref_to><base_relation>parameters</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>pas_iid</inverse_name><rdb:join>PARAMETER_.PAS_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>meq_iid</name><ref_to>meq</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>pas_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MEASURING QUANTITY_.MEQ_IID=.MEQ_IID AND .PAS_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>dts_iid</name><ref_to>dts</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>pas_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>DATA-SET_.DTS_IID=.DTS_IID AND .PAS_IID IN (?)</rdb:join></relation_attribute><rdb:aid>19</rdb:aid><rdb:table>PARAMETER-SET_</rdb:table></application_element><application_element><name>dts</name><basetype>AoMeasurement</basetype><application_attribute><name>dts_iid</name><base_attribute>id</base_attribute><rdb:column>DTS_IID</rdb:column></application_attribute><application_attribute><name>measbegin</name><base_attribute>measurement_begin</base_attribute><rdb:column>MEASBEGIN</rdb:column></application_attribute><application_attribute><name>measend</name><base_attribute>measurement_end</base_attribute><rdb:column>MEASEND</rdb:column></application_attribute><application_attribute><name>version</name><base_attribute>version</base_attribute><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>mime_type</name><base_attribute>mime_type</base_attribute><length>4000</length><rdb:column>MIME_TYPE</rdb:column></application_attribute><relation_attribute><name>mea_iid</name><ref_to>mea</ref_to><base_relation>test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>dts_iid</inverse_name><rdb:column>MEA_IID</rdb:column><rdb:join>DATA-SET_.DTS_IID IN (?) AND DATA-SET_.MEA_IID=MEASUREMENT_.MEA_IID</rdb:join></relation_attribute><relation_attribute><name>meq_iid</name><ref_to>meq</ref_to><base_relation>measurement_quantities</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>dts_iid</inverse_name><rdb:join>MEASURING QUANTITY_.DTS_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>pas_iid</name><ref_to>pas</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>dts_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>PARAMETER-SET_.PAS_IID=.PAS_IID AND .DTS_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>fremdmotor_iid</name><ref_to>fremdmotor</ref_to><base_relation>units_under_test</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>dts_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>FREMDMOTOR_.FREMDMOTOR__IID=.FREMDMOTOR__IID AND .DTS_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>motor_iid</name><ref_to>motor</ref_to><base_relation>units_under_test</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>dts_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MOTOR_.MOTOR__IID=.MOTOR__IID AND .DTS_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>messtext_iid</name><ref_to>messtext</ref_to><base_relation>sequences</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>dts_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>MESSTEXT_.MESSTEXT__IID=.MESSTEXT__IID AND .DTS_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>sm_iid</name><ref_to>sm</ref_to><base_relation>submatrices</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>dts_iid</inverse_name></relation_attribute><relation_attribute><name>geometry</name><ref_to>geometry</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>measurements_on_geometry</inverse_name></relation_attribute><rdb:aid>20</rdb:aid><rdb:table>DATA-SET_</rdb:table></application_element><application_element><name>quantity</name><basetype>AoQuantity</basetype><application_attribute><name>quantity_iid</name><base_attribute>id</base_attribute><rdb:column>QUANTITY_IID</rdb:column></application_attribute><application_attribute><name>mime_type</name><base_attribute>mime_type</base_attribute><length>4000</length><rdb:column>MIME_TYPE</rdb:column></application_attribute><application_attribute><name>def_name</name><base_attribute>default_mq_name</base_attribute><length>4000</length><rdb:column>DEF_NAME</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><relation_attribute><name>unt_iid</name><ref_to>unt</ref_to><base_relation>default_unit</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>quantity_iid</inverse_name><rdb:column>UNT_IID</rdb:column><rdb:join>QUANTITY_.QUANTITY_IID IN (?) AND QUANTITY_.UNT_IID=UNIT_.UNT_IID</rdb:join></relation_attribute><relation_attribute><name>pred_iid</name><ref_to>quantity</ref_to><base_relation>predecessor</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>suc_iid</inverse_name><rdb:column>PRED_IID</rdb:column><rdb:join>QUANTITY_.QUANTITY_IID=(SELECT QUANTITY_.PRED_IID FROM QUANTITY_ WHERE QUANTITY_.QUANTITY_IID IN (?))</rdb:join></relation_attribute><relation_attribute><name>suc_iid</name><ref_to>quantity</ref_to><base_relation>successors</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>pred_iid</inverse_name><rdb:join>QUANTITY_.PRED_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>meq_iid</name><ref_to>meq</ref_to><base_relation>measurement_quantities</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>quantity_iid</inverse_name><rdb:join>MEASURING QUANTITY_.QUANTITY_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>grq_iid</name><ref_to>grq</ref_to><base_relation>groups</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>quantity_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>QUANTITYSYSTEM_.GRQ_IID=.GRQ_IID AND .QUANTITY_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>meq-for-non_reference_channel_quantity</name><ref_to>meq</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>non_reference_channel_quantity</inverse_name><rdb:reftable/><rdb:refname>non_reference_channel_quantity</rdb:refname><rdb:join>MEASURING QUANTITY_.MEQ_IID=.MEQ_IID AND .QUANTITY_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>meq-for-reference_channel_quantity</name><ref_to>meq</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>reference_channel_quantity</inverse_name><rdb:reftable/><rdb:refname>reference_channel_quantity</rdb:refname><rdb:join>MEASURING QUANTITY_.MEQ_IID=.MEQ_IID AND .QUANTITY_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>used_in_measurement_locations</name><ref_to>measurement_location</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>channel_quantity</inverse_name></relation_attribute><rdb:aid>21</rdb:aid><rdb:table>QUANTITY_</rdb:table></application_element><application_element><name>meq</name><basetype>AoMeasurementQuantity</basetype><application_attribute><name>meq_iid</name><base_attribute>id</base_attribute><rdb:column>MEQ_IID</rdb:column></application_attribute><application_attribute><name>aodt</name><base_attribute>datatype</base_attribute><rdb:column>AODT</rdb:column></application_attribute><application_attribute><name>non_reference_channel_name</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>NONREFCHN</rdb:column></application_attribute><application_attribute><name>reference_channel_name</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>REFCHN</rdb:column></application_attribute><application_attribute><name>min_val</name><base_attribute>minimum</base_attribute><rdb:column>MIN_VAL</rdb:column></application_attribute><application_attribute><name>max_val</name><base_attribute>maximum</base_attribute><rdb:column>MAX_VAL</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>description</name><base_attribute>description</base_attribute><length>4000</length><rdb:column>DESCR</rdb:column></application_attribute><application_attribute><name>mime_type</name><base_attribute>mime_type</base_attribute><length>4000</length><rdb:column>MIME_TYPE</rdb:column></application_attribute><relation_attribute><name>dts_iid</name><ref_to>dts</ref_to><base_relation>measurement</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>meq_iid</inverse_name><rdb:column>DTS_IID</rdb:column><rdb:join>MEASURING QUANTITY_.MEQ_IID IN (?) AND MEASURING QUANTITY_.DTS_IID=DATA-SET_.DTS_IID</rdb:join></relation_attribute><relation_attribute><name>quantity_iid</name><ref_to>quantity</ref_to><base_relation>quantity</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>meq_iid</inverse_name><rdb:column>QUANTITY_IID</rdb:column><rdb:join>MEASURING QUANTITY_.MEQ_IID IN (?) AND MEASURING QUANTITY_.QUANTITY_IID=QUANTITY_.QUANTITY_IID</rdb:join></relation_attribute><relation_attribute><name>sen_iid</name><ref_to>devchain</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>meq_iid</inverse_name><rdb:column>SEN_IID</rdb:column><rdb:join>MEASURING QUANTITY_.MEQ_IID IN (?) AND MEASURING QUANTITY_.SEN_IID=MEAS.DEV.CHAIN_.DEVCHAIN_IID</rdb:join></relation_attribute><relation_attribute><name>unt_iid</name><ref_to>unt</ref_to><base_relation>unit</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>meq_iid</inverse_name><rdb:column>UNT_IID</rdb:column><rdb:join>MEASURING QUANTITY_.MEQ_IID IN (?) AND MEASURING QUANTITY_.UNT_IID=UNIT_.UNT_IID</rdb:join></relation_attribute><relation_attribute><name>non_reference_channel_quantity</name><ref_to>quantity</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>meq-for-non_reference_channel_quantity</inverse_name><rdb:reftable/><rdb:refname>non_reference_channel_quantity</rdb:refname><rdb:join>QUANTITY_.QUANTITY_IID=.QUANTITY_IID AND .MEQ_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>reference_channel_quantity</name><ref_to>quantity</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>meq-for-reference_channel_quantity</inverse_name><rdb:reftable/><rdb:refname>reference_channel_quantity</rdb:refname><rdb:join>QUANTITY_.QUANTITY_IID=.QUANTITY_IID AND .MEQ_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>pas_iid</name><ref_to>pas</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>meq_iid</inverse_name><rdb:reftable/><rdb:refname>base</rdb:refname><rdb:join>PARAMETER-SET_.PAS_IID=.PAS_IID AND .MEQ_IID IN (?)</rdb:join></relation_attribute><relation_attribute><name>lc_iid</name><ref_to>lc</ref_to><base_relation>local_columns</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>meq_iid</inverse_name></relation_attribute><relation_attribute><name>non_reference_locations</name><ref_to>measurement_location</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>in_reference_location</inverse_name></relation_attribute><relation_attribute><name>reference_locations</name><ref_to>measurement_location</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>in_non_reference_location</inverse_name></relation_attribute><rdb:aid>22</rdb:aid><rdb:table>MEASURING QUANTITY_</rdb:table></application_element><application_element><name>par</name><basetype>AoParameter</basetype><application_attribute><name>par_iid</name><base_attribute>id</base_attribute><rdb:column>PAR_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>pval</name><base_attribute>pvalue</base_attribute><length>4000</length><rdb:column>PVAL</rdb:column></application_attribute><application_attribute><name>ptyp</name><base_attribute>parameter_datatype</base_attribute><rdb:column>PTYP</rdb:column></application_attribute><relation_attribute><name>unt_iid</name><ref_to>unt</ref_to><base_relation>unit</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>par_iid</inverse_name><rdb:column>UNT_IID</rdb:column><rdb:join>PARAMETER_.PAR_IID IN (?) AND PARAMETER_.UNT_IID=UNIT_.UNT_IID</rdb:join></relation_attribute><relation_attribute><name>pas_iid</name><ref_to>pas</ref_to><base_relation>parameter_set</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>par_iid</inverse_name><rdb:column>PAS_IID</rdb:column><rdb:join>PARAMETER_.PAR_IID IN (?) AND PARAMETER_.PAS_IID=PARAMETER-SET_.PAS_IID</rdb:join></relation_attribute><rdb:aid>26</rdb:aid><rdb:table>PARAMETER_</rdb:table></application_element><application_element><name>fremdmotor.motoraufbau</name><basetype>AoUnitUnderTestPart</basetype><application_attribute><name>fremdmotor.motoraufbau_iid</name><base_attribute>id</base_attribute><rdb:column>FREMDMOTOR_MOTORAUFBAU_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>version</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>kurbelwelle</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KURBELWELLE_</rdb:column></application_attribute><application_attribute><name>kolben</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KOLBEN_</rdb:column></application_attribute><application_attribute><name>ladeluftkueh</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LADELUFTKUEH_</rdb:column></application_attribute><application_attribute><name>ladeluftleit</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LADELUFTLEIT_</rdb:column></application_attribute><application_attribute><name>absblenden</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ABSBLENDEN_</rdb:column></application_attribute><application_attribute><name>kraftstoff</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KRAFTSTOFF_</rdb:column></application_attribute><application_attribute><name>klopfregelung</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KLOPFREGELUNG_</rdb:column></application_attribute><application_attribute><name>gelenkwelle</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>GELENKWELLE_</rdb:column></application_attribute><application_attribute><name>sonst</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SONST_</rdb:column></application_attribute><application_attribute><name>swstand</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SWSTAND_</rdb:column></application_attribute><application_attribute><name>abdeckung</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ABDECKUNG_</rdb:column></application_attribute><application_attribute><name>rohlufthutzen</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ROHLUFTHUTZEN_</rdb:column></application_attribute><application_attribute><name>luftfilter</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LUFTFILTER_</rdb:column></application_attribute><application_attribute><name>oelwanne</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>OELWANNE_</rdb:column></application_attribute><application_attribute><name>motorlager</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MOTORLAGER_</rdb:column></application_attribute><application_attribute><name>motortraeger</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MOTORTRAEGER_</rdb:column></application_attribute><application_attribute><name>getriebelager</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>GETRIEBELAGER_</rdb:column></application_attribute><application_attribute><name>torsdaempf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TORSDAEMPF_</rdb:column></application_attribute><application_attribute><name>kurbelgeh</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KURBELGEH_</rdb:column></application_attribute><application_attribute><name>zylkopf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ZYLKOPF_</rdb:column></application_attribute><relation_attribute><name>fremdmotor_iid</name><ref_to>fremdmotor</ref_to><base_relation>parent_unit_under_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>fremdmotor.motoraufbau_iid</inverse_name><rdb:column>FREMDMOTOR__IID</rdb:column><rdb:join>FREMDMOTOR_MOTORAUFBAU.FREMDMOTOR_MOTORAUFBAU_IID IN (?) AND FREMDMOTOR_MOTORAUFBAU.FREMDMOTOR__IID=FREMDMOTOR_.FREMDMOTOR__IID</rdb:join></relation_attribute><rdb:aid>27</rdb:aid><rdb:table>FREMDMOTOR_MOTORAUFBAU</rdb:table></application_element><application_element><name>fremdmotor.additional</name><basetype>AoUnitUnderTestPart</basetype><application_attribute><name>fremdmotor.additional_iid</name><base_attribute>id</base_attribute><rdb:column>FREMDMOTOR_ADDITIONAL_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>version</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>add</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ADD_</rdb:column></application_attribute><application_attribute><name>auftrag</name><datatype>DT_BLOB</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>AUFTRAG_</rdb:column><rdb:sql>SELECT BLOB FROM FREMDMOTOR_ADDITIONAL WHERE FREMDMOTOR_ADDITIONAL_IID=?</rdb:sql></application_attribute><relation_attribute><name>fremdmotor_iid</name><ref_to>fremdmotor</ref_to><base_relation>parent_unit_under_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>fremdmotor.additional_iid</inverse_name><rdb:column>FREMDMOTOR__IID</rdb:column><rdb:join>FREMDMOTOR_ADDITIONAL.FREMDMOTOR_ADDITIONAL_IID IN (?) AND FREMDMOTOR_ADDITIONAL.FREMDMOTOR__IID=FREMDMOTOR_.FREMDMOTOR__IID</rdb:join></relation_attribute><rdb:aid>28</rdb:aid><rdb:table>FREMDMOTOR_ADDITIONAL</rdb:table></application_element><application_element><name>motor.motoraufbau</name><basetype>AoUnitUnderTestPart</basetype><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>version</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>motor.motoraufbau_iid</name><base_attribute>id</base_attribute><rdb:column>MOTOR_MOTORAUFBAU_IID</rdb:column></application_attribute><application_attribute><name>swstand</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SWSTAND_</rdb:column></application_attribute><application_attribute><name>abdeckung</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ABDECKUNG_</rdb:column></application_attribute><application_attribute><name>rohlufthutzen</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ROHLUFTHUTZEN_</rdb:column></application_attribute><application_attribute><name>luftfilter</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LUFTFILTER_</rdb:column></application_attribute><application_attribute><name>oelwanne</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>OELWANNE_</rdb:column></application_attribute><application_attribute><name>motorlager</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MOTORLAGER_</rdb:column></application_attribute><application_attribute><name>motortraeger</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>MOTORTRAEGER_</rdb:column></application_attribute><application_attribute><name>getriebelager</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>GETRIEBELAGER_</rdb:column></application_attribute><application_attribute><name>torsdaempf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>TORSDAEMPF_</rdb:column></application_attribute><application_attribute><name>zylkopf</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ZYLKOPF_</rdb:column></application_attribute><application_attribute><name>kurbelgeh</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KURBELGEH_</rdb:column></application_attribute><application_attribute><name>kurbelwelle</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KURBELWELLE_</rdb:column></application_attribute><application_attribute><name>kolben</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KOLBEN_</rdb:column></application_attribute><application_attribute><name>ladeluftkueh</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LADELUFTKUEH_</rdb:column></application_attribute><application_attribute><name>ladeluftleit</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>LADELUFTLEIT_</rdb:column></application_attribute><application_attribute><name>absblenden</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ABSBLENDEN_</rdb:column></application_attribute><application_attribute><name>kraftstoff</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KRAFTSTOFF_</rdb:column></application_attribute><application_attribute><name>klopfregelung</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>KLOPFREGELUNG_</rdb:column></application_attribute><application_attribute><name>sonst</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>SONST_</rdb:column></application_attribute><application_attribute><name>gelenkwelle</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>GELENKWELLE_</rdb:column></application_attribute><relation_attribute><name>motor_iid</name><ref_to>motor</ref_to><base_relation>parent_unit_under_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>motor.motoraufbau_iid</inverse_name><rdb:column>MOTOR__IID</rdb:column><rdb:join>MOTOR_MOTORAUFBAU.MOTOR_MOTORAUFBAU_IID IN (?) AND MOTOR_MOTORAUFBAU.MOTOR__IID=MOTOR_.MOTOR__IID</rdb:join></relation_attribute><rdb:aid>29</rdb:aid><rdb:table>MOTOR_MOTORAUFBAU</rdb:table></application_element><application_element><name>motor.additional</name><basetype>AoUnitUnderTestPart</basetype><application_attribute><name>motor.additional_iid</name><base_attribute>id</base_attribute><rdb:column>MOTOR_ADDITIONAL_IID</rdb:column></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute><length>4000</length><rdb:column>INAME</rdb:column></application_attribute><application_attribute><name>changed</name><datatype>DT_DATE</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>CHANGED</rdb:column></application_attribute><application_attribute><name>version</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>VERS</rdb:column></application_attribute><application_attribute><name>add</name><datatype>DT_STRING</datatype><obligatory>false</obligatory><unique>false</unique><length>4000</length><rdb:column>ADD_</rdb:column></application_attribute><application_attribute><name>auftrag</name><datatype>DT_BLOB</datatype><obligatory>false</obligatory><unique>false</unique><rdb:column>AUFTRAG_</rdb:column><rdb:sql>SELECT BLOB FROM MOTOR_ADDITIONAL WHERE MOTOR_ADDITIONAL_IID=?</rdb:sql></application_attribute><relation_attribute><name>motor_iid</name><ref_to>motor</ref_to><base_relation>parent_unit_under_test</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>motor.additional_iid</inverse_name><rdb:column>MOTOR__IID</rdb:column><rdb:join>MOTOR_ADDITIONAL.MOTOR_ADDITIONAL_IID IN (?) AND MOTOR_ADDITIONAL.MOTOR__IID=MOTOR_.MOTOR__IID</rdb:join></relation_attribute><rdb:aid>30</rdb:aid><rdb:table>MOTOR_ADDITIONAL</rdb:table></application_element><application_element><name>sm</name><basetype>AoSubmatrix</basetype><application_attribute><name>sm_iid</name><base_attribute>id</base_attribute></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute></application_attribute><application_attribute><name>mime_type</name><base_attribute>mime_type</base_attribute></application_attribute><application_attribute><name>number_of_rows</name><base_attribute>number_of_rows</base_attribute></application_attribute><relation_attribute><name>lc_iid</name><ref_to>lc</ref_to><base_relation>local_columns</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>sm_iid</inverse_name></relation_attribute><relation_attribute><name>dts_iid</name><ref_to>dts</ref_to><base_relation>measurement</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>sm_iid</inverse_name></relation_attribute><relation_attribute><name>x-axis-for-y-axis</name><ref_to>sm</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>y-axis-for-x-axis</inverse_name></relation_attribute><relation_attribute><name>z-axis-for-y-axis</name><ref_to>sm</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>y-axis-for-z-axis</inverse_name></relation_attribute><relation_attribute><name>y-axis-for-x-axis</name><ref_to>sm</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>x-axis-for-y-axis</inverse_name></relation_attribute><relation_attribute><name>y-axis-for-z-axis</name><ref_to>sm</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>z-axis-for-y-axis</inverse_name></relation_attribute><relation_attribute><name>geometry</name><ref_to>geometry</ref_to><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>geometry_shapes</inverse_name></relation_attribute></application_element><application_element><name>lc</name><basetype>AoLocalColumn</basetype><application_attribute><name>lc_iid</name><base_attribute>id</base_attribute></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute></application_attribute><application_attribute><name>independent</name><base_attribute>independent</base_attribute></application_attribute><application_attribute><name>values</name><base_attribute>values</base_attribute></application_attribute><application_attribute><name>sequence_representation</name><base_attribute>sequence_representation</base_attribute></application_attribute><application_attribute><name>generation_parameters</name><base_attribute>generation_parameters</base_attribute></application_attribute><application_attribute><name>raw_datatype</name><base_attribute>raw_datatype</base_attribute></application_attribute><application_attribute><name>axistype</name><datatype>DT_ENUM</datatype><enumeration_type>axistype</enumeration_type></application_attribute><application_attribute><name>global_flag</name><base_attribute>global_flag</base_attribute></application_attribute><application_attribute><name>flags</name><base_attribute>flags</base_attribute></application_attribute><relation_attribute><name>ec_iid</name><ref_to>ec</ref_to><base_relation>external_component</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>lc_iid</inverse_name></relation_attribute><relation_attribute><name>sm_iid</name><ref_to>sm</ref_to><base_relation>submatrix</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>lc_iid</inverse_name></relation_attribute><relation_attribute><name>meq_iid</name><ref_to>meq</ref_to><base_relation>measurement_quantity</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>lc_iid</inverse_name></relation_attribute></application_element><application_element><name>ec</name><basetype>AoExternalComponent</basetype><application_attribute><name>ec_iid</name><base_attribute>id</base_attribute></application_attribute><application_attribute><name>iname</name><base_attribute>name</base_attribute></application_attribute><application_attribute><name>description</name><base_attribute>description</base_attribute></application_attribute><application_attribute><name>ordinal_number</name><base_attribute>ordinal_number</base_attribute></application_attribute><application_attribute><name>component_length</name><base_attribute>component_length</base_attribute></application_attribute><application_attribute><name>filename_url</name><base_attribute>filename_url</base_attribute></application_attribute><application_attribute><name>value_type</name><base_attribute>value_type</base_attribute></application_attribute><application_attribute><name>start_offset</name><base_attribute>start_offset</base_attribute></application_attribute><application_attribute><name>block_size</name><base_attribute>block_size</base_attribute></application_attribute><application_attribute><name>valuesperblock</name><base_attribute>valuesperblock</base_attribute></application_attribute><application_attribute><name>value_offset</name><base_attribute>value_offset</base_attribute></application_attribute><relation_attribute><name>lc_iid</name><ref_to>lc</ref_to><base_relation>local_column</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>ec_iid</inverse_name></relation_attribute></application_element><application_element><name>coordinate_system</name><basetype>AoAny</basetype><application_attribute><name>id</name><base_attribute>id</base_attribute></application_attribute><application_attribute><name>name</name><base_attribute>name</base_attribute></application_attribute><application_attribute><name>version</name><base_attribute>version</base_attribute></application_attribute><application_attribute><name>coordinate_system_type</name><datatype>DT_ENUM</datatype><enumeration_type>coordinate_system_types</enumeration_type></application_attribute><application_attribute><name>origin_1</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory></application_attribute><application_attribute><name>origin_2</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory></application_attribute><application_attribute><name>origin_3</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory></application_attribute><application_attribute><name>x_axis_1</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory></application_attribute><application_attribute><name>x_axis_2</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory></application_attribute><application_attribute><name>x_axis_3</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory></application_attribute><application_attribute><name>xz_plane_1</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory></application_attribute><application_attribute><name>xz_plane_2</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory></application_attribute><application_attribute><name>xz_plane_3</name><datatype>DT_DOUBLE</datatype><obligatory>false</obligatory></application_attribute><relation_attribute><name>reference_system</name><ref_to>coordinate_system</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>1</max_occurs><inverse_name>locale_systems</inverse_name></relation_attribute><relation_attribute><name>locale_systems</name><ref_to>coordinate_system</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>reference_system</inverse_name></relation_attribute><relation_attribute><name>used_in_geometries</name><ref_to>geometry</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>coordinate_system</inverse_name></relation_attribute><relation_attribute><name>used_in_measurement_locations</name><ref_to>measurement_location</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>coordinate_system</inverse_name></relation_attribute></application_element><application_element><name>geometry</name><basetype>AoAny</basetype><application_attribute><name>id</name><base_attribute>id</base_attribute></application_attribute><application_attribute><name>name</name><base_attribute>name</base_attribute></application_attribute><application_attribute><name>version</name><base_attribute>version</base_attribute></application_attribute><application_attribute><name>geometry_id</name><datatype>DT_LONG</datatype></application_attribute><relation_attribute><name>coordinate_system</name><ref_to>coordinate_system</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>used_in_geometries</inverse_name></relation_attribute><relation_attribute><name>sub_geometries</name><ref_to>geometry</ref_to><base_relation>children</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>parent_geometry</inverse_name></relation_attribute><relation_attribute><name>parent_geometry</name><ref_to>geometry</ref_to><base_relation>parent</base_relation><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>sub_geometries</inverse_name></relation_attribute><relation_attribute><name>measurements_on_geometry</name><ref_to>dts</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>geometry</inverse_name></relation_attribute><relation_attribute><name>geometry_shapes</name><ref_to>sm</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>geometry</inverse_name></relation_attribute></application_element><application_element><name>measurement_location</name><basetype>AoTestEquipmentPart</basetype><application_attribute><name>id</name><base_attribute>id</base_attribute></application_attribute><application_attribute><name>name</name><base_attribute>name</base_attribute></application_attribute><application_attribute><name>location_shape_id</name><datatype>DT_LONG</datatype><obligatory>true</obligatory></application_attribute><application_attribute><name>location_geometry_id</name><datatype>DT_LONG</datatype><obligatory>true</obligatory></application_attribute><application_attribute><name>location_mode</name><datatype>DT_ENUM</datatype><enumeration_type>location_modes</enumeration_type><obligatory>true</obligatory></application_attribute><application_attribute><name>channel_name</name><datatype>DT_STRING</datatype><obligatory>true</obligatory></application_attribute><application_attribute><name>channel_description</name><datatype>DT_STRING</datatype><obligatory>true</obligatory></application_attribute><application_attribute><name>u</name><datatype>DT_FLOAT</datatype><obligatory>true</obligatory></application_attribute><application_attribute><name>v</name><datatype>DT_FLOAT</datatype><obligatory>true</obligatory></application_attribute><application_attribute><name>w</name><datatype>DT_FLOAT</datatype><obligatory>true</obligatory></application_attribute><relation_attribute><name>coordinate_system</name><ref_to>coordinate_system</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>used_in_measurement_locations</inverse_name></relation_attribute><relation_attribute><name>channel_quantity</name><ref_to>quantity</ref_to><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>used_in_measurement_locations</inverse_name></relation_attribute><relation_attribute><name>in_reference_location</name><ref_to>meq</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>reference_locations</inverse_name></relation_attribute><relation_attribute><name>in_non_reference_location</name><ref_to>meq</ref_to><min_occurs>0</min_occurs><max_occurs>Many</max_occurs><inverse_name>non_reference_locations</inverse_name></relation_attribute><relation_attribute><name>devchain_iid</name><ref_to>devchain</ref_to><base_relation>parent_equipment_part</base_relation><min_occurs>1</min_occurs><max_occurs>1</max_occurs><inverse_name>measurement_locations</inverse_name></relation_attribute></application_element></application_model></atfx_file>
+
diff --git a/org.eclipse.mdm.filerelease/src/main/configuration/TSA/model.atfx.technical b/org.eclipse.mdm.filerelease/src/main/configuration/TSA/model.atfx.technical
new file mode 100644
index 0000000..5d5a5f4
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/main/configuration/TSA/model.atfx.technical
Binary files differ
diff --git a/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/boundary/FileReleaseResource.java b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/boundary/FileReleaseResource.java
new file mode 100644
index 0000000..452eda5
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/boundary/FileReleaseResource.java
@@ -0,0 +1,181 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.filerelease.boundary;
+
+import java.util.List;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.filerelease.control.FileReleaseManager;
+import org.eclipse.mdm.filerelease.entity.FileRelease;
+import org.eclipse.mdm.filerelease.entity.FileReleaseResponse;
+import org.eclipse.mdm.filerelease.utils.FileReleaseUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+/**
+ * {@link FileRelease} resource
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Tag(name = "FileReleases")
+@Path("/filereleases")
+public class FileReleaseResource {
+
+	private static final Logger LOG = LoggerFactory.getLogger(FileReleaseResource.class);
+
+	@EJB
+	private FileReleaseService fileReleaseService;
+
+	/**
+	 * 
+	 * delegates the request to the {@link FileReleaseService}
+	 * 
+	 * @param identifier The identifier of the {@link FileRelease}
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Path("/{IDENTIFIER}")
+	public Response getRelease(@PathParam("IDENTIFIER") String identifier) {
+		try {
+			FileRelease fileRelease = this.fileReleaseService.getRelease(identifier);
+			return FileReleaseUtils.toResponse(new FileReleaseResponse(fileRelease), Status.OK);
+		} catch (RuntimeException e) {
+			LOG.error(e.getMessage(), e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	/**
+	 * delegates the request to the {@link FileReleaseService}
+	 * 
+	 * @param state     The state of the {@link FileRelease}s to return
+	 * @param direction The file release direction (incoming or outgoing)
+	 * @return @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response getReleases(@QueryParam("direction") String direction, @QueryParam("state") String state) {
+		try {
+
+			List<FileRelease> list = null;
+
+			if ((direction != null)
+					&& direction.equalsIgnoreCase(FileReleaseManager.FILE_RELEASE_DIRECTION_INCOMMING)) {
+				list = this.fileReleaseService.getIncommingReleases(state);
+			} else if ((direction != null)
+					&& direction.equalsIgnoreCase(FileReleaseManager.FILE_RELEASE_DIRECTION_OUTGOING)) {
+				list = this.fileReleaseService.getOutgoingReleases(state);
+			} else {
+				list = this.fileReleaseService.getReleases(state);
+			}
+
+			return FileReleaseUtils.toResponse(new FileReleaseResponse(list), Status.OK);
+
+		} catch (RuntimeException e) {
+			LOG.error(e.getMessage(), e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	/**
+	 * delegates the request to the {@link FileReleaseService}
+	 * 
+	 * @param newFileRelease The {@link FileReleaseRequest} to create.
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@POST
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response create(FileRelease newFileRelease) {
+		try {
+			FileRelease fileRelease = this.fileReleaseService.create(newFileRelease);
+			return FileReleaseUtils.toResponse(new FileReleaseResponse(fileRelease), Status.OK);
+		} catch (RuntimeException e) {
+			LOG.error(e.getMessage(), e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	/**
+	 * delegates the request to the {@link FileReleaseService}
+	 * 
+	 * @param identifier The identifier of the {@link FileRelease} to update.
+	 * @param The        {@link FileRelease} with updated state
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@POST
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("/{IDENTIFIER}")
+	public Response update(@PathParam("IDENTIFIER") String identifier, FileRelease updatedFileRelease) {
+		try {
+
+			if (!identifier.equals(updatedFileRelease.identifier)) {
+				throw new WebApplicationException("illegal update post request (identifier is not matching)",
+						Status.FORBIDDEN);
+			}
+
+			if (updatedFileRelease.state.equalsIgnoreCase(FileReleaseManager.FILE_RELEASE_STATE_APPROVED)) {
+				FileRelease fr = this.fileReleaseService.approve(updatedFileRelease);
+				return FileReleaseUtils.toResponse(new FileReleaseResponse(fr), Status.OK);
+			} else if (updatedFileRelease.state.equalsIgnoreCase(FileReleaseManager.FILE_RELEASE_STATE_REJECTED)) {
+				FileRelease fr = this.fileReleaseService.reject(updatedFileRelease);
+				return FileReleaseUtils.toResponse(new FileReleaseResponse(fr), Status.OK);
+			}
+			String errorMessage = "permission denied: only state updates are allowd "
+					+ "(expected stats: RELEASE_APPROVED or RELEASE_REJECTED";
+			throw new WebApplicationException(errorMessage, Status.FORBIDDEN);
+
+		} catch (RuntimeException e) {
+			LOG.error(e.getMessage(), e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	/**
+	 * delegates the request to the {@link FileReleaseService}
+	 * 
+	 * @param identifier The identifier of the {@link FileRelease} to delete.
+	 * @return the result of the delegated request as {@link Response} (only OK if
+	 *         {@link FileRelease} has been deleted)
+	 */
+	@DELETE
+	@Path("/{IDENTIFIER}")
+	public Response delete(@PathParam("IDENTIFIER") String identifier) {
+		try {
+			this.fileReleaseService.delete(identifier);
+			return Response.ok().build();
+		} catch (RuntimeException e) {
+			LOG.error(e.getMessage(), e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+}
diff --git a/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/boundary/FileReleaseService.java b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/boundary/FileReleaseService.java
new file mode 100644
index 0000000..56004ee
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/boundary/FileReleaseService.java
@@ -0,0 +1,247 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.filerelease.boundary;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.model.User;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+import org.eclipse.mdm.filerelease.control.FileConvertJobManager;
+import org.eclipse.mdm.filerelease.control.FileReleaseException;
+import org.eclipse.mdm.filerelease.control.FileReleaseManager;
+import org.eclipse.mdm.filerelease.entity.FileRelease;
+import org.eclipse.mdm.filerelease.utils.FileReleasePermissionUtils;
+import org.eclipse.mdm.filerelease.utils.FileReleaseUtils;
+import org.eclipse.mdm.property.GlobalProperty;
+
+/**
+ * FileReleaseService Bean implementation with available {@link FileRelease}
+ * operations
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Stateless
+public class FileReleaseService {
+
+	@Inject
+	private ConnectorService connectorService;
+	@EJB
+	private FileReleaseManager manager;
+	@EJB
+	private FileConvertJobManager converter;
+
+	@Inject
+	@GlobalProperty("filerelease.converter.target.root.directory")
+	private String targetDirectoryPath = "";
+
+	/**
+	 * Returns the the {@link FileRelease} with the given identifier
+	 * 
+	 * @param identifier The identifier of the {@link FileRelease}
+	 * @return The {@link FileRelease}
+	 */
+	public FileRelease getRelease(String identifier) {
+		User user = FileReleaseUtils.getLoggedOnUser(this.connectorService);
+		return this.manager.getRelease(user.getName(), identifier);
+	}
+
+	/**
+	 * Returns all {@link FileRelease}s with the given state.
+	 * 
+	 * @param state The state of the {@link FileRelease}s to return (null means all
+	 *              releases in every state will be returned)
+	 * @return The {@link FileRelease}s in given state or all {@link FileRelease}s
+	 */
+	public List<FileRelease> getReleases(String state) {
+		Set<FileRelease> fileReleases = new HashSet<>();
+		fileReleases.addAll(getIncommingReleases(state));
+		fileReleases.addAll(getOutgoingReleases(state));
+		return new ArrayList<>(fileReleases);
+	}
+
+	/**
+	 * Returns all incoming {@link FileRelease}s with the given state.
+	 * 
+	 * @param state The state of the incoming {@link FileRelease}s to return (null
+	 *              means all incoming releases in every state will be returned)
+	 * @return The incoming {@link FileRelease} in given state or all incoming
+	 *         {@link FileRelease}s
+	 */
+	public List<FileRelease> getIncommingReleases(String state) {
+
+		User user = FileReleaseUtils.getLoggedOnUser(this.connectorService);
+		if (state == null || state.trim().length() <= 0) {
+			List<FileRelease> list = this.manager.getReleases(user.getName(),
+					FileReleaseManager.FILE_RELEASE_DIRECTION_INCOMMING);
+			return FileReleaseUtils.filterByConnectedSources(list, this.connectorService);
+		}
+		List<FileRelease> list = this.manager.getReleases(user.getName(),
+				FileReleaseManager.FILE_RELEASE_DIRECTION_INCOMMING, state);
+		return FileReleaseUtils.filterByConnectedSources(list, this.connectorService);
+	}
+
+	/**
+	 * Returns all outgoing {@link FileRelease}s with the given state.
+	 * 
+	 * @param state The state of the outgoing {@link FileRelease}s to return (null
+	 *              means all outgoing releases in every state will be returned)
+	 * @return The outgoing {@link FileRelease}s in given state or all outgoing
+	 *         {@link FileRelease}s
+	 */
+	public List<FileRelease> getOutgoingReleases(String state) {
+
+		User user = FileReleaseUtils.getLoggedOnUser(this.connectorService);
+		if (state == null || state.trim().length() <= 0) {
+			List<FileRelease> list = this.manager.getReleases(user.getName(),
+					FileReleaseManager.FILE_RELEASE_DIRECTION_OUTGOING);
+			return FileReleaseUtils.filterByConnectedSources(list, this.connectorService);
+		}
+		List<FileRelease> list = this.manager.getReleases(user.getName(),
+				FileReleaseManager.FILE_RELEASE_DIRECTION_OUTGOING, state);
+		return FileReleaseUtils.filterByConnectedSources(list, this.connectorService);
+	}
+
+	/**
+	 * Creates a new {@link FileRelease}. Approves the {@link FileRelease} directly
+	 * if the sender is equals the receiver of the {@link FileRelease}.
+	 * 
+	 * @param newFileRelease The given {@link FileRelease} that holds the
+	 *                       information to create a new {@link FileRelease}
+	 */
+	public FileRelease create(FileRelease newFileRelease) {
+		checkFileReleaseRequest(newFileRelease);
+		User user = FileReleaseUtils.getLoggedOnUser(this.connectorService);
+
+		List<FileRelease> list = this.manager.getReleases(user.getName(),
+				FileReleaseManager.FILE_RELEASE_DIRECTION_OUTGOING);
+		FileReleasePermissionUtils.canCreate(newFileRelease, user.getName(), list);
+
+		TestStep testStep = FileReleaseUtils.loadTestStep(connectorService, newFileRelease.sourceName,
+				newFileRelease.id);
+		User receiver = FileReleaseUtils.getResponsiblePerson(this.connectorService, testStep);
+
+		newFileRelease.identifier = UUID.randomUUID().toString();
+		newFileRelease.name = testStep.getName();
+		newFileRelease.state = FileReleaseManager.FILE_RELEASE_STATE_ORDERED;
+		newFileRelease.sender = user.getName();
+		newFileRelease.receiver = receiver.getName();
+
+		this.manager.addFileRelease(newFileRelease);
+
+		if (newFileRelease.sender.equalsIgnoreCase(newFileRelease.receiver)) {
+			FileRelease fileRelease2Approve = new FileRelease();
+			fileRelease2Approve.identifier = newFileRelease.identifier;
+			fileRelease2Approve.state = FileReleaseManager.FILE_RELEASE_STATE_APPROVED;
+			approve(fileRelease2Approve);
+		}
+
+		return newFileRelease;
+	}
+
+	/**
+	 * Deletes the {@link FileRelease} with the given identifier.
+	 * 
+	 * @param identifier The identifier of the {@link FileRelease} to delete.
+	 */
+	public void delete(String identifier) {
+
+		User user = FileReleaseUtils.getLoggedOnUser(this.connectorService);
+		FileRelease fileRelease = this.manager.getRelease(user.getName(), identifier);
+
+		FileReleasePermissionUtils.canDelete(fileRelease, user.getName());
+		File targetDirectory = FileReleaseUtils.locateTargetDirectory(this.targetDirectoryPath);
+		File targetFile = new File(targetDirectory, fileRelease.fileLink);
+		if (this.manager.canDeleteFileLink(fileRelease.identifier, fileRelease.fileLink)) {
+			FileReleaseUtils.deleteFileLink(targetFile);
+		}
+
+		this.manager.removeFileRelease(fileRelease);
+	}
+
+	/**
+	 * Approves and Releases the {@link FileRelease}
+	 * 
+	 * @param updatedFileRelease The {@link FileRelease} to approve and release
+	 */
+	public FileRelease approve(FileRelease updatedFileRelease) {
+
+		User user = FileReleaseUtils.getLoggedOnUser(this.connectorService);
+		FileRelease fileRelease = this.manager.getRelease(user.getName(), updatedFileRelease.identifier);
+
+		FileReleasePermissionUtils.canApprove(fileRelease, user.getName());
+		fileRelease.state = updatedFileRelease.state;
+
+		FileReleasePermissionUtils.canRelease(fileRelease, user.getName());
+		this.converter.release(fileRelease, FileReleaseUtils.locateTargetDirectory(this.targetDirectoryPath));
+		return fileRelease;
+	}
+
+	/**
+	 * Rejects the {@link FileRelease} with the given identifier. Sets the given
+	 * message as reject message.
+	 * 
+	 * @param updatedFileRelease {@link FileRelease} to reject
+	 */
+	public FileRelease reject(FileRelease updatedFileRelease) {
+
+		User user = FileReleaseUtils.getLoggedOnUser(this.connectorService);
+		FileRelease fileRelease = this.manager.getRelease(user.getName(), updatedFileRelease.identifier);
+
+		FileReleasePermissionUtils.canReject(fileRelease, user.getName());
+		fileRelease.state = updatedFileRelease.state;
+		fileRelease.rejectMessage = updatedFileRelease.rejectMessage;
+		return fileRelease;
+	}
+
+	private void checkFileReleaseRequest(FileRelease newFileRelease) {
+		if (newFileRelease.sourceName == null || newFileRelease.sourceName.trim().length() < 1) {
+			throw new FileReleaseException("source name for new FileRelease is missing!");
+		}
+
+		if (newFileRelease.typeName == null || newFileRelease.typeName.trim().length() < 1) {
+			throw new FileReleaseException("type name for new FileRelease is missing!");
+		}
+
+		if (newFileRelease.id == null || newFileRelease.id.isEmpty()) {
+			throw new FileReleaseException("is is not valid for new FileRelease");
+		}
+
+		if (newFileRelease.validity <= 0) {
+			throw new FileReleaseException("validity [days] is not set for new FileRelease");
+		}
+
+		if (newFileRelease.format == null || newFileRelease.format.trim().length() <= 0) {
+			throw new FileReleaseException("output format for new FileRelease is missing!");
+		}
+
+		if (!FileReleaseUtils.isFormatValid(newFileRelease.format)) {
+			throw new FileReleaseException(
+					"unsupported file output format '" + newFileRelease.format + "' was defined for new FileRelease");
+		}
+
+	}
+
+}
diff --git a/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/FileConvertJob.java b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/FileConvertJob.java
new file mode 100644
index 0000000..10adca8
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/FileConvertJob.java
@@ -0,0 +1,97 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.filerelease.control;
+
+import java.io.File;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.filerelease.control.converter.FileConverterException;
+import org.eclipse.mdm.filerelease.control.converter.IFileConverter;
+import org.eclipse.mdm.filerelease.entity.FileRelease;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Job for converting files.
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+public class FileConvertJob implements Runnable {
+
+	private static final Logger LOG = LoggerFactory.getLogger(FileConvertJob.class);
+
+	private final IFileConverter fileConverter;
+	private final FileRelease fileRelease;
+	private final TestStep testStep;
+	private final ApplicationContext context;
+	private final File targetDirectory;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param fileRelease     The {@link FileRelease} that contains the link to the
+	 *                        file to convert
+	 * @param fileConverter   The {@link IFileConverter} to use for the conversion
+	 * @param testStep        The {@link TestStep}
+	 * @param em              The {@link EntityManager}
+	 * @param targetDirectory target output directory for the generated files
+	 */
+	public FileConvertJob(FileRelease fileRelease, IFileConverter fileConverter, TestStep testStep,
+			ApplicationContext context, File targetDirectory) {
+
+		this.fileRelease = fileRelease;
+		this.fileConverter = fileConverter;
+		this.testStep = testStep;
+		this.context = context;
+		this.targetDirectory = targetDirectory;
+	}
+
+	/**
+	 * Executes the file conversion.
+	 */
+	@Override
+	public void run() {
+		try {
+			this.fileRelease.state = FileReleaseManager.FILE_RELEASE_STATE_PROGRESSING;
+
+			this.fileConverter.execute(this.fileRelease, this.testStep, this.context, this.targetDirectory);
+
+			this.fileRelease.expire = calculateExpireDate(this.fileRelease.validity);
+			this.fileRelease.state = FileReleaseManager.FILE_RELEASE_STATE_RELEASED;
+
+		} catch (FileConverterException e) {
+			this.fileRelease.state = FileReleaseManager.FILE_RELEASE_STATE_PROGRESSING_ERROR;
+			this.fileRelease.errorMessage = e.getMessage();
+			LOG.error(e.getMessage(), e);
+		} catch (Exception e) {
+			this.fileRelease.state = FileReleaseManager.FILE_RELEASE_STATE_PROGRESSING_ERROR;
+			this.fileRelease.errorMessage = e.getMessage();
+			LOG.error(e.getMessage(), e);
+		}
+	}
+
+	private long calculateExpireDate(int validity) {
+		Calendar calendar = new GregorianCalendar();
+		calendar.setTime(new Date());
+		calendar.add(Calendar.DAY_OF_MONTH, validity);
+		return calendar.getTimeInMillis();
+	}
+}
diff --git a/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/FileConvertJobManager.java b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/FileConvertJobManager.java
new file mode 100644
index 0000000..7c03439
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/FileConvertJobManager.java
@@ -0,0 +1,100 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.filerelease.control;
+
+import java.io.File;
+import java.util.concurrent.Executor;
+
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+import org.eclipse.mdm.filerelease.control.converter.FileConverterPAK2ATFX;
+import org.eclipse.mdm.filerelease.control.converter.FileConverterPAK2RAW;
+import org.eclipse.mdm.filerelease.control.converter.IFileConverter;
+import org.eclipse.mdm.filerelease.entity.FileRelease;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * FileConvertJobManager Bean implementation.
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Stateless
+public class FileConvertJobManager {
+
+	private static final Logger LOG = LoggerFactory.getLogger(FileConvertJobManager.class);
+
+	@Inject
+	Executor executor;
+
+	@Inject
+	private ConnectorService connectorService;
+
+	@Inject
+	private FileConverterPAK2RAW fileConverterPAK2RAW;
+	@Inject
+	private FileConverterPAK2ATFX fileConverterPAK2ATFX;
+
+	/**
+	 * releases the given {@link FileRelease} (generates the file in the specified
+	 * format)
+	 * 
+	 * @param fileRelease     {@link FileRelease} to release
+	 * @param targetDirectory target output directory of the generated file
+	 */
+	public void release(FileRelease fileRelease, File targetDirectory) {
+
+		try {
+			ApplicationContext context = this.connectorService.getContextByName(fileRelease.sourceName);
+			EntityManager em = context.getEntityManager()
+					.orElseThrow(() -> new FileReleaseException("Entity manager not present!"));
+
+			TestStep testStep = em.load(TestStep.class, fileRelease.id);
+
+			IFileConverter converter = getFileConverterByFormat(fileRelease);
+			String identifier = fileRelease.identifier;
+
+			LOG.info("starting file release process for FileRelease with identifier '" + identifier + "' (with '"
+					+ converter.getConverterName() + "') ...");
+
+			Runnable runnable = new FileConvertJob(fileRelease, converter, testStep, context, targetDirectory);
+			this.executor.execute(runnable);
+		} catch (DataAccessException e) {
+			throw new FileReleaseException(e.getMessage(), e);
+		}
+
+	}
+
+	private IFileConverter getFileConverterByFormat(FileRelease fileRelease) {
+		if (fileRelease.format.equalsIgnoreCase(FileReleaseManager.CONVERTER_FORMAT_PAK2RAW)) {
+			return this.fileConverterPAK2RAW;
+
+		} else if (fileRelease.format.equalsIgnoreCase(FileReleaseManager.CONVERTER_FORMAT_PAK2ATFX)) {
+			return this.fileConverterPAK2ATFX;
+		}
+
+		throw new FileReleaseException("no FileConverter found for format '" + fileRelease.format
+				+ "' on executing FileRelease with identifier '" + fileRelease.identifier + "'!");
+	}
+
+}
diff --git a/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/FileReleaseException.java b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/FileReleaseException.java
new file mode 100644
index 0000000..cbba57f
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/FileReleaseException.java
@@ -0,0 +1,45 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.filerelease.control;
+
+/**
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+public class FileReleaseException extends RuntimeException {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param message The error message.
+	 */
+	public FileReleaseException(String message) {
+		super(message);
+	}
+
+	/**
+	 * Constructor
+	 * 
+	 * @param message The error message
+	 * @param t       The {@link Throwable} that caused the exception
+	 */
+	public FileReleaseException(String message, Throwable t) {
+		super(message, t);
+	}
+
+}
diff --git a/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/FileReleaseExecutor.java b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/FileReleaseExecutor.java
new file mode 100644
index 0000000..efca858
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/FileReleaseExecutor.java
@@ -0,0 +1,38 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.filerelease.control;
+
+import java.util.concurrent.Executor;
+
+import javax.ejb.Asynchronous;
+import javax.ejb.Stateless;
+
+/**
+ * 
+ * {@link Executor} implementation.
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Stateless
+public class FileReleaseExecutor implements Executor {
+
+	@Override
+	@Asynchronous
+	public void execute(Runnable command) {
+		command.run();
+	}
+
+}
diff --git a/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/FileReleaseManager.java b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/FileReleaseManager.java
new file mode 100644
index 0000000..ae5afd1
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/FileReleaseManager.java
@@ -0,0 +1,244 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.filerelease.control;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.ejb.EJB;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+
+import org.eclipse.mdm.filerelease.entity.FileRelease;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 
+ * FileReleaseManager bean implementation.
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Startup
+@Singleton
+public class FileReleaseManager {
+
+	private static final Logger LOG = LoggerFactory.getLogger(FileReleaseManager.class);
+
+	public static final String FILE_RELEASE_STATE_ORDERED = "RELEASE_ORDERED";
+	public static final String FILE_RELEASE_STATE_REJECTED = "RELEASE_REJECTED";
+	public static final String FILE_RELEASE_STATE_APPROVED = "RELEASE_APPROVED";
+	public static final String FILE_RELEASE_STATE_PROGRESSING = "RELEASE_PROGRESSING";
+	public static final String FILE_RELEASE_STATE_PROGRESSING_ERROR = "RELEASE_PROGRESSING_ERROR";
+	public static final String FILE_RELEASE_STATE_RELEASED = "RELEASE_RELEASED";
+	public static final String FILE_RELEASE_STATE_EXPIRED = "RELEASE_EXPIRED";
+
+	public static final String FILE_RELEASE_DIRECTION_INCOMMING = "INCOMMING";
+	public static final String FILE_RELEASE_DIRECTION_OUTGOING = "OUTGOING";
+
+	public static final String CONVERTER_FORMAT_PAK2RAW = "PAK2RAW";
+	public static final String CONVERTER_FORMAT_PAK2ATFX = "PAK2ATFX";
+
+	private Map<String, FileRelease> releaseMap;
+
+	@EJB
+	private FileReleasePersistance releasePersistance;
+
+	/**
+	 * Returns the {@link FileRelease} for the given user with the given identifier.
+	 * 
+	 * @param userName   The name of the user to locate the {@link FileRelease}
+	 * @param identifier The identifier of the {@link FileRelease}
+	 * @return The found {@link FileRelease}
+	 */
+	public FileRelease getRelease(String userName, String identifier) {
+
+		if (!this.releaseMap.containsKey(identifier)) {
+			throw new FileReleaseException("unable to find FileRelease with identifier '" + identifier + "'!");
+		}
+
+		FileRelease fileRelease = this.releaseMap.get(identifier);
+
+		if (fileRelease.sender.equalsIgnoreCase(userName) || fileRelease.receiver.equalsIgnoreCase(userName)) {
+			updateExpired(fileRelease);
+			return fileRelease;
+		}
+
+		throw new FileReleaseException("unable to find FileRelease with identifier '" + identifier
+				+ "' for user with name '" + userName + "'!");
+
+	}
+
+	/**
+	 * 
+	 * Returns all {@link FileRelease}s for the given user in the given direction
+	 * ({@link FileReleaseManager#FILE_RELEASE_DIRECTION_INCOMMING} or
+	 * ({@link FileReleaseManager#FILE_RELEASE_DIRECTION_OUTGOING}).
+	 * 
+	 * @param userName  The name of the user
+	 * @param direction The direction (
+	 *                  {@link FileReleaseManager#FILE_RELEASE_DIRECTION_INCOMMING}
+	 *                  or
+	 *                  {@link FileReleaseManager#FILE_RELEASE_DIRECTION_OUTGOING})
+	 * @return A list with the {@link FileRelease}s
+	 */
+	public List<FileRelease> getReleases(String userName, String direction) {
+
+		Collection<FileRelease> releases = this.releaseMap.values();
+
+		if (direction.equalsIgnoreCase(FILE_RELEASE_DIRECTION_INCOMMING)) {
+			return extractIncommingReleases(userName, releases);
+		}
+
+		if (direction.equalsIgnoreCase(FILE_RELEASE_DIRECTION_OUTGOING)) {
+			return extractOutgoingReleases(userName, releases);
+		}
+
+		LOG.debug("unknown file request direction value '" + direction + "'. Returing empty file request list");
+		return Collections.emptyList();
+	}
+
+	/**
+	 * Returns all {@link FileRelease}s for a given user, in the given direction,
+	 * with the given state.
+	 * 
+	 * @param userName  The user name.
+	 * @param direction The direction (
+	 *                  {@link FileReleaseManager#FILE_RELEASE_DIRECTION_INCOMMING}
+	 *                  or
+	 *                  {@link FileReleaseManager#FILE_RELEASE_DIRECTION_OUTGOING})
+	 * @param state     The state of the {@link FileRelease}s to return
+	 * @return A list with the {@link FileRelease}s
+	 */
+	public List<FileRelease> getReleases(String userName, String direction, String state) {
+		List<FileRelease> list = getReleases(userName, direction);
+		return extractReleasesByState(state, list);
+	}
+
+	/**
+	 * Adds a new {@link FileRelease}.
+	 * 
+	 * @param fileRelease The {@link FileRelease} to add.
+	 */
+	public void addFileRelease(FileRelease fileRelease) {
+		if (this.releaseMap.containsKey(fileRelease.identifier)) {
+			throw new FileReleaseException(
+					"FileRelease with identifier '" + fileRelease.identifier + "' already exists!");
+		}
+		this.releaseMap.put(fileRelease.identifier, fileRelease);
+	}
+
+	/**
+	 * 
+	 * Removes a {@link FileRelease}
+	 * 
+	 * @param fileRelease The {@link FileRelease} the remove.
+	 */
+	public void removeFileRelease(FileRelease fileRelease) {
+		if (!this.releaseMap.containsKey(fileRelease.identifier)) {
+			throw new FileReleaseException(
+					"FileRelease with identifier '" + fileRelease.identifier + "' does not exist!");
+		}
+		this.releaseMap.remove(fileRelease.identifier);
+	}
+
+	/**
+	 * 
+	 * Checks if the given file link can be deleted
+	 * 
+	 * @param fileLink The file link to check
+	 * @return TRUE if the file link can be deleted. Otherwise FALSE.
+	 */
+	public boolean canDeleteFileLink(String identfier, String fileLink) {
+
+		if (fileLink == null || fileLink.trim().length() <= 0) {
+			return false;
+		}
+
+		for (FileRelease fileRelease : this.releaseMap.values()) {
+
+			// skipping fileRelease to delete
+			if (fileRelease.identifier.equalsIgnoreCase(identfier)) {
+				continue;
+			}
+
+			if (fileRelease.fileLink.equalsIgnoreCase(fileLink)) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	@PostConstruct
+	private void onInitialize() {
+		this.releaseMap = this.releasePersistance.load();
+	}
+
+	@PreDestroy
+	private void onDestroy() {
+		this.releasePersistance.save(this.releaseMap);
+	}
+
+	private List<FileRelease> extractIncommingReleases(String receiverName, Collection<FileRelease> releases) {
+		List<FileRelease> incommingList = new ArrayList<>();
+		for (FileRelease fileRelease : releases) {
+			if (fileRelease.receiver.equalsIgnoreCase(receiverName)) {
+				updateExpired(fileRelease);
+				incommingList.add(fileRelease);
+			}
+		}
+		return incommingList;
+	}
+
+	private List<FileRelease> extractOutgoingReleases(String senderName, Collection<FileRelease> releases) {
+		List<FileRelease> outgoingList = new ArrayList<>();
+		for (FileRelease fileRelease : releases) {
+			if (fileRelease.sender.equalsIgnoreCase(senderName)) {
+				updateExpired(fileRelease);
+				outgoingList.add(fileRelease);
+			}
+		}
+		return outgoingList;
+	}
+
+	private List<FileRelease> extractReleasesByState(String state, List<FileRelease> list) {
+		List<FileRelease> statedList = new ArrayList<>();
+		for (FileRelease fileRelease : list) {
+			if (fileRelease.state.equalsIgnoreCase(state)) {
+				statedList.add(fileRelease);
+			}
+		}
+		return statedList;
+	}
+
+	private void updateExpired(FileRelease fileRelease) {
+		long current = System.currentTimeMillis();
+
+		if (!fileRelease.state.equalsIgnoreCase(FILE_RELEASE_STATE_RELEASED)) {
+			return;
+		}
+
+		if (fileRelease.expire <= current) {
+			fileRelease.state = FILE_RELEASE_STATE_EXPIRED;
+		}
+	}
+
+}
diff --git a/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/FileReleasePersistance.java b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/FileReleasePersistance.java
new file mode 100644
index 0000000..566b587
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/FileReleasePersistance.java
@@ -0,0 +1,126 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.filerelease.control;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.ejb.Stateless;
+
+import org.eclipse.mdm.filerelease.entity.FileRelease;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 
+ * FileReleasePersistance bean implementation.
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Stateless
+public class FileReleasePersistance {
+
+	private static final Logger LOG = LoggerFactory.getLogger(FileReleasePersistance.class);
+
+	private static final String TARGET_FILE_NAME = "mdm_filerelease_storage.sav";
+
+	/**
+	 * Persists the given file release map.
+	 * 
+	 * @param map The map to persist.
+	 */
+	public void save(Map<String, FileRelease> map) {
+
+		String userHomePath = System.getProperty("user.home");
+		File directory = new File(userHomePath);
+
+		File targetFile = new File(directory, TARGET_FILE_NAME);
+		writeFile(targetFile, map);
+	}
+
+	/**
+	 * 
+	 * Loads the {@link FileRelease} into a map.
+	 * 
+	 * @return The map that contains the {@link FileRelease}s
+	 */
+	public Map<String, FileRelease> load() {
+
+		String userHomePath = System.getProperty("user.home");
+		File directory = new File(userHomePath);
+
+		File targetFile = new File(directory, TARGET_FILE_NAME);
+
+		return loadFile(targetFile);
+	}
+
+	private void writeFile(File targetFile, Map<String, FileRelease> map) {
+
+		LOG.debug("Writing FileRelease storage file to '" + targetFile.getAbsolutePath() + "'");
+
+		try {
+			if (targetFile.exists()) {
+				deleteFile(targetFile);
+			}
+
+			try (ObjectOutputStream oos = new ObjectOutputStream(
+					new BufferedOutputStream(new FileOutputStream(targetFile)))) {
+				oos.writeObject(map);
+			}
+		} catch (IOException e) {
+			throw new FileReleaseException(e.getMessage(), e);
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	private Map<String, FileRelease> loadFile(File targetFile) {
+
+		LOG.debug("Loading FileRelease storage file from '" + targetFile.getAbsolutePath() + "'");
+
+		try {
+			if (!targetFile.exists()) {
+				LOG.warn("Storage file does not exist at '" + targetFile.getAbsolutePath()
+						+ "'. Using an empty FileRelease pool");
+				return new HashMap<String, FileRelease>();
+			}
+
+			try (ObjectInputStream ois = new ObjectInputStream(
+					new BufferedInputStream(new FileInputStream(targetFile)))) {
+				return (Map<String, FileRelease>) ois.readObject();
+			}
+		} catch (IOException e) {
+			throw new FileReleaseException(e.getMessage(), e);
+		} catch (ClassNotFoundException e) {
+			throw new FileReleaseException(e.getMessage(), e);
+		}
+	}
+
+	private void deleteFile(File targetFile) {
+		boolean deleted = targetFile.delete();
+		if (!deleted) {
+			throw new FileReleaseException(
+					"Unable to delete FileRelease storage file at '" + targetFile.getAbsolutePath() + "'");
+		}
+	}
+}
diff --git a/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/converter/AbstractFileConverter.java b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/converter/AbstractFileConverter.java
new file mode 100644
index 0000000..714e480
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/converter/AbstractFileConverter.java
@@ -0,0 +1,259 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.filerelease.control.converter;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import org.eclipse.mdm.api.base.adapter.Attribute;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.base.query.Filter;
+import org.eclipse.mdm.api.base.search.SearchService;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.filerelease.control.FileReleaseException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 
+ * Abstract implementation of {@link IFileConverter}. Provides some utility
+ * methods for further {@link IFileConverter} implementations.
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+public abstract class AbstractFileConverter implements IFileConverter {
+
+	protected static final Logger LOG = LoggerFactory.getLogger(AbstractFileConverter.class);
+
+	/**
+	 * 
+	 * Creates a zip file from the given folder.
+	 * 
+	 * @param targetFile  The path to the zip file to create
+	 * @param folderToZip The path to the folder to zip.
+	 * @throws FileConverterException Thrown if an error occurs.
+	 */
+	protected void zipFolder(String targetFile, String folderToZip) throws FileConverterException {
+		zipFolder(targetFile, folderToZip, false);
+	}
+
+	/**
+	 * Creates a zip file from the given folder.
+	 * 
+	 * @param targetFile  The path to the zip file to create
+	 * @param folderToZip The path to the folder to zip.
+	 * @param overWrite   True if the target file should be overwritten.
+	 * @throws FileConverterException Thrown if an error occurs.
+	 */
+	protected void zipFolder(String targetFile, String folderToZip, boolean overWrite) throws FileConverterException {
+		File source = new File(folderToZip);
+		File target = new File(targetFile);
+		if (!source.exists()) {
+			throw new FileConverterException("Unable to zip folder: " + folderToZip + ". The folder does not exist.");
+		}
+		if (!overWrite && target.exists()) {
+			throw new FileConverterException(
+					"Unable to zip folder: " + folderToZip + ". The target file" + targetFile + "already exists.");
+		}
+		if (overWrite && target.exists()) {
+			target.delete();
+		}
+		zipFiles(listAllFilesRecursive(source), target, folderToZip);
+	}
+
+	/**
+	 * 
+	 * Locates the attribute value for the given string attribute.
+	 * 
+	 * @param em            The entity manager that manages the attribute
+	 * @param testStep      The {@link TestStep}
+	 * @param entityName    The name of the entity that belongs to the attribute.
+	 * @param attributeName The name of the attribute.
+	 * @return The attribute value.
+	 */
+	protected String locateStringAttributeValue(ApplicationContext context, TestStep testStep, String entityName,
+			String attributeName) {
+		try {
+			SearchService searchService = context.getSearchService()
+					.orElseThrow(() -> new FileReleaseException("Mandatory MDM SearchService not found"));
+
+			List<EntityType> list = searchService.listEntityTypes(TestStep.class);
+
+			EntityType entityType = locateEntityType(list, entityName);
+			Attribute attribute = locateAttribute(entityType, attributeName);
+
+			EntityType testStepET = locateEntityType(list, TestStep.class.getSimpleName());
+			Filter idFilter = Filter.idOnly(testStepET, testStep.getID());
+
+			List<TestStep> results = searchService.fetch(TestStep.class, Collections.singletonList(attribute),
+					idFilter);
+
+			if (results.size() < 0 || results.size() > 1) {
+				throw new FileReleaseException(
+						"Illegal search result for attribute value from '" + entityName + "." + attributeName + "'");
+			}
+
+			TestStep resultTestStep = results.get(0);
+			return resultTestStep.getValue(attributeName).extract();
+		} catch (DataAccessException e) {
+			throw new FileReleaseException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * Creates a new directory
+	 * 
+	 * @param path The path to the directory to create
+	 * @return The created directory {@link File}
+	 */
+	protected File createDirectory(String path) {
+		File directory = new File(path);
+		if (!directory.exists() && !directory.mkdir()) {
+			throw new FileReleaseException("Unable to create directory at '" + directory.getAbsolutePath() + "'");
+		}
+
+		return directory;
+	}
+
+	/**
+	 * Deletes the given directory
+	 * 
+	 * @param directory The directory to delete.
+	 */
+	protected void deleteDirectory(File directory) {
+		if (!directory.exists()) {
+			return;
+		}
+
+		File[] files = directory.listFiles();
+		for (File file : files) {
+			if (file.isDirectory()) {
+				deleteDirectory(file);
+			}
+			if (!file.delete()) {
+				LOG.warn("Unable to delete file at '" + file.getAbsolutePath() + "'");
+			}
+		}
+		if (!directory.delete()) {
+			LOG.warn("Unable to delete directory at '" + directory.getAbsolutePath() + "'");
+		}
+	}
+
+	/**
+	 * Locates the directory {@link File} for the given path
+	 * 
+	 * @param inputPath The path to the directory.
+	 * @return The {@link File}
+	 */
+	protected File locateInputDirectory(String inputPath) {
+		File pakInputDirectory = new File(inputPath);
+		if (!pakInputDirectory.exists()) {
+			throw new FileReleaseException(
+					"Input path at '" + pakInputDirectory.getAbsolutePath() + "' does not exist!");
+		}
+
+		if (!pakInputDirectory.isDirectory()) {
+			throw new FileReleaseException(
+					"Input path at '" + pakInputDirectory.getAbsolutePath() + "' is not a directory path!");
+		}
+
+		return pakInputDirectory;
+	}
+
+	protected String readPropertyValue(String propertyValue, boolean mandatory, String defaultValue,
+			String propertyName) throws FileConverterException {
+		if (propertyValue == null || propertyValue.trim().length() <= 0) {
+			if (mandatory) {
+				throw new FileConverterException("Mandatory property with name '" + propertyName + "' is not defined!");
+			}
+			return defaultValue;
+		}
+		return propertyValue;
+	}
+
+	private void zipFiles(List<File> list, File target, String sourcePath) throws FileConverterException {
+		try (ZipOutputStream zipStream = new ZipOutputStream(new FileOutputStream(target))) {
+			for (File file : list) {
+				zipFile(file, zipStream, sourcePath);
+			}
+		} catch (IOException ioe) {
+			throw new FileConverterException(
+					"An error occured when creating an zip archive from the folder: " + target.getAbsolutePath(), ioe);
+		}
+	}
+
+	private List<File> listAllFilesRecursive(File sourceFolder) {
+		List<File> files = new ArrayList<>();
+		File[] subFiles = sourceFolder.listFiles();
+		for (File f : subFiles) {
+			if (f.isDirectory()) {
+				files.addAll(listAllFilesRecursive(f));
+			} else {
+				files.add(f);
+			}
+		}
+		return files;
+	}
+
+	private void zipFile(File file, ZipOutputStream zipStream, String sourcePath) throws FileConverterException {
+
+		try (BufferedInputStream in = new BufferedInputStream(new FileInputStream(file))) {
+			String entryName = file.getAbsolutePath().replace(sourcePath, "");
+
+			ZipEntry zipEntry = new ZipEntry(entryName);
+			zipStream.putNextEntry(zipEntry);
+			byte[] buffer = new byte[1024];
+
+			for (int len = in.read(buffer); len > 0; len = in.read(buffer)) {
+				zipStream.write(buffer, 0, len);
+			}
+		} catch (IOException ioe) {
+			throw new FileConverterException("An error occured when zipping the file: " + file.getAbsolutePath(), ioe);
+		}
+
+	}
+
+	private EntityType locateEntityType(List<EntityType> list, String entityName) {
+		for (EntityType entityType : list) {
+			if (entityType.getName().equals(entityName)) {
+				return entityType;
+			}
+		}
+		throw new FileReleaseException("Entity with name '" + entityName + "' not available for TestStep query");
+	}
+
+	private Attribute locateAttribute(EntityType entityType, String attributeName) {
+		List<Attribute> list = entityType.getAttributes();
+		for (Attribute attribute : list) {
+			if (attribute.getName().equals(attributeName)) {
+				return attribute;
+			}
+		}
+		throw new FileReleaseException(
+				"Attribute with name '" + attributeName + "' does not exist at entity '" + entityType.getName() + "'");
+	}
+
+}
diff --git a/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/converter/FileConverterException.java b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/converter/FileConverterException.java
new file mode 100644
index 0000000..3687e0e
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/converter/FileConverterException.java
@@ -0,0 +1,46 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.filerelease.control.converter;
+
+/**
+ * FileConverterException
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+public class FileConverterException extends Exception {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param message The error message
+	 */
+	public FileConverterException(String message) {
+		super(message);
+	}
+
+	/**
+	 * Constructor#
+	 * 
+	 * @param message The error message
+	 * @param t       The {@link Throwable} that caused the exception.
+	 */
+	public FileConverterException(String message, Throwable t) {
+		super(message, t);
+	}
+
+}
diff --git a/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/converter/FileConverterPAK2ATFX.java b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/converter/FileConverterPAK2ATFX.java
new file mode 100644
index 0000000..947be25
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/converter/FileConverterPAK2ATFX.java
@@ -0,0 +1,175 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.filerelease.control.converter;
+
+import java.io.File;
+import java.io.IOException;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.filerelease.control.FileReleaseException;
+import org.eclipse.mdm.filerelease.entity.FileRelease;
+import org.eclipse.mdm.property.GlobalProperty;
+
+/**
+ * 
+ * {@link IFileConverter} implementation for converting PAK to ATFX
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@RequestScoped
+public class FileConverterPAK2ATFX extends AbstractFileConverter {
+
+	private static final String CONVERTER_NAME = "PAK2ATFX";
+	private static final String COMPONENT_CONFIG_ROOT_FOLDER = "org.eclipse.mdm.filerelease";
+
+	private static final String MODEL_FILE_NAME = "model.atfx.technical";
+	private static final String OUTPUT_SUB_TEMP_DIRECTORY = "tmp";
+	private static final String ATFX_OUTPUT_FILE_NAME_PREFIX = "_ATFX.zip";
+
+	@Inject
+	@GlobalProperty("filerelease.converter.pak.pakApplicationPath")
+	private String pakApplicationPath = "";
+	@Inject
+	@GlobalProperty("filerelease.converter.pak.modelTypeEntity")
+	private String modelTypeEntity = "";
+	@Inject
+	@GlobalProperty("filerelease.converter.pak.modelTypeAttribute")
+	private String modelTypeAttribute = "";
+	@Inject
+	@GlobalProperty("filerelease.converter.pak.pakInputEntity")
+	private String pakInputEntity = "";
+	@Inject
+	@GlobalProperty("filerelease.converter.pak.pakInputAttribute")
+	private String pakInputAttribute = "";
+
+	@Override
+	public void execute(FileRelease fileRelease, TestStep testStep, ApplicationContext context, File targetDirectory)
+			throws FileConverterException {
+
+		int returnValue = -1;
+
+		String pakApplicationPathValue = super.readPropertyValue(this.pakApplicationPath, true, null,
+				"pakApplicationPath");
+		String modelTypeEntityValue = super.readPropertyValue(this.modelTypeEntity, true, null, "modelTypeEntity");
+		String modelTypeAttributeValue = super.readPropertyValue(this.modelTypeAttribute, true, null,
+				"modelTypeAttribute");
+		String pakInputEntityValue = super.readPropertyValue(this.pakInputEntity, true, null, "pakInputEntity");
+		String pakInputAttributeValue = super.readPropertyValue(this.pakInputAttribute, true, null,
+				"pakInputAttribute");
+
+		String modelType = locateStringAttributeValue(context, testStep, modelTypeEntityValue, modelTypeAttributeValue);
+		String inputPath = locateStringAttributeValue(context, testStep, pakInputEntityValue, pakInputAttributeValue);
+
+		File pakApplicationFile = locatePakApplicationFile(pakApplicationPathValue);
+		File modelFile = locateModelFileForModelType(modelType);
+		File inputDirectory = locateInputDirectory(inputPath);
+		File outputDirectory = createDirectory(targetDirectory.getAbsolutePath() + File.separator + fileRelease.name);
+		File outputTempDirectory = createDirectory(
+				outputDirectory.getAbsolutePath() + File.separator + OUTPUT_SUB_TEMP_DIRECTORY);
+		File outputZIPFile = new File(outputDirectory, fileRelease.name + ATFX_OUTPUT_FILE_NAME_PREFIX);
+
+		try {
+			if (!outputZIPFile.exists()) {
+				LOG.debug("executing external pak application ...");
+				returnValue = createATFX(pakApplicationFile, inputDirectory, outputTempDirectory, modelFile);
+				if (returnValue != 0) {
+					String errorMessage = translateErrorCode(returnValue);
+					throw new FileConverterException(
+							"external pak application ends with an error (message: '" + errorMessage + "')");
+				}
+				LOG.debug("executing external pak application ... done!");
+
+				LOG.debug("executing zip process for pak application result ...");
+
+				zipFolder(outputZIPFile.getAbsolutePath(), outputTempDirectory.getAbsolutePath(), true);
+				LOG.debug("executing zip process for pak application result ... done");
+			}
+
+			fileRelease.fileLink = fileRelease.name + File.separator + outputZIPFile.getName();
+
+		} catch (IOException | InterruptedException e) {
+			throw new FileConverterException(e.getMessage(), e);
+		} finally {
+			deleteDirectory(outputTempDirectory);
+		}
+	}
+
+	@Override
+	public String getConverterName() {
+		return CONVERTER_NAME;
+	}
+
+	private int createATFX(File pakApplicationFile, File inputDirectory, File outputTempDirectory, File modelFile)
+			throws IOException, InterruptedException {
+
+		ProcessBuilder pb = new ProcessBuilder(pakApplicationFile.getAbsolutePath(), "-M",
+				inputDirectory.getAbsolutePath(), "-E", outputTempDirectory.getAbsolutePath(), "-MF",
+				modelFile.getAbsolutePath());
+		Process process = pb.start();
+
+		return process.waitFor();
+	}
+
+	private String translateErrorCode(int returnValue) {
+
+		String errorMessage;
+
+		if (returnValue == 1) {
+			errorMessage = "invalid input pak measurement";
+		} else if (returnValue == 2) {
+			errorMessage = "illegal command (a parameter is missing)";
+		} else if (returnValue == 6) {
+			errorMessage = "foreign model measurement";
+		} else if (returnValue == 7) {
+			errorMessage = "illegal input path format";
+		} else if (returnValue == 8) {
+			errorMessage = "source directory does not exist";
+		} else if (returnValue == 9) {
+			errorMessage = "target directory does not exist";
+		} else if (returnValue == 10) {
+			errorMessage = "target directory is not empty";
+		} else if (returnValue == 11) {
+			errorMessage = "illegal commant (model file parameter is missing)";
+		} else {
+			errorMessage = "unknown error with error code '" + returnValue + "'";
+		}
+		return errorMessage + "  (errorCode = '" + returnValue + "')";
+	}
+
+	private File locatePakApplicationFile(String pakApplicationFilePath) {
+		File pakApplicationFile = new File(pakApplicationFilePath);
+		if (!pakApplicationFile.exists()) {
+			throw new FileReleaseException("pak application executable file at '" + pakApplicationFile.getAbsolutePath()
+					+ "' does not exist!");
+		}
+		return pakApplicationFile;
+	}
+
+	private File locateModelFileForModelType(String modelType) {
+		File modelFile = new File(
+				COMPONENT_CONFIG_ROOT_FOLDER + File.separator + modelType + File.separator + MODEL_FILE_NAME);
+		if (!modelFile.exists()) {
+			throw new FileReleaseException("mapping file for atfx model with type '" + modelType
+					+ "' does not exist! (expected at: '" + modelFile.getAbsolutePath() + "')");
+		}
+		return modelFile;
+	}
+
+}
diff --git a/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/converter/FileConverterPAK2RAW.java b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/converter/FileConverterPAK2RAW.java
new file mode 100644
index 0000000..080b678
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/converter/FileConverterPAK2RAW.java
@@ -0,0 +1,74 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.filerelease.control.converter;
+
+import java.io.File;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.filerelease.entity.FileRelease;
+import org.eclipse.mdm.property.GlobalProperty;
+
+/**
+ * 
+ * {@link IFileConverter} implementation for converting PAK to RAW
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@RequestScoped
+public class FileConverterPAK2RAW extends AbstractFileConverter {
+
+	private static final String ATFX_OUTPUT_FILE_NAME_PREFIX = "_RAW.zip";
+
+	@Inject
+	@GlobalProperty("filerelease.converter.raw.pakInputEntity")
+	private String pakInputEntity = "";
+	@Inject
+	@GlobalProperty("filerelease.converter.raw.pakInputAttribute")
+	private String pakInputAttribute = "";
+
+	@Override
+	public void execute(FileRelease fileRelease, TestStep testStep, ApplicationContext context, File targetDirectory)
+			throws FileConverterException {
+
+		String pakInputEntityValue = super.readPropertyValue(this.pakInputEntity, true, null, "pakInputEntity");
+		String pakInputAttributeValue = super.readPropertyValue(this.pakInputAttribute, true, null,
+				"pakInputAttribute");
+
+		String inputPath = locateStringAttributeValue(context, testStep, pakInputEntityValue, pakInputAttributeValue);
+		File inputDirectory = locateInputDirectory(inputPath);
+
+		File outputDirectory = createDirectory(targetDirectory.getAbsolutePath() + File.separator + fileRelease.name);
+		File outputZIPFile = new File(outputDirectory, fileRelease.name + ATFX_OUTPUT_FILE_NAME_PREFIX);
+
+		if (!outputZIPFile.exists()) {
+			LOG.debug("executing zip process for pak raw data ...");
+			zipFolder(outputZIPFile.getAbsolutePath(), inputDirectory.getAbsolutePath(), true);
+			LOG.debug("executing zip process for pak raw data ... done");
+		}
+
+		fileRelease.fileLink = fileRelease.name + File.separator + outputZIPFile.getName();
+	}
+
+	@Override
+	public String getConverterName() {
+		return "PAK2RAW ";
+	}
+
+}
diff --git a/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/converter/IFileConverter.java b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/converter/IFileConverter.java
new file mode 100644
index 0000000..400d797
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/control/converter/IFileConverter.java
@@ -0,0 +1,50 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.filerelease.control.converter;
+
+import java.io.File;
+
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.filerelease.entity.FileRelease;
+
+/**
+ * 
+ * Interface for file converters
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+public interface IFileConverter {
+
+	/**
+	 * 
+	 * Executes the file conversion
+	 * 
+	 * @param fileRelease The file release that contains the file to convert
+	 * @param testStep    The {@link TestStep}
+	 * @param context     The {@link ApplicationContext}
+	 * @throws FileConverterException Thrown if the file conversion fails.
+	 */
+	void execute(FileRelease fileRelease, TestStep testStep, ApplicationContext context, File targetDirectory)
+			throws FileConverterException;
+
+	/**
+	 * Returns the name of the file converter
+	 * 
+	 * @return The name of the file converter
+	 */
+	String getConverterName();
+}
diff --git a/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/entity/FileRelease.java b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/entity/FileRelease.java
new file mode 100644
index 0000000..e149428
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/entity/FileRelease.java
@@ -0,0 +1,80 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.filerelease.entity;
+
+import java.io.Serializable;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.TestStep;
+
+/**
+ * FileRelease entity
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@XmlRootElement
+public class FileRelease implements Serializable {
+
+	private static final long serialVersionUID = -9016111258701009299L;
+
+	/** unique identifier of a {@link FileRelease} */
+	public String identifier = "";
+	/** current state of the {@link FileRelease} */
+	public String state = "";
+
+	/** name of the source {@link TestStep} */
+	public String name = "";
+	/**
+	 * name of the source {@link Environment} of the business object (part of MDM
+	 * URI)
+	 */
+	public String sourceName = "";
+	/** name of the type of the source business object (part of MDM URI) */
+	public String typeName = "";
+	/** id of the source business object (part of URI) */
+	public String id = "";
+
+	/** release sender name (MDM user name) */
+	public String sender = "";
+	/** release receiver name (MDM user name) */
+	public String receiver = "";
+
+	/**
+	 * order message to specify by the sender on creating a {@link FileRelease}
+	 */
+	public String orderMessage = "";
+	/**
+	 * reject message to specify by the receiver on rejecting a {@link FileRelease}
+	 */
+	public String rejectMessage = "";
+	/**
+	 * system error message set by the converter system if an error occuring during
+	 * generating the target file
+	 */
+	public String errorMessage = "";
+
+	/** output data format of the generated file */
+	public String format = "";
+	/** relative file link of the generated file */
+	public String fileLink = "";
+
+	/** number of days */
+	public int validity = 0;
+	/** calculated expire date (time stamp) */
+	public long expire = 0;
+}
diff --git a/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/entity/FileReleaseResponse.java b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/entity/FileReleaseResponse.java
new file mode 100644
index 0000000..8692903
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/entity/FileReleaseResponse.java
@@ -0,0 +1,60 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.filerelease.entity;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 
+ * {@link FileReleaseResponse}
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+public class FileReleaseResponse {
+
+	public List<FileRelease> data;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param fileRelease {@link FileRelease}
+	 */
+	public FileReleaseResponse(FileRelease fileRelease) {
+		this.data = new ArrayList<FileRelease>();
+		this.data.add(fileRelease);
+	}
+
+	/**
+	 * Constructor
+	 * 
+	 * @param list list of {@link FileRelease}s
+	 */
+	public FileReleaseResponse(List<FileRelease> list) {
+		this.data = new ArrayList<FileRelease>();
+		this.data.addAll(list);
+	}
+
+	/**
+	 * returns the {@link FileRelease} data
+	 * 
+	 * @return the {@link FileRelease} data
+	 */
+	public List<FileRelease> getData() {
+		return Collections.unmodifiableList(this.data);
+	}
+}
diff --git a/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/utils/FileReleasePermissionUtils.java b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/utils/FileReleasePermissionUtils.java
new file mode 100644
index 0000000..29964c3
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/utils/FileReleasePermissionUtils.java
@@ -0,0 +1,145 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.filerelease.utils;
+
+import java.util.List;
+
+import org.eclipse.mdm.filerelease.control.FileReleaseException;
+import org.eclipse.mdm.filerelease.control.FileReleaseManager;
+import org.eclipse.mdm.filerelease.entity.FileRelease;
+
+/**
+ * Provides utility methods for checking permissions on {@link FileRelease}s
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+public final class FileReleasePermissionUtils {
+
+	private FileReleasePermissionUtils() {
+	}
+
+	/**
+	 * Checks if the user with the given name has the permission to create the given
+	 * {@link FileRelease}s.
+	 * 
+	 * @param request  The {@link FileReleaseRequest}
+	 * @param userName The name of the user to check the permissions
+	 * @param list     The list with the {@link FileRelease}
+	 * @throws FileReleaseException if the user is not allowed to create the
+	 *                              {@link FileRelease}s
+	 * 
+	 */
+	public static void canCreate(FileRelease newFileRelease, String userName, List<FileRelease> list) {
+		for (FileRelease fileRelease : list) {
+
+			boolean sourceNameEqual = fileRelease.sourceName.equals(newFileRelease.sourceName);
+			boolean typeNameEqual = fileRelease.typeName.equals(newFileRelease.typeName);
+			boolean idEqual = fileRelease.id == newFileRelease.id;
+			boolean formatEqual = fileRelease.format.equals(newFileRelease.format);
+
+			if (sourceNameEqual && typeNameEqual && idEqual && formatEqual) {
+				throw new FileReleaseException("FileRelease for user '" + userName + "' and path'"
+						+ fileRelease.sourceName + "/" + fileRelease.typeName + "/" + fileRelease.id + "' (Format: '"
+						+ fileRelease.format + "') already exists!");
+			}
+		}
+
+	}
+
+	/**
+	 * Checks if the user with the given name has the permission to delete the given
+	 * {@link FileRelease}
+	 * 
+	 * @param fileRelease The {@link FileRelease} to check
+	 * @param userName    The name of the user to check the permissions
+	 * @throws FileReleaseException if the user is not allowed to delete the
+	 *                              {@link FileRelease}
+	 */
+	public static void canDelete(FileRelease fileRelease, String userName) {
+		if (!fileRelease.sender.equalsIgnoreCase(userName)) {
+			throw new FileReleaseException("user with name '" + userName + "' can't remove FileRelease with id '"
+					+ fileRelease.identifier + "'");
+		}
+
+		if (fileRelease.state.equalsIgnoreCase(FileReleaseManager.FILE_RELEASE_STATE_PROGRESSING)) {
+			throw new FileReleaseException("unable to remove FileRelease in state '"
+					+ FileReleaseManager.FILE_RELEASE_STATE_PROGRESSING + "'");
+		}
+	}
+
+	/**
+	 * Checks if the user with the given name has the permission to approve the
+	 * given {@link FileRelease}
+	 * 
+	 * @param fileRelease The {@link FileRelease} to check
+	 * @param userName    The name of the user to check the permissions
+	 * @throws FileReleaseException if the user is not allowed to approve the
+	 *                              {@link FileRelease}
+	 */
+	public static void canApprove(FileRelease fileRelease, String userName) {
+		if (!fileRelease.receiver.equalsIgnoreCase(userName)) {
+			throw new FileReleaseException("user with name '" + userName + "' can't approve FileRelease with id '"
+					+ fileRelease.identifier + "'");
+		}
+
+		if (!fileRelease.state.equalsIgnoreCase(FileReleaseManager.FILE_RELEASE_STATE_ORDERED)) {
+			throw new FileReleaseException("unable to approve FileRelease in state '" + fileRelease.state + "'");
+		}
+	}
+
+	/**
+	 * Checks if the user with the given name has the permission to release the
+	 * given {@link FileRelease}
+	 * 
+	 * @param fileRelease The {@link FileRelease} to check
+	 * @param userName    The name of the user to check the permissions
+	 * @throws FileReleaseException if the user is not allowed to approve the
+	 *                              {@link FileRelease}
+	 */
+	public static void canRelease(FileRelease fileRelease, String userName) {
+		if (!fileRelease.receiver.equalsIgnoreCase(userName)) {
+			throw new FileReleaseException("user with name '" + userName + "' can't release FileRelease with id '"
+					+ fileRelease.identifier + "'");
+		}
+
+		if (!fileRelease.state.equalsIgnoreCase(FileReleaseManager.FILE_RELEASE_STATE_APPROVED)) {
+			throw new FileReleaseException("unable to release FileRelease in state '" + fileRelease.state + "'");
+		}
+	}
+
+	/**
+	 * Checks if the user with the given name is allowed to reject the given
+	 * {@link FileRelease}
+	 * 
+	 * @param fileRelease The {@link FileRelease} to reject
+	 * @param userName    The name of the user to check the permissions
+	 * @throws FileReleaseException if the user is not allowed to reject the
+	 *                              {@link FileRelease}
+	 */
+	public static void canReject(FileRelease fileRelease, String userName) {
+
+		if (!fileRelease.receiver.equalsIgnoreCase(userName)) {
+			throw new FileReleaseException("user with name '" + userName + "' can't reject FileRelease with id '"
+					+ fileRelease.identifier + "'");
+		}
+
+		if (!fileRelease.state.equalsIgnoreCase(FileReleaseManager.FILE_RELEASE_STATE_ORDERED)) {
+			throw new FileReleaseException("unable to reject FileRelease in state '" + fileRelease.state + "'");
+		}
+
+	}
+
+}
diff --git a/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/utils/FileReleaseUtils.java b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/utils/FileReleaseUtils.java
new file mode 100644
index 0000000..94069e6
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/main/java/org/eclipse/mdm/filerelease/utils/FileReleaseUtils.java
@@ -0,0 +1,227 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.filerelease.utils;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import javax.ws.rs.core.GenericEntity;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.model.User;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+import org.eclipse.mdm.filerelease.control.FileReleaseException;
+import org.eclipse.mdm.filerelease.control.FileReleaseManager;
+import org.eclipse.mdm.filerelease.entity.FileRelease;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 
+ * Provides utility methods
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+public final class FileReleaseUtils {
+
+	private static final Logger LOG = LoggerFactory.getLogger(FileReleaseUtils.class);
+
+	private FileReleaseUtils() {
+	}
+
+	/**
+	 * Returns the {@link User} that is logged in on the given
+	 * {@link ConnectorService}
+	 * 
+	 * @param connectorService The {@link ConnectorService}
+	 * @return The {@link User}
+	 */
+	public static User getLoggedOnUser(ConnectorService connectorService) {
+
+		try {
+			List<ApplicationContext> contextList = connectorService.getContexts();
+
+			if (contextList == null || contextList.size() <= 0) {
+				throw new FileReleaseException("unable to locate neccessary EntityManager for file release service");
+			}
+
+			return extractUser(contextList.get(0).getEntityManager().map(em -> em.loadLoggedOnUser())
+					.orElseThrow(() -> new FileReleaseException("Entity manager not present!")));
+		} catch (DataAccessException e) {
+			throw new FileReleaseException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * Returns the {@link User} that is responsible for the given {@link TestStep}
+	 * 
+	 * @param connectorService The {@link ConnectorService}
+	 * @param testStep         The {@link TestStep}
+	 * @return The responsible {@link User}
+	 */
+	public static User getResponsiblePerson(ConnectorService connectorService, TestStep testStep) {
+		EntityManager em = connectorService.getContextByName(testStep.getSourceName()).getEntityManager()
+				.orElseThrow(() -> new FileReleaseException("Entity manager not present!"));
+		Test test = getTestParent(em, testStep);
+		return extractUser(test.getResponsiblePerson());
+	}
+
+	/**
+	 * 
+	 * Loads the {@link TestStep} with the given URI from the given
+	 * {@link ConnectorService}
+	 * 
+	 * @param connectorService The {@link ConnectorService}
+	 * @param sourceName       The source name
+	 * @param id               The id of the {@link TestStep}
+	 * @return The loaded {@link TestStep}
+	 */
+	public static TestStep loadTestStep(ConnectorService connectorService, String sourceName, String id) {
+		try {
+			EntityManager em = connectorService.getContextByName(sourceName).getEntityManager()
+					.orElseThrow(() -> new FileReleaseException("Entity manager not present!"));
+			return em.load(TestStep.class, id);
+		} catch (DataAccessException e) {
+			throw new FileReleaseException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * 
+	 * Creates a {@link Response} with the given status.
+	 * 
+	 * @param response The object that should be returned in the response.
+	 * @param status   The status of the response.
+	 * @return The {@link Response}
+	 */
+	public static Response toResponse(Object response, Status status) {
+		GenericEntity<Object> genEntity = new GenericEntity<Object>(response, response.getClass());
+		return Response.status(status).entity(genEntity).type(MediaType.APPLICATION_JSON).build();
+	}
+
+	/**
+	 * Deletes a filelink
+	 * 
+	 * @param file The file to delete
+	 */
+	public static void deleteFileLink(File file) {
+
+		if (!file.exists() || file.isDirectory()) {
+			LOG.warn("unable to delete file '" + file.getAbsolutePath() + "' (file does not exist)!");
+			return;
+		}
+
+		boolean deleted = file.delete();
+		if (!deleted) {
+			LOG.warn("unable to delete file '" + file.getAbsolutePath() + "' (unkown error)!");
+		}
+	}
+
+	/**
+	 * Checks if the given format is a valid file converter format.
+	 * 
+	 * @param format The format as string
+	 * @return TRUE if the format is valid. Otherwise FALSE.
+	 */
+	public static boolean isFormatValid(String format) {
+		boolean valid = false;
+
+		if (FileReleaseManager.CONVERTER_FORMAT_PAK2RAW.equalsIgnoreCase(format)) {
+			valid = true;
+		}
+
+		if (FileReleaseManager.CONVERTER_FORMAT_PAK2ATFX.equalsIgnoreCase(format)) {
+			valid = true;
+		}
+
+		return valid;
+	}
+
+	public static List<FileRelease> filterByConnectedSources(List<FileRelease> fileReleases,
+			ConnectorService connectorService) {
+
+		List<FileRelease> filteredList = new ArrayList<FileRelease>();
+
+		List<String> sourceNameList = listConnectedSourceNames(connectorService);
+		for (FileRelease fileRelease : fileReleases) {
+			if (isFileReleaseSourceConnected(fileRelease, sourceNameList)) {
+				filteredList.add(fileRelease);
+			}
+		}
+		return filteredList;
+
+	}
+
+	public static File locateTargetDirectory(String targetDirectoryPath) {
+		if (targetDirectoryPath == null || targetDirectoryPath.trim().length() <= 0) {
+			throw new FileReleaseException("mandatory targetDirectoryPath property is missing");
+		}
+		File targetDirectory = new File(targetDirectoryPath);
+		if (!targetDirectory.exists()) {
+			throw new FileReleaseException(
+					"configured target directory at '" + targetDirectory.getAbsolutePath() + "' does not exist!");
+		}
+		return targetDirectory;
+	}
+
+	private static boolean isFileReleaseSourceConnected(FileRelease fileRelease, List<String> sourceNameList) {
+		for (String sourceName : sourceNameList) {
+			if (fileRelease.sourceName != null && fileRelease.sourceName.equals(sourceName)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	private static List<String> listConnectedSourceNames(ConnectorService connectorService) {
+		try {
+			return connectorService.getContexts().stream().map(c -> c.getEntityManager()).filter(Optional::isPresent)
+					.map(Optional::get).map(em -> em.loadEnvironment().getSourceName()).collect(Collectors.toList());
+		} catch (DataAccessException e) {
+			throw new FileReleaseException(e.getMessage(), e);
+		}
+	}
+
+	private static User extractUser(Optional<User> oUser) {
+		if (!oUser.isPresent()) {
+			throw new FileReleaseException("unable to locate neccessary User for file release service");
+		}
+		return oUser.get();
+	}
+
+	private static Test getTestParent(EntityManager em, TestStep testStep) {
+		try {
+			Optional<Test> oTest = em.loadParent(testStep, TestStep.PARENT_TYPE_TEST);
+			if (!oTest.isPresent()) {
+				throw new FileReleaseException(
+						"unable to locate Test parent for TestStep with ID '" + testStep.getID() + "'");
+			}
+			return oTest.get();
+		} catch (DataAccessException e) {
+			throw new FileReleaseException(e.getMessage(), e);
+		}
+	}
+}
diff --git a/org.eclipse.mdm.filerelease/src/test/java/org/eclipse/mdm/filerelease/FileReleaseServiceMockHelper.java b/org.eclipse.mdm.filerelease/src/test/java/org/eclipse/mdm/filerelease/FileReleaseServiceMockHelper.java
new file mode 100644
index 0000000..8c32db4
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/test/java/org/eclipse/mdm/filerelease/FileReleaseServiceMockHelper.java
@@ -0,0 +1,164 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.filerelease;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.when;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Optional;
+
+import org.eclipse.mdm.api.base.adapter.Core;
+import org.eclipse.mdm.api.base.adapter.EntityStore;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.model.User;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+import org.eclipse.mdm.filerelease.control.FileConvertJobManager;
+import org.eclipse.mdm.filerelease.control.FileReleaseManager;
+import org.eclipse.mdm.filerelease.entity.FileRelease;
+import org.mockito.Mockito;
+
+public class FileReleaseServiceMockHelper {
+
+	public static final String TEST_USERNAME_SELF = "sa";
+	public static final String TEST_USERNAME_OTHER = "ot";
+
+	public static final String TESTSTEP = "TestStep";
+
+	public static final int NUM_FILE_REL_IN = 3;
+	public static final int NUM_FILE_REL_OUT = 5;
+
+	public static final String ID_IN_PREFIX = "IN";
+	public static final String ID_OUT_PREFIX = "OUT";
+
+	private FileReleaseServiceMockHelper() {
+	}
+
+	public static FileReleaseManager createFileReleaseManagerMock() throws Exception {
+
+		FileReleaseManager frManagerMock = new FileReleaseManager();
+		Field releaseMapField = frManagerMock.getClass().getDeclaredField("releaseMap");
+		releaseMapField.setAccessible(true);
+		releaseMapField.set(frManagerMock, new HashMap<>());
+		for (FileRelease fr : createFileReleaseMockList()) {
+			frManagerMock.addFileRelease(fr);
+		}
+
+		releaseMapField.setAccessible(false);
+		return frManagerMock;
+	}
+
+	public static FileConvertJobManager createFileConvertJobManagerMock() {
+		return Mockito.mock(FileConvertJobManager.class);
+	}
+
+	public static ConnectorService createConnectorServiceMock() throws Exception {
+		ConnectorService mockedConnectorService = Mockito.mock(ConnectorService.class);
+		ApplicationContext mockedContext = createContextMock();
+		List<ApplicationContext> contextList = new ArrayList<>();
+		contextList.add(mockedContext);
+		when(mockedConnectorService.getContexts()).thenReturn(contextList);
+		when(mockedConnectorService.getContextByName("MDMENV")).thenReturn(contextList.get(0));
+		return mockedConnectorService;
+	}
+
+	public static ApplicationContext createContextMock() throws Exception {
+		EntityManager em = Mockito.mock(EntityManager.class);
+
+		Environment mockedEnv = createEntityMock(Environment.class, "MDMENV", "MDMENV", "1");
+		when(em.loadEnvironment()).thenReturn(mockedEnv);
+
+		User mockedUser = createEntityMock(User.class, TEST_USERNAME_SELF, "MDMENV", "1");
+		when(em.loadLoggedOnUser()).thenReturn(Optional.of(mockedUser));
+
+		Test mockedTest = createEntityMock(Test.class, "Test", "MDMENV", "1");
+		mockedTest.setResponsiblePerson(mockedUser);
+		when(em.loadParent(any(TestStep.class), eq(TestStep.PARENT_TYPE_TEST))).thenReturn(Optional.of(mockedTest));
+
+		TestStep mockedTestStep1 = createEntityMock(TestStep.class, "Teststep", "MDMENV", "123");
+		when(em.load(TestStep.class, "123")).thenReturn(mockedTestStep1);
+
+		TestStep mockedTestStep2 = createEntityMock(TestStep.class, "Teststep", "MDMENV", "1234");
+		when(em.load(TestStep.class, "1234")).thenReturn(mockedTestStep2);
+
+		ApplicationContext context = Mockito.mock(ApplicationContext.class);
+		when(context.getEntityManager()).thenReturn(Optional.of(em));
+		return context;
+	}
+
+	private static List<FileRelease> createFileReleaseMockList() {
+		List<FileRelease> fileReleasMockList = new ArrayList<>();
+
+		for (int i = 0; i < NUM_FILE_REL_IN; i++) {
+			FileRelease fileRelease = new FileRelease();
+			fileRelease.receiver = TEST_USERNAME_SELF;
+			fileRelease.sourceName = "MDMENV";
+			fileRelease.typeName = "TestStep";
+			fileRelease.id = String.valueOf(i);
+			fileRelease.sender = TEST_USERNAME_OTHER;
+			fileRelease.identifier = ID_IN_PREFIX + i;
+			fileRelease.state = FileReleaseManager.FILE_RELEASE_STATE_ORDERED;
+			fileReleasMockList.add(fileRelease);
+		}
+
+		for (int i = 0; i < NUM_FILE_REL_OUT; i++) {
+			FileRelease fileRelease = new FileRelease();
+			fileRelease.sourceName = "MDMENV";
+			fileRelease.typeName = "TestStep";
+			fileRelease.id = String.valueOf(i + NUM_FILE_REL_IN);
+			fileRelease.receiver = TEST_USERNAME_OTHER;
+			fileRelease.identifier = ID_OUT_PREFIX + i;
+			fileRelease.sender = TEST_USERNAME_SELF;
+			fileRelease.state = FileReleaseManager.FILE_RELEASE_STATE_ORDERED;
+			fileReleasMockList.add(fileRelease);
+		}
+		return fileReleasMockList;
+
+	}
+
+	private static <T extends Entity> T createEntityMock(Class<T> type, String name, String sourceName, String id)
+			throws Exception {
+
+		HashMap<String, Value> map = new HashMap<String, Value>();
+		map.put("Name", ValueType.STRING.create("Name", name));
+
+		Core core = Mockito.mock(Core.class);
+		when(core.getSourceName()).thenReturn(sourceName);
+		when(core.getValues()).thenReturn(map);
+		when(core.getID()).thenReturn(id);
+		when(core.getValues()).thenReturn(map);
+
+		EntityStore entityStore = new EntityStore();
+		when(core.getMutableStore()).thenReturn(entityStore);
+
+		Constructor<T> constructor = type.getDeclaredConstructor(Core.class);
+		constructor.setAccessible(true);
+		T instance = constructor.newInstance(core);
+		constructor.setAccessible(false);
+		return instance;
+	}
+}
diff --git a/org.eclipse.mdm.filerelease/src/test/java/org/eclipse/mdm/filerelease/FileReleaseServiceTest.java b/org.eclipse.mdm.filerelease/src/test/java/org/eclipse/mdm/filerelease/FileReleaseServiceTest.java
new file mode 100644
index 0000000..a97a72f
--- /dev/null
+++ b/org.eclipse.mdm.filerelease/src/test/java/org/eclipse/mdm/filerelease/FileReleaseServiceTest.java
@@ -0,0 +1,188 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.filerelease;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.lang.reflect.Field;
+import java.util.List;
+
+import org.eclipse.mdm.filerelease.boundary.FileReleaseService;
+import org.eclipse.mdm.filerelease.control.FileReleaseException;
+import org.eclipse.mdm.filerelease.control.FileReleaseManager;
+import org.eclipse.mdm.filerelease.entity.FileRelease;
+import org.junit.Test;
+
+public class FileReleaseServiceTest {
+
+	@Test
+	public void testGetReleases() throws Exception {
+		FileReleaseService fileReleaseService = createMockedService();
+		List<FileRelease> fileReleases = fileReleaseService.getReleases(FileReleaseManager.FILE_RELEASE_STATE_ORDERED);
+		assertNotNull("The fileReleases list should not be null.", fileReleases);
+		int expectedSize = FileReleaseServiceMockHelper.NUM_FILE_REL_IN + FileReleaseServiceMockHelper.NUM_FILE_REL_OUT;
+		assertEquals("The size of the fileRelease list should be " + expectedSize, expectedSize, fileReleases.size());
+		fileReleases = fileReleaseService.getReleases("some unknown state");
+		assertEquals("The size of the fileRelease list should be " + 0, 0, fileReleases.size());
+
+	}
+
+	@Test
+	public void testGetRelease() throws Exception {
+		FileReleaseService fileReleaseService = createMockedService();
+		FileRelease fileRelease = fileReleaseService.getRelease(FileReleaseServiceMockHelper.ID_IN_PREFIX + "1");
+		assertNotNull("The file release shoult not be null", fileRelease);
+	}
+
+	@Test
+	public void testGetIncommingReleases() throws Exception {
+		FileReleaseService fileReleaseService = createMockedService();
+		List<FileRelease> fileReleasesIn = fileReleaseService
+				.getIncommingReleases(FileReleaseManager.FILE_RELEASE_STATE_ORDERED);
+		assertNotNull("The fileReleases list should not be null.", fileReleasesIn);
+		assertEquals("The size of the fileRelease list should be " + FileReleaseServiceMockHelper.NUM_FILE_REL_IN,
+				FileReleaseServiceMockHelper.NUM_FILE_REL_IN, fileReleasesIn.size());
+	}
+
+	@Test
+	public void testGetOutgoingReleases() throws Exception {
+		FileReleaseService fileReleaseService = createMockedService();
+		List<FileRelease> fileReleasesOut = fileReleaseService
+				.getOutgoingReleases(FileReleaseManager.FILE_RELEASE_STATE_ORDERED);
+		assertNotNull("The fileReleases list should not be null.", fileReleasesOut);
+		assertEquals("The size of the fileRelease list should be " + FileReleaseServiceMockHelper.NUM_FILE_REL_OUT,
+				FileReleaseServiceMockHelper.NUM_FILE_REL_OUT, fileReleasesOut.size());
+	}
+
+	@Test
+	public void testCreate() throws Exception {
+		FileReleaseService fileReleaseService = createMockedService();
+
+		FileRelease request1 = new FileRelease();
+		request1.sourceName = "MDMENV";
+		request1.typeName = "TestStep";
+		request1.id = "123";
+		request1.format = FileReleaseManager.CONVERTER_FORMAT_PAK2RAW;
+		request1.orderMessage = "new file release";
+		request1.validity = 10;
+		List<FileRelease> fileReleases = fileReleaseService.getReleases(null);
+		fileReleaseService.create(request1);
+
+		FileRelease request2 = new FileRelease();
+		request2.sourceName = "MDMENV";
+		request2.typeName = "TestStep";
+		request2.id = "1234";
+		request2.format = FileReleaseManager.CONVERTER_FORMAT_PAK2ATFX;
+		request2.orderMessage = "new file release";
+		request2.validity = 10;
+		fileReleaseService.create(request2);
+		fileReleases = fileReleaseService.getReleases(null);
+		assertNotNull("The fileReleases list should not be null.", fileReleases);
+		int expectedSize = FileReleaseServiceMockHelper.NUM_FILE_REL_IN + FileReleaseServiceMockHelper.NUM_FILE_REL_OUT
+				+ 2;
+		assertEquals("The size of the fileRelease list should be " + expectedSize, expectedSize, fileReleases.size());
+	}
+
+	@Test(expected = FileReleaseException.class)
+	public void testCreateWithInvalidFileRelease() throws Exception {
+		FileReleaseService fileReleaseService = createMockedService();
+		FileRelease request = new FileRelease();
+		request.sourceName = "MDMENV";
+		request.typeName = "TestStep";
+		request.id = "123";
+		request.format = FileReleaseManager.CONVERTER_FORMAT_PAK2RAW;
+		request.orderMessage = "new file release";
+		request.validity = 0;
+		fileReleaseService.create(request);
+	}
+
+	@Test(expected = FileReleaseException.class)
+	public void testCreateWithUnsuppotedType() throws Exception {
+		FileReleaseService fileReleaseService = createMockedService();
+		FileRelease request = new FileRelease();
+		request.sourceName = "MDMENV";
+		request.typeName = "TestStep";
+		request.id = "123";
+		request.format = "Some unsupported type";
+		request.orderMessage = "new file release";
+		request.validity = 0;
+		fileReleaseService.create(request);
+	}
+
+	@Test
+	public void testDelete() throws Exception {
+		FileReleaseService fileReleaseService = createMockedService();
+		fileReleaseService.delete(FileReleaseServiceMockHelper.ID_OUT_PREFIX + "1");
+		List<FileRelease> fileReleases = fileReleaseService.getReleases(FileReleaseManager.FILE_RELEASE_STATE_ORDERED);
+		assertNotNull("The fileReleases list should not be null.", fileReleases);
+		int expectedSize = FileReleaseServiceMockHelper.NUM_FILE_REL_IN + FileReleaseServiceMockHelper.NUM_FILE_REL_OUT
+				- 1;
+		assertEquals("The size of the fileRelease list should be " + expectedSize, expectedSize, fileReleases.size());
+	}
+
+	@Test
+	public void testApprove() throws Exception {
+		FileReleaseService fileReleaseService = createMockedService();
+		FileRelease release2Approve = new FileRelease();
+		release2Approve.identifier = FileReleaseServiceMockHelper.ID_IN_PREFIX + "1";
+		release2Approve.state = FileReleaseManager.FILE_RELEASE_STATE_APPROVED;
+		fileReleaseService.approve(release2Approve);
+	}
+
+	@Test
+	public void testReject() throws Exception {
+		FileReleaseService fileReleaseService = createMockedService();
+
+		FileRelease release2Reject = new FileRelease();
+		release2Reject.identifier = FileReleaseServiceMockHelper.ID_IN_PREFIX + "1";
+		release2Reject.state = FileReleaseManager.FILE_RELEASE_STATE_REJECTED;
+		release2Reject.rejectMessage = "reject message";
+
+		fileReleaseService.reject(release2Reject);
+
+		FileRelease fileRelease = fileReleaseService.getRelease(FileReleaseServiceMockHelper.ID_IN_PREFIX + "1");
+
+		assertNotNull("FileRelease should not be null.", fileRelease);
+		assertEquals("FileRelease state should be " + FileReleaseManager.FILE_RELEASE_STATE_REJECTED, fileRelease.state,
+				FileReleaseManager.FILE_RELEASE_STATE_REJECTED);
+	}
+
+	private FileReleaseService createMockedService() throws Exception {
+		FileReleaseService fileReleaseService = new FileReleaseService();
+
+		Field fileReleaseManagerField = fileReleaseService.getClass().getDeclaredField("manager");
+		fileReleaseManagerField.setAccessible(true);
+		fileReleaseManagerField.set(fileReleaseService, FileReleaseServiceMockHelper.createFileReleaseManagerMock());
+		fileReleaseManagerField.setAccessible(false);
+
+		Field connectorServiceField = fileReleaseService.getClass().getDeclaredField("connectorService");
+		connectorServiceField.setAccessible(true);
+		connectorServiceField.set(fileReleaseService, FileReleaseServiceMockHelper.createConnectorServiceMock());
+		connectorServiceField.setAccessible(false);
+
+		Field converterField = fileReleaseService.getClass().getDeclaredField("converter");
+		converterField.setAccessible(true);
+		converterField.set(fileReleaseService, FileReleaseServiceMockHelper.createFileConvertJobManagerMock());
+		converterField.setAccessible(false);
+
+		Field targetDirectoryPathField = fileReleaseService.getClass().getDeclaredField("targetDirectoryPath");
+		targetDirectoryPathField.setAccessible(true);
+		targetDirectoryPathField.set(fileReleaseService, System.getProperty("java.io.tmpdir"));
+		targetDirectoryPathField.setAccessible(false);
+
+		return fileReleaseService;
+	}
+}
diff --git a/org.eclipse.mdm.freetextindexer/.gitignore b/org.eclipse.mdm.freetextindexer/.gitignore
new file mode 100644
index 0000000..b67ba80
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/.gitignore
@@ -0,0 +1,9 @@
+/build/
+.classpath
+.project
+/bin/
+/.gradle/
+
+/..gitignore.un~
+/.gitignore~
+/.gradle/
diff --git a/org.eclipse.mdm.freetextindexer/WebContent/META-INF/MANIFEST.MF b/org.eclipse.mdm.freetextindexer/WebContent/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5e94951
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/WebContent/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path: 
+
diff --git a/org.eclipse.mdm.freetextindexer/build.gradle b/org.eclipse.mdm.freetextindexer/build.gradle
new file mode 100644
index 0000000..cdbeefb
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/build.gradle
@@ -0,0 +1,50 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+ 
+
+description = 'MDM FreeText Search Indexer'
+
+apply plugin: 'war'
+apply plugin: 'maven'
+apply plugin: 'eclipse'
+
+repositories {
+	jcenter()
+	mavenLocal()
+}
+
+dependencies {
+	compile 'commons-httpclient:commons-httpclient:3.1'
+	compile 'org.slf4j:jcl-over-slf4j:1.7.25'
+
+	compileOnly 'com.fasterxml.jackson.core:jackson-databind:2.5.1'
+
+	compile "org.eclipse.mdm:org.eclipse.mdm.api.default:${version}"
+	compile project(':org.eclipse.mdm.connector')
+	compile project(':org.eclipse.mdm.property')
+
+	compileOnly 'javax:javaee-api:7.0'
+
+	testCompile 'junit:junit:4.12'
+	testCompile project(':org.eclipse.mdm.api.atfxadapter')
+	testCompile "org.testcontainers:elasticsearch:1.12.5"
+	testCompile "org.elasticsearch.client:elasticsearch-rest-client:7.5.2"
+	testCompile "org.elasticsearch.client:elasticsearch-rest-high-level-client:7.5.2"
+	testRuntimeClasspath 'com.fasterxml.jackson.core:jackson-databind:2.6.6'
+}
+
+jar {
+	metaInf { from '../NOTICE.txt' }
+	metaInf { from '../LICENSE.txt' }
+}
diff --git a/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/boundary/ElasticsearchBoundary.java b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/boundary/ElasticsearchBoundary.java
new file mode 100644
index 0000000..eb789e0
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/boundary/ElasticsearchBoundary.java
@@ -0,0 +1,225 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.freetextindexer.boundary;
+
+import java.io.IOException;
+import java.net.URI;
+import java.text.SimpleDateFormat;
+
+import javax.annotation.PostConstruct;
+import javax.ejb.Stateless;
+import javax.ejb.TransactionAttribute;
+import javax.ejb.TransactionAttributeType;
+import javax.inject.Inject;
+
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpMethod;
+import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;
+import org.apache.commons.httpclient.methods.DeleteMethod;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.methods.PutMethod;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.freetextindexer.entities.MDMEntityResponse;
+import org.eclipse.mdm.property.GlobalProperty;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+/**
+ * This Boundary is back-end only to the ElasticSearch Server. It is responsible
+ * for the actual indexing work.
+ * 
+ * @author CWE
+ *
+ */
+@TransactionAttribute(value = TransactionAttributeType.NOT_SUPPORTED)
+@Stateless
+public class ElasticsearchBoundary {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(ElasticsearchBoundary.class);
+
+	private ObjectMapper jsonMapper;
+	private HttpClient client;
+	private URI esUri;
+
+	@Inject
+	@GlobalProperty(value = "elasticsearch.url")
+	String esAddress;
+
+	@Inject
+	@GlobalProperty(value = "freetext.active")
+	String active;
+
+	/**
+	 * Connects to the ElasticSearch Server
+	 * 
+	 * @throws IOException
+	 */
+	public ElasticsearchBoundary() {
+		jsonMapper = new ObjectMapper();
+		jsonMapper.setDateFormat(new SimpleDateFormat("yyyyMMdd'T'HHmmssZ"));
+		client = new HttpClient();
+	}
+
+	@PostConstruct
+	public void init() {
+		try {
+			esUri = URI.create(esAddress + "/");
+		} catch (IllegalArgumentException e) {
+			throw new IllegalArgumentException(
+					"Value '" + esAddress + "' for parameter 'elasticsearch.url' is invalid!", e);
+		}
+	}
+
+	public void index(MDMEntityResponse document) {
+		try {
+			PutMethod put = new PutMethod(getPath(document));
+
+			byte[] json = jsonMapper.writeValueAsBytes(document);
+			LOGGER.trace("Document {}: {}", put.getPath(), new String(json));
+
+			put.setRequestEntity(new ByteArrayRequestEntity(json, "application/json"));
+
+			execute(put);
+
+		} catch (IOException e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	/**
+	 * @param document
+	 * @return the path of the {@link Entity} within elasticsearch
+	 */
+	private String getPath(MDMEntityResponse document) {
+		return getPath(document.source, document.type, document.id);
+	}
+
+	/**
+	 *
+	 * @param source Datasource of the {@link Entity}
+	 * @param type   Type of the {@link Entity}
+	 * @param id     Instance id of the {@link Entity}
+	 * @return the path of the {@link Entity} within elasticsearch
+	 */
+	private String getPath(String source, String type, String id) {
+		return esUri.resolve(source.toLowerCase() + "/_doc/" + getEsCompositeId(type, id)).toString();
+	}
+
+	/**
+	 *
+	 * @param type Type of the {@link Entity}
+	 * @param id   Instance id of the {@link Entity}
+	 * @return the composite id of the {@link Entity} within elasticsearch
+	 */
+	private String getEsCompositeId(String type, String id) {
+		return type + "-" + id;
+	}
+
+	private void execute(HttpMethod put) {
+		try {
+			int status = client.executeMethod(put);
+
+			checkError(status, put);
+		} catch (IOException e) {
+			throw new IllegalStateException("Problems querying ElasticSearch.", e);
+		}
+	}
+
+	private void checkError(int status, HttpMethod method) {
+		String text = String.format("ElasticSearch answered %d. ", status);
+
+		int httpCategory = status / 100;
+		switch (httpCategory) {
+		case 4:
+			text = text + "This indicates a Client error: ";
+			break;
+		case 5:
+			text = text + "This indicates a Server error. The ES instance must be checked (" + esUri.toString() + "): ";
+			break;
+		}
+
+		try {
+			if (httpCategory != 2) {
+				throw new IllegalStateException(text + method.getResponseBodyAsString());
+			}
+		} catch (IOException e) {
+			throw new IllegalStateException(text + "\nError occured during reading the elastic search response!", e);
+		}
+	}
+
+	public void delete(String api, String type, String id) {
+		String path = getPath(api.toLowerCase(), type, id);
+		DeleteMethod put = new DeleteMethod(esUri.resolve(path).toString());
+
+		execute(put);
+
+		if (LOGGER.isDebugEnabled()) {
+			LOGGER.debug("Document '{}' has been deleted!", path);
+		}
+	}
+
+	public boolean hasIndex(String source) {
+		boolean hasIndex = false;
+
+		if (active()) {
+			try {
+				GetMethod get = new GetMethod(esUri.resolve(source.toLowerCase()).toString());
+				int status = client.executeMethod(get);
+				LOGGER.info("Checking index {}: {}", source, status);
+
+				hasIndex = status / 100 == 2;
+			} catch (IOException e) {
+				LOGGER.warn("Querying ElasticSearch for the Index failed... Assuming no index is there!", e);
+				hasIndex = false;
+			}
+		}
+
+		return hasIndex;
+	}
+
+	public void createIndex(String source) {
+		if (Boolean.valueOf(active)) {
+			execute(new PutMethod(esUri.resolve("/" + source.toLowerCase()).toString()));
+			LOGGER.info("New Index created!");
+		}
+	}
+
+	public void validateConnectionIsPossible() {
+		if (active()) {
+			try {
+				GetMethod get = new GetMethod(esUri.toString());
+				int status = client.executeMethod(get);
+				if (status / 100 != 2) {
+					LOGGER.error(
+							"Cannot connect to elasticsearch at {} but free text search is enabled! http status was: {}",
+							esUri, status);
+					throw new RuntimeException("Cannot connect to elasticsearch.");
+				} else {
+					LOGGER.info("Successfully connected to elasticsearch!");
+				}
+
+			} catch (IOException e) {
+				LOGGER.error("Cannot connect to elasticsearch at {} but free text search is enabled!", esUri, e);
+				throw new RuntimeException("Cannot connect to elasticsearch.", e);
+			}
+		}
+	}
+
+	public boolean active() {
+		return Boolean.valueOf(active);
+	}
+}
diff --git a/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/boundary/MdmApiBoundary.java b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/boundary/MdmApiBoundary.java
new file mode 100644
index 0000000..01395ce
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/boundary/MdmApiBoundary.java
@@ -0,0 +1,330 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.freetextindexer.boundary;
+
+import java.security.Principal;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.annotation.Resource;
+import javax.ejb.EJB;
+import javax.ejb.Schedule;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import javax.ejb.TransactionAttribute;
+import javax.ejb.TransactionAttributeType;
+import javax.enterprise.concurrent.ManagedScheduledExecutorService;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.ConnectionException;
+import org.eclipse.mdm.api.base.ServiceNotProvidedException;
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.User;
+import org.eclipse.mdm.api.base.notification.NotificationException;
+import org.eclipse.mdm.api.base.notification.NotificationFilter;
+import org.eclipse.mdm.api.base.notification.NotificationListener;
+import org.eclipse.mdm.api.base.notification.NotificationService;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.eclipse.mdm.connector.boundary.ConnectorService;
+import org.eclipse.mdm.freetextindexer.control.DatabaseLockHandler;
+import org.eclipse.mdm.freetextindexer.control.LockListener;
+import org.eclipse.mdm.freetextindexer.control.UpdateIndex;
+import org.eclipse.mdm.freetextindexer.entities.MDMEntityResponse;
+import org.eclipse.mdm.property.GlobalProperty;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This boundary is a back-end Boundary to the openMDM Api. It uses the Seach
+ * Server to build up MDDocuments.
+ *
+ * @author CWE
+ *
+ */
+@TransactionAttribute(value = TransactionAttributeType.NOT_SUPPORTED)
+@Startup
+@Singleton
+public class MdmApiBoundary {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(MdmApiBoundary.class);
+
+	private static final String FREETEXT_NOTIFICATION_NAME = "freetext.notificationName";
+	private static final String FREETEXT_SESSION_CHECK_INTERVAL = "freetext.sessionCheckInterval";
+
+	public class FreeTextNotificationListener implements NotificationListener {
+
+		private EntityManager entityManager;
+
+		public FreeTextNotificationListener(EntityManager entityManager) {
+			this.entityManager = entityManager;
+		}
+
+		@Override
+		public void instanceCreated(List<? extends Entity> entities, User arg1) {
+			LOGGER.debug("{} entities created: {}", entities.size(), entities);
+			entities.forEach(e -> update.change(MDMEntityResponse.build(e.getClass(), e, entityManager)));
+		}
+
+		@Override
+		public void instanceDeleted(EntityType entityType, List<String> ids, User user) {
+			LOGGER.debug("{} entities deleted: {}", ids.size(), ids);
+			ids.forEach(id -> update.delete(getApiName(entityManager), workaroundForTypeMapping(entityType), id));
+		}
+
+		@Override
+		public void instanceModified(List<? extends Entity> entities, User arg1) {
+			LOGGER.debug("{} entities modified: {}", entities.size(), entities);
+			entities.forEach(e -> update.change(MDMEntityResponse.build(e.getClass(), e, entityManager)));
+		}
+
+		@Override
+		public void modelModified(EntityType arg0, User arg1) {
+			// not needed
+		}
+
+		@Override
+		public void securityModified(EntityType entityType, List<String> ids, User user) {
+			// not needed
+		}
+	}
+
+	@Inject
+	UpdateIndex update;
+
+	@Resource
+	ManagedScheduledExecutorService scheduler;
+
+	@Inject
+	@GlobalProperty(value = "freetext.active")
+	private String active = "false";
+
+	ConnectorService connectorService;
+
+	@Inject
+	@GlobalProperty
+	private Map<String, String> globalProperties = Collections.emptyMap();
+
+	private ScheduledFuture<?> scheduledFuture;
+
+	@EJB
+	DatabaseLockHandler databaseLockHandler;
+
+	@PostConstruct
+	public void initalize() {
+		if (!isActive()) {
+			return;
+		}
+
+		databaseLockHandler.init("free-text-indexer", new LockListener() {
+
+			@Override
+			public void onLockAcquired() {
+				LOGGER.info("Acquired database lock, starting fretextindexer.");
+
+				Principal principal = new Principal() {
+
+					@Override
+					public String getName() {
+						return null;
+					}
+				};
+
+				connectorService = new ConnectorService(principal, globalProperties);
+				connectorService.connect();
+				connectorService.getContexts().forEach(MdmApiBoundary.this::initializeContext);
+
+				long intervalSeconds = 60L;
+				try {
+					Long.parseLong(globalProperties.getOrDefault(FREETEXT_SESSION_CHECK_INTERVAL,
+							"60"));
+				} catch (NumberFormatException e) {
+					LOGGER.warn("Could not parse value for parameter '" +
+							FREETEXT_SESSION_CHECK_INTERVAL + "'. Using default value '60'.");
+				}
+
+				scheduledFuture = MdmApiBoundary.this.scheduler.scheduleAtFixedRate(
+						MdmApiBoundary.this::sessionCheck, intervalSeconds, intervalSeconds,
+						TimeUnit.SECONDS);
+
+				LOGGER.info("Initialized session tick timer with interval {}s.",
+						intervalSeconds);
+			}
+
+			@Override
+			public void onLockLost() {
+				deregister();
+			}
+		});
+		databaseLockHandler.requestLock();
+	}
+
+	/**
+	 * Tries in intervals of one minute to acquire the database lock. If the lock
+	 * could be acquired, the onLockAcquired method on the registered listener is
+	 * invoked.
+	 */
+	@Schedule(hour = "*", minute = "*/1", persistent = false)
+	public void checkLock() {
+		databaseLockHandler.requestLock();
+	}
+
+	private void initializeContext(ApplicationContext context) {
+
+		String source = getName(context);
+
+		try {
+			EntityManager entityManager = context.getEntityManager()
+					.orElseThrow(() -> new ServiceNotProvidedException(EntityManager.class));
+
+			NotificationService manager = context.getNotificationService()
+					.orElseThrow(() -> new ConnectionException("Context has no NotificationManager!"));
+
+			String notificationName = context.getParameters().getOrDefault(FREETEXT_NOTIFICATION_NAME, "mdm5");
+			LOGGER.debug("Registering with name '{}' at source '{}'", notificationName, source);
+
+			manager.register(notificationName, new NotificationFilter(),
+					new FreeTextNotificationListener(entityManager));
+			LOGGER.info("Successfully registered for new notifications with name '{}' at source '{}!", notificationName,
+					source);
+		} catch (ConnectionException | NotificationException e) {
+			throw new IllegalArgumentException(
+					"The ODS Server and/or the Notification Service cannot be accessed for source '" + source + "'!",
+					e);
+		}
+	}
+
+	public void sessionCheck() {
+		LOGGER.debug("Session check on {} context(s).", connectorService.getContexts().size());
+
+		for (ApplicationContext context : connectorService.getContexts()) {
+			try {
+				Optional<EntityManager> em = context.getEntityManager();
+				if (em.isPresent()) {
+					em.get().loadLoggedOnUser();
+				}
+			} catch (Exception e) {
+				LOGGER.warn("ApplicationContext seems to be closed. Trying to reconnect.");
+
+				try {
+					Optional<ApplicationContext> c = connectorService.reconnect(context);
+					initializeContext(c.get());
+					LOGGER.info("Freetextindexer ApplicationContext reconnected.");
+				} catch (Exception ex) {
+					LOGGER.info("Could not reconnect Freetextindexer ApplicationContext!", ex);
+				}
+			}
+		}
+	}
+
+	@PreDestroy
+	public void deregister() {
+		if (isActive()) {
+			scheduledFuture.cancel(true);
+
+			for (ApplicationContext context : getContexts().values()) {
+				try {
+					context.getNotificationService()
+							.orElseThrow(() -> new ConnectionException("Context has no NotificationManager!"))
+							.close(false);
+
+				} catch (ConnectionException | NotificationException e) {
+					throw new IllegalStateException(
+							"The NotificationManager could not be deregistered. In rare cases, this leads to a missed notification. This means the index might not be up-to-date.");
+				}
+			}
+
+			connectorService.disconnect();
+		}
+		if (databaseLockHandler.hasDatabaseLock()) {
+			databaseLockHandler.releaseDatabaseLock();
+		}
+	}
+
+	public void doForAllEntities(Class<? extends Entity> entityClass, ApplicationContext context,
+			Consumer<? super MDMEntityResponse> executor) {
+		if (isActive()) {
+			try {
+				EntityManager entityManager = context.getEntityManager()
+						.orElseThrow(() -> new ServiceNotProvidedException(EntityManager.class));
+
+				entityManager.loadAll(entityClass).stream().map(e -> this.buildEntity(e, entityManager))
+						.forEach(executor);
+
+			} catch (DataAccessException e) {
+				throw new IllegalStateException("MDM cannot be querried for new elements. Please check the MDM runtime",
+						e);
+			}
+		}
+	}
+
+	public Map<String, ApplicationContext> getContexts() {
+		if (connectorService == null) {
+			return Collections.emptyMap();
+		}
+		return connectorService.getContexts().stream().collect(Collectors.toMap(this::getName, Function.identity()));
+	}
+
+	public String getName(ApplicationContext context) {
+		return context.getEntityManager().map(this::getApiName)
+				.orElseThrow(() -> new ServiceNotProvidedException(EntityManager.class));
+	}
+
+	private String getApiName(EntityManager entityManager) {
+		return entityManager.loadEnvironment().getSourceName();
+	}
+
+	private boolean isActive() {
+		return Boolean.parseBoolean(active);
+	}
+
+	private MDMEntityResponse buildEntity(Entity e, EntityManager entityManager) {
+		return MDMEntityResponse.build(e.getClass(), e, entityManager);
+	}
+
+	/**
+	 * Simple workaround for naming mismatch between Adapter and Business object
+	 * names.
+	 *
+	 * @param entityType entity type
+	 * @return MDM business object name
+	 */
+	private static String workaroundForTypeMapping(EntityType entityType) {
+		switch (entityType.getName()) {
+		case "StructureLevel":
+			return "Pool";
+		case "MeaResult":
+			return "Measurement";
+		case "SubMatrix":
+			return "ChannelGroup";
+		case "MeaQuantity":
+			return "Channel";
+		default:
+			return entityType.getName();
+		}
+	}
+
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/boundary/package-info.java b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/boundary/package-info.java
new file mode 100644
index 0000000..8c481ea
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/boundary/package-info.java
@@ -0,0 +1,31 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+/**
+ * This package contains all communication to external systems. Those systems
+ * are:
+ * <ul>
+ * <li>ElasticSearch for Indexing via REST
+ * {@link org.eclipse.mdm.freetextindexer.boundary.ElasticsearchBoundary
+ * ElasticsearchBoundary}</li>
+ * <li>MDM for querying the dataitems and getting notifications
+ * {@link org.eclipse.mdm.freetextindexer.boundary.MdmApiBoundary
+ * MDMBoundary}</li>
+ * <li>JEE Container for creating the initial index
+ * {@link org.eclipse.mdm.freetextindexer.boundary.StartupBoundary
+ * StartupBoundary}</li>
+ * </ul>
+ * 
+ */
+package org.eclipse.mdm.freetextindexer.boundary;
diff --git a/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/control/DatabaseLockHandler.java b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/control/DatabaseLockHandler.java
new file mode 100644
index 0000000..82413bd
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/control/DatabaseLockHandler.java
@@ -0,0 +1,291 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.freetextindexer.control;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.List;
+import java.util.UUID;
+
+import javax.ejb.Stateful;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+import org.eclipse.mdm.freetextindexer.entities.SystemProcess;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <p>
+ * Connection handler class which manages a connection from the JDBC pool of the
+ * application server. Additional it locks a database table entry on the
+ * 'system_process' table.
+ * </p>
+ * <p>
+ * If the database table 'system_process' does not exist it will automatically
+ * create it.
+ * </p>
+ * <p>
+ * If the locking entry does not exist within the table it will automatically
+ * create it.
+ * </p>
+ *
+ * @author Juergen Kleck, Peak Solution GmbH
+ */
+@Stateful
+public class DatabaseLockHandler {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(DatabaseLockHandler.class);
+
+	// Health check timeout of 3 minutes after which the process can takeover
+	private static final int HEALTH_CHECK_TIMEOUT = 180000;
+
+	private boolean lockAcquired = false;
+	private boolean initialized = false;
+	private String lockingEntry;
+	private String processId;
+	private LockListener listener;
+
+	@PersistenceContext(unitName = "openMDM")
+	private EntityManager em;
+
+	/**
+	 * Define the locking entry and the process id
+	 *
+	 * @param lockingEntry The key of the system_process table which should be
+	 *                     locked
+	 */
+	public void init(String lockingEntry, LockListener listener) {
+		try {
+			this.processId = InetAddress.getLocalHost().getHostName() + "_" + UUID.randomUUID().toString();
+		} catch (UnknownHostException e) {
+			this.processId = UUID.randomUUID().toString();
+		}
+
+		this.lockingEntry = lockingEntry;
+		this.listener = listener;
+		this.initialized = false;
+	}
+
+	public void requestLock() {
+		// check if we have the lock, otherwise try to get it
+		if (!hasDatabaseLock()) {
+			acquireDatabaseLock();
+		}
+		if (hasDatabaseLock() && doHealthCheck()) {
+		} else {
+			LOGGER.debug("No database lock could be acquired for this process.");
+		}
+	}
+
+	/**
+	 * Instantiate the database setup
+	 */
+	public void setupDB() {
+		if (!this.initialized) {
+			boolean success = true;
+
+			// check if the process key exists or create it
+			String query = "SELECT sp FROM SystemProcess sp WHERE sp.processKey = '" + lockingEntry + "'";
+			List<SystemProcess> processes = em.createQuery(query, SystemProcess.class).getResultList();
+			if (processes.isEmpty()) {
+				success = insertTableRow();
+			}
+			this.initialized = success;
+			if (success) {
+				LOGGER.debug("Started database lock handler with process id '{}'", processId);
+			}
+		}
+	}
+
+	/**
+	 * This method updates the last connection time of the system process as
+	 * database locks are only active for the transaction lifecycle which end when
+	 * leaving the method
+	 *
+	 * @return true if the database lock is still active
+	 */
+	public boolean doHealthCheck() {
+		try {
+			LOGGER.debug("Health check for lock handler with process id {}", processId);
+			SystemProcess entity = em
+					.createQuery("SELECT sp FROM SystemProcess sp WHERE sp.processKey = '" + lockingEntry + "'",
+							SystemProcess.class)
+					.getSingleResult();
+			em.refresh(entity);
+
+			if (this.processId.equals(entity.getProcessId())) {
+				if (!em.isJoinedToTransaction()) {
+					em.joinTransaction();
+				}
+				entity.setTime(System.currentTimeMillis());
+				em.merge(entity);
+				em.flush();
+				LOGGER.trace("Renewed lock for process id {}", processId);
+			} else if (hasDatabaseLock()) {
+				// process id in database has changed, but we still think we have the lock ->
+				// release lock
+				LOGGER.trace("Another process id '{}' has acquired the lock. Health check failed for process id '{}'",
+						entity.getProcessId(), processId);
+				setLockAcquired(false);
+			}
+		} catch (Exception ignored) {
+			LOGGER.error("Exception occurred: {}", ignored);
+		}
+		return hasDatabaseLock();
+	}
+
+	/**
+	 * This method will try get a logical lock on the database table system_process.
+	 * It will check by the process id and the last locked time. The lock will
+	 * remain until the application disconnects from the database. In case of a
+	 * ungraceful disconnect the locking timeout will apply.
+	 *
+	 * @return true if the lock has been acquired
+	 */
+	public boolean acquireDatabaseLock() {
+		setupDB();
+		try {
+			LOGGER.trace(
+					"Trying to acquire the lock for '{}' for process id '{}'.", lockingEntry, processId);
+
+			SystemProcess entity = em
+					.createQuery("SELECT sp FROM SystemProcess sp WHERE sp.processKey = '" + lockingEntry + "'",
+							SystemProcess.class)
+					.getSingleResult();
+			em.refresh(entity);
+
+			// check if we can acquire this entity by:
+			// - different process id
+			// - last health check time is older than defined
+			if (!this.processId.equals(entity.getProcessId()) && System
+					.currentTimeMillis() - HEALTH_CHECK_TIMEOUT > entity.getTime()) {
+				LOGGER.trace(
+						"Another process id '{}' not renewed the lock for {} seconds. Replacing lock with own process id '{}'",
+						entity.getProcessId(), HEALTH_CHECK_TIMEOUT / 1000, processId);
+				if (!em.isJoinedToTransaction()) {
+					em.joinTransaction();
+				}
+				entity.setProcessId(this.processId);
+				em.merge(entity);
+				em.flush();
+
+				em.refresh(entity);
+				entity = em.find(SystemProcess.class, entity.getId());
+				if (this.processId.equals(entity.getProcessId())) {
+					setLockAcquired(true);
+				}
+			}
+		} catch (Exception e) {
+			LOGGER.error("Exception occurred: ", e);
+		}
+		LOGGER.trace(
+				"Acquired the lock for '{}' for process id '{}': ", lockingEntry, processId, hasDatabaseLock());
+		return hasDatabaseLock();
+	}
+
+	private void setLockAcquired(boolean acquired) {
+		if (acquired) {
+			LOGGER.debug(
+					"Successfully acquired the database lock for this process on the table 'system_process' for the process_key '{}'.",
+					lockingEntry);
+			lockAcquired = true;
+			listener.onLockAcquired();
+		} else {
+			LOGGER.debug("This process is no longer responsible for the database updates. Deactivating...");
+			lockAcquired = false;
+			listener.onLockLost();
+		}
+	}
+
+	/**
+	 * This method will release the database lock on the system_process table for
+	 * this locking entry
+	 */
+	public void releaseDatabaseLock() {
+		try {
+			SystemProcess entity = em
+					.createQuery("SELECT sp FROM SystemProcess sp WHERE sp.processKey = '" + lockingEntry + "'",
+							SystemProcess.class)
+					.getSingleResult();
+			em.refresh(entity);
+
+			// we can only release ourselves
+			if (this.processId.equals(entity.getProcessId())) {
+				if (!em.isJoinedToTransaction()) {
+					em.joinTransaction();
+				}
+				entity.setProcessId("-released-");
+				entity.setTime(0L);
+				em.merge(entity);
+				em.flush();
+				LOGGER.debug(
+						"Successfully released the database lock for this process on the table 'system_process' for the process_key '{}'.",
+						lockingEntry);
+			}
+			lockAcquired = false;
+		} catch (Exception ignored) {
+			LOGGER.error("Exception occurred: ", ignored);
+		}
+	}
+
+	/**
+	 * Check if the database lock has been applied
+	 *
+	 * @return true if the lock is applied
+	 */
+	public boolean hasDatabaseLock() {
+		return lockAcquired;
+	}
+
+	/**
+	 * Insert the value into the table if it does not exist yet.
+	 *
+	 * @return true if the initial table entry has been committed
+	 */
+	private boolean insertTableRow() {
+		try {
+			SystemProcess entity = new SystemProcess();
+			entity.setId(getHighestId() + 1L);
+			entity.setProcessKey(lockingEntry);
+			entity.setProcessId("-initialized-");
+			entity.setTime(0L);
+			em.persist(entity);
+			em.flush();
+			em.refresh(entity);
+			return true;
+		} catch (Throwable e) {
+			LOGGER.error("Failed to insert the data entry.", e);
+		}
+		return false;
+	}
+
+	/**
+	 * Get the highest id of the system process table
+	 *
+	 * @return the highest id or 0
+	 */
+	private long getHighestId() {
+		long id = 0L;
+		Query query = em.createQuery("SELECT sp FROM SystemProcess sp ORDER BY sp.id DESC", SystemProcess.class);
+		List<SystemProcess> result = query.getResultList();
+		if (!result.isEmpty()) {
+			id = result.get(0).getId();
+		}
+		return id;
+	}
+
+}
diff --git a/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/control/LockListener.java b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/control/LockListener.java
new file mode 100644
index 0000000..a4a5875
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/control/LockListener.java
@@ -0,0 +1,33 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.freetextindexer.control;
+
+/**
+ * Listener interface for receiving events on the locking state of
+ * {@link DatabaseLockHandler}.
+ *
+ */
+public interface LockListener {
+
+	/**
+	 * Invoked when a lock could be obtained.
+	 */
+	void onLockAcquired();
+
+	/**
+	 * Invoked when a lock was lost.
+	 */
+	void onLockLost();
+}
diff --git a/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/control/SetupIndex.java b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/control/SetupIndex.java
new file mode 100644
index 0000000..b77af2e
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/control/SetupIndex.java
@@ -0,0 +1,82 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.freetextindexer.control;
+
+import java.util.Map;
+
+import javax.annotation.PostConstruct;
+import javax.ejb.Asynchronous;
+import javax.ejb.EJB;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import javax.ejb.TransactionAttribute;
+import javax.ejb.TransactionAttributeType;
+import javax.enterprise.event.Event;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.model.Pool;
+import org.eclipse.mdm.api.dflt.model.Project;
+import org.eclipse.mdm.freetextindexer.boundary.ElasticsearchBoundary;
+import org.eclipse.mdm.freetextindexer.boundary.MdmApiBoundary;
+import org.eclipse.mdm.freetextindexer.events.CreateIndex;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@TransactionAttribute(value = TransactionAttributeType.NOT_SUPPORTED)
+@Startup
+@Singleton
+public class SetupIndex {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(SetupIndex.class);
+
+	@EJB
+	ElasticsearchBoundary esBoundary;
+
+	@EJB
+	MdmApiBoundary apiBoundary;
+
+	@Inject
+	Event<CreateIndex> createIndexEvent;
+
+	@PostConstruct
+	public void createIndexIfNeccessary() {
+		for (Map.Entry<String, ApplicationContext> entry : apiBoundary.getContexts().entrySet()) {
+			String source = entry.getKey();
+
+			if (!esBoundary.hasIndex(source)) {
+				LOGGER.info("Scheduling asynchronous index creation.");
+				createIndexEvent.fire(new CreateIndex(source, Project.class, Pool.class, Test.class, TestStep.class,
+						Measurement.class));
+			}
+		}
+	}
+
+	@Asynchronous
+	public void handleCreateIndexEvent(@Observes CreateIndex event) {
+		LOGGER.info("About to create new lucene index!");
+		String source = event.getSourceName();
+		esBoundary.createIndex(source);
+		for (Class<? extends Entity> entityType : event.getEntitiesToIndex()) {
+			apiBoundary.doForAllEntities(entityType, apiBoundary.getContexts().get(source), e -> esBoundary.index(e));
+		}
+		LOGGER.info("Index '" + source + "' initialized");
+	}
+}
diff --git a/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/control/UpdateIndex.java b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/control/UpdateIndex.java
new file mode 100644
index 0000000..2269fe3
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/control/UpdateIndex.java
@@ -0,0 +1,43 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.freetextindexer.control;
+
+import javax.ejb.EJB;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import javax.ejb.TransactionAttribute;
+import javax.ejb.TransactionAttributeType;
+
+import org.eclipse.mdm.freetextindexer.boundary.ElasticsearchBoundary;
+import org.eclipse.mdm.freetextindexer.entities.MDMEntityResponse;
+
+@TransactionAttribute(value = TransactionAttributeType.NOT_SUPPORTED)
+@Startup
+@Singleton
+public class UpdateIndex {
+
+	@EJB
+	ElasticsearchBoundary esBoundary;
+
+	public void change(MDMEntityResponse mdmEntityResponse) {
+		if (mdmEntityResponse != null) {
+			esBoundary.index(mdmEntityResponse);
+		}
+	}
+
+	public void delete(String apiName, String name, String id) {
+		esBoundary.delete(apiName, name, id);
+	}
+}
diff --git a/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/control/package-info.java b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/control/package-info.java
new file mode 100644
index 0000000..3bb5327
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/control/package-info.java
@@ -0,0 +1,15 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional information
+ * regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.freetextindexer.control;
diff --git a/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/entities/MDMEntity.java b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/entities/MDMEntity.java
new file mode 100644
index 0000000..1b8db53
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/entities/MDMEntity.java
@@ -0,0 +1,89 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.freetextindexer.entities;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.mdm.api.base.model.BaseEntity;
+import org.eclipse.mdm.api.base.model.Value;
+
+/**
+ * MDMEntity (Entity for a business object (contains a list of
+ * {@link MDMAttribute}s)
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+public class MDMEntity {
+
+	private static final Set<String> NOTINDEXED = new HashSet<>(
+			Arrays.asList(BaseEntity.ATTR_ID, BaseEntity.ATTR_MIMETYPE, "Optional", "SortIndex"));
+
+	/** name of the MDM business object */
+	public final String name;
+
+	/** type of the MDM business object */
+	public final String type;
+
+	/** id of the MDM business object */
+	public final String id;
+
+	/** list of attribute to transfer */
+	public final Map<String, String> attributes;
+
+	public final List<MDMEntity> components = new ArrayList<>();
+
+	/**
+	 * Constructor
+	 * 
+	 * @param name   name of the MDM business object
+	 * @param type   type as String of the MDM business object (e.g. TestStep)
+	 * @param uri    URI of an MDM business object
+	 * @param values values of a MDM business object
+	 */
+	public MDMEntity(String name, String type, String id, Map<String, Value> values) {
+		this.name = name;
+		this.type = type;
+		this.id = id;
+
+		this.attributes = initAttributes(values);
+	}
+
+	/**
+	 * converts the MDM business object values to string values
+	 * 
+	 * @param values values of a MDM business object
+	 * @return list with converted attribute values
+	 */
+	private Map<String, String> initAttributes(Map<String, Value> values) {
+		Map<String, String> mapAttrs = new HashMap<>();
+		for (java.util.Map.Entry<String, Value> entry : values.entrySet()) {
+
+			String key = entry.getKey();
+			if (!NOTINDEXED.contains(key) && entry.getValue().isValid()) {
+				mapAttrs.put(key, entry.getValue().extract().toString());
+			}
+		}
+
+		return mapAttrs;
+	}
+
+}
diff --git a/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/entities/MDMEntityResponse.java b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/entities/MDMEntityResponse.java
new file mode 100644
index 0000000..ebddc97
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/entities/MDMEntityResponse.java
@@ -0,0 +1,102 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.freetextindexer.entities;
+
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.eclipse.mdm.api.base.model.ContextComponent;
+import org.eclipse.mdm.api.base.model.ContextDescribable;
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.EntityManager;
+
+/**
+ * EntryResponse (Container for {@link MDMEntity}s)
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class MDMEntityResponse {
+
+	public String source;
+
+	public String type;
+
+	/** transferable data content */
+	public MDMEntity data;
+
+	public String id;
+
+	/**
+	 * Constructor (for a list of business objects {@link MDMEntity}s)
+	 * 
+	 * @param type    type of all containging {@link MDMEntity}s
+	 * @param entries list of {@link MDMEntity}
+	 * @throws DataAccessException
+	 */
+	public static <T extends Entity> MDMEntityResponse build(Class<? extends Entity> type, T businessObject,
+			EntityManager manager) {
+		MDMEntityResponse response = new MDMEntityResponse();
+
+		try {
+			response.type = type.getSimpleName();
+			response.source = businessObject.getSourceName();
+			response.data = toTransferable(businessObject);
+			response.id = businessObject.getID();
+
+			response.addContext(businessObject, manager);
+		} catch (DataAccessException e) {
+			response = null;
+		}
+
+		return response;
+	}
+
+	private <T extends Entity> void addContext(T businessObject, EntityManager manager) throws DataAccessException {
+		if (businessObject instanceof ContextDescribable) {
+			Map<ContextType, ContextRoot> contexts = manager.loadContexts((ContextDescribable) businessObject,
+					ContextType.UNITUNDERTEST, ContextType.TESTSEQUENCE, ContextType.TESTEQUIPMENT);
+
+			for (ContextRoot root : contexts.values()) {
+				MDMEntity entity = toTransferable(root);
+				data.components.add(entity);
+				for (ContextComponent comp : root.getContextComponents()) {
+					MDMEntity compEntity = toTransferable(comp);
+					entity.components.add(compEntity);
+					for (Entry<String, Value> entry : comp.getValues().entrySet()) {
+						Optional<Object> extractedValue = Optional.ofNullable(entry.getValue().extract());
+						compEntity.attributes.put(entry.getKey(), extractedValue.map(Object::toString).orElse(""));
+					}
+				}
+			}
+		}
+	}
+
+	private static <T extends Entity> MDMEntity toTransferable(T businessObject) {
+		return new MDMEntity(businessObject.getName(), businessObject.getClass().getSimpleName(),
+				businessObject.getID(), businessObject.getValues());
+	}
+}
diff --git a/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/entities/SystemProcess.java b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/entities/SystemProcess.java
new file mode 100644
index 0000000..aa3f5da
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/entities/SystemProcess.java
@@ -0,0 +1,72 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.freetextindexer.entities;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "system_process")
+public class SystemProcess {
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	private Long id;
+
+	@Column(name = "process_key")
+	private String processKey;
+
+	@Column(name = "process_id")
+	private String processId;
+
+	@Column(name = "last_locked")
+	private Long time;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getProcessKey() {
+		return processKey;
+	}
+
+	public void setProcessKey(String processKey) {
+		this.processKey = processKey;
+	}
+
+	public String getProcessId() {
+		return processId;
+	}
+
+	public void setProcessId(String processId) {
+		this.processId = processId;
+	}
+
+	public Long getTime() {
+		return time;
+	}
+
+	public void setTime(Long time) {
+		this.time = time;
+	}
+}
diff --git a/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/entities/package-info.java b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/entities/package-info.java
new file mode 100644
index 0000000..017b1f3
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/entities/package-info.java
@@ -0,0 +1,15 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional information
+ * regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.freetextindexer.entities;
diff --git a/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/events/CreateIndex.java b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/events/CreateIndex.java
new file mode 100644
index 0000000..1de74a1
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/src/main/java/org/eclipse/mdm/freetextindexer/events/CreateIndex.java
@@ -0,0 +1,56 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.freetextindexer.events;
+
+import java.util.Objects;
+
+import org.eclipse.mdm.api.base.model.Entity;
+
+import com.google.common.collect.ImmutableList;
+
+public class CreateIndex {
+	private final String sourceName;
+	private final ImmutableList<Class<? extends Entity>> entitiesToIndex;
+
+	@SafeVarargs
+	public CreateIndex(String sourceName, Class<? extends Entity>... entitiesToIndex) {
+		this.sourceName = Objects.requireNonNull(sourceName, "Source name may never be null!");
+		this.entitiesToIndex = ImmutableList.copyOf(entitiesToIndex);
+	}
+
+	public ImmutableList<Class<? extends Entity>> getEntitiesToIndex() {
+		return entitiesToIndex;
+	}
+
+	public String getSourceName() {
+		return sourceName;
+	}
+
+	@Override
+	public boolean equals(Object o) {
+		if (this == o)
+			return true;
+		if (o == null || getClass() != o.getClass())
+			return false;
+		CreateIndex that = (CreateIndex) o;
+		return Objects.equals(sourceName, that.sourceName) && Objects.equals(entitiesToIndex, that.entitiesToIndex);
+	}
+
+	@Override
+	public int hashCode() {
+
+		return Objects.hash(sourceName, entitiesToIndex);
+	}
+}
diff --git a/org.eclipse.mdm.freetextindexer/src/test/java/org/eclipse/mdm/freetextindexer/boundary/ElasticsearchBoundaryTest.java b/org.eclipse.mdm.freetextindexer/src/test/java/org/eclipse/mdm/freetextindexer/boundary/ElasticsearchBoundaryTest.java
new file mode 100644
index 0000000..00e2ba8
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/src/test/java/org/eclipse/mdm/freetextindexer/boundary/ElasticsearchBoundaryTest.java
@@ -0,0 +1,145 @@
+/********************************************************************************
+ * Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.freetextindexer.boundary;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.io.IOException;
+import java.util.concurrent.ExecutionException;
+
+import org.apache.http.HttpHost;
+import org.eclipse.mdm.api.atfxadapter.ATFXContextFactory;
+import org.eclipse.mdm.api.base.ConnectionException;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.freetextindexer.entities.MDMEntityResponse;
+import org.elasticsearch.action.search.SearchRequest;
+import org.elasticsearch.action.search.SearchResponse;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.RestClient;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.search.SearchHits;
+import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.testcontainers.elasticsearch.ElasticsearchContainer;
+
+import com.google.common.collect.ImmutableMap;
+
+@Ignore
+//FIXME 05.02.2020: this test needs a docker to run elasticsearch and is not suitable for continous build in Jenkins.
+//Comment this in for local tests only, if docker is available
+public class ElasticsearchBoundaryTest {
+
+	private static String atfxFilePath = "../org.eclipse.mdm.api.atfxadapter/src/test/resources/";
+	private static String atfxFile = "Right_acc.atfx";
+
+	private static ApplicationContext context;
+	private static String sourceName;
+	private static RestHighLevelClient client;
+
+	private ElasticsearchBoundary es;
+
+	@ClassRule
+	public static ElasticsearchContainer elasticSearch = new ElasticsearchContainer(
+			"docker.elastic.co/elasticsearch/elasticsearch-oss:7.0.0").withEnv("discovery.type", "single-node");
+
+	@BeforeClass
+	public static void setup() throws ConnectionException {
+		context = new ATFXContextFactory().connect(ImmutableMap.of("atfxfile", atfxFilePath + atfxFile));
+		Environment env = context.getEntityManager().get().loadAll(Environment.class).get(0);
+		sourceName = env.getSourceName().toLowerCase();
+
+		client = new RestHighLevelClient(RestClient.builder(HttpHost.create(elasticSearch.getHttpHostAddress())));
+	}
+
+	@Before
+	public void init() throws DataAccessException, ConnectionException {
+		es = new ElasticsearchBoundary();
+		es.esAddress = "http://" + elasticSearch.getHttpHostAddress();
+		es.active = "true";
+		es.init();
+	}
+
+	@Test
+	public void indexSuccessfullyCreated_CaseDoesNotMatter() throws InterruptedException, ExecutionException {
+		es.createIndex("BlA");
+		assertThat(es.hasIndex("bla")).isTrue();
+	}
+
+	@Test
+	public void indexSuccessfullyCreated_OtherIndizesNot() throws InterruptedException, ExecutionException {
+		es.createIndex("someIndex");
+		assertThat(es.hasIndex("asdf")).isFalse();
+	}
+
+	@Test
+	public void deletedDoc_isGone() throws InterruptedException, DataAccessException, IOException {
+		Measurement ts = context.getEntityManager().get().load(Measurement.class, "1");
+
+		MDMEntityResponse document = MDMEntityResponse.build(Measurement.class, ts, context.getEntityManager().get());
+		es.index(document);
+		Thread.sleep(1000L);
+		es.delete(sourceName, "Measurement", "1");
+		Thread.sleep(1000L);
+		assertThat(search(sourceName, "Model P").getTotalHits().value).isEqualTo(0);
+	}
+
+	@Test
+	public void docIsIndexed_isFound() throws DataAccessException, InterruptedException, IOException {
+		Measurement ts = context.getEntityManager().get().load(Measurement.class, "1");
+
+		MDMEntityResponse document = MDMEntityResponse.build(Measurement.class, ts, context.getEntityManager().get());
+		es.index(document);
+		Thread.sleep(1000L);
+		assertThat(search(sourceName, "Model P").getTotalHits().value).isEqualTo(1);
+	}
+
+	@Test(expected = IllegalStateException.class)
+	public void indexCreatedTwice_ThrowsError() {
+		es.createIndex("someRandomIndex");
+		es.createIndex("someRandomIndex");
+	}
+
+	@Test
+	public void indexDeactivated_NoIndexingDone() {
+		es.active = "false";
+
+		es.createIndex("someSource");
+		assertThat(es.hasIndex("someSource")).isFalse();
+	}
+
+	private SearchHits search(String index, String query) throws IOException {
+		String[] includeFields = new String[] { "source", "type", "id" };
+		String[] excludeFields = new String[0];
+
+		SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
+		sourceBuilder.query(QueryBuilders.simpleQueryStringQuery(query).lenient(true)).fetchSource(includeFields,
+				excludeFields);
+
+		SearchRequest searchRequest = new SearchRequest();
+		searchRequest.indices(index);
+		searchRequest.source(sourceBuilder);
+
+		SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
+		return response.getHits();
+	}
+}
diff --git a/org.eclipse.mdm.freetextindexer/src/test/java/org/eclipse/mdm/freetextindexer/control/SetupIndexTest.java b/org.eclipse.mdm.freetextindexer/src/test/java/org/eclipse/mdm/freetextindexer/control/SetupIndexTest.java
new file mode 100644
index 0000000..f00dfe9
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/src/test/java/org/eclipse/mdm/freetextindexer/control/SetupIndexTest.java
@@ -0,0 +1,66 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.freetextindexer.control;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import javax.enterprise.event.Event;
+
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.freetextindexer.boundary.ElasticsearchBoundary;
+import org.eclipse.mdm.freetextindexer.boundary.MdmApiBoundary;
+import org.eclipse.mdm.freetextindexer.events.CreateIndex;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableMap;
+
+public class SetupIndexTest {
+
+	private SetupIndex setup;
+
+	@Before
+	@SuppressWarnings("unchecked")
+	public void init() {
+		setup = new SetupIndex();
+		setup.esBoundary = mock(ElasticsearchBoundary.class);
+		setup.apiBoundary = mock(MdmApiBoundary.class);
+		setup.createIndexEvent = mock(Event.class);
+	}
+
+	@Test
+	public void hasAlreadyIndex_doNothing() {
+		when(setup.esBoundary.hasIndex(any(String.class))).thenReturn(true);
+
+		setup.createIndexIfNeccessary();
+
+		verify(setup.esBoundary, times(0)).createIndex(any(String.class));
+	}
+
+	@Test
+	public void noIndex_created() {
+		ApplicationContext c = mock(ApplicationContext.class);
+		when(setup.esBoundary.hasIndex(any(String.class))).thenReturn(false);
+		when(setup.apiBoundary.getContexts()).thenReturn(ImmutableMap.of("MDM", c));
+
+		setup.createIndexIfNeccessary();
+
+		verify(setup.createIndexEvent, times(1)).fire(any(CreateIndex.class));
+	}
+}
diff --git a/org.eclipse.mdm.freetextindexer/src/test/java/org/eclipse/mdm/freetextindexer/control/UpdateIndexTest.java b/org.eclipse.mdm.freetextindexer/src/test/java/org/eclipse/mdm/freetextindexer/control/UpdateIndexTest.java
new file mode 100644
index 0000000..fbcdf85
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/src/test/java/org/eclipse/mdm/freetextindexer/control/UpdateIndexTest.java
@@ -0,0 +1,60 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.freetextindexer.control;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import org.eclipse.mdm.freetextindexer.boundary.ElasticsearchBoundary;
+import org.eclipse.mdm.freetextindexer.entities.MDMEntityResponse;
+import org.junit.Before;
+import org.junit.Test;
+
+public class UpdateIndexTest {
+
+	private UpdateIndex update;
+
+	@Before
+	public void init() {
+		update = new UpdateIndex();
+		update.esBoundary = mock(ElasticsearchBoundary.class);
+	}
+
+	@Test
+	public void nullGiven_notUpdated() {
+		update.change(null);
+
+		verify(update.esBoundary, never()).index(any(MDMEntityResponse.class));
+	}
+
+	@Test
+	public void validDoc_Indexed() {
+		MDMEntityResponse response = mock(MDMEntityResponse.class);
+		update.change(response);
+
+		verify(update.esBoundary, times(1)).index(eq(response));
+	}
+
+	@Test
+	public void validDoc_deleted() {
+		update.delete("api", "TestStep", "123");
+
+		verify(update.esBoundary, times(1)).delete(eq("api"), eq("TestStep"), eq("123"));
+	}
+}
diff --git a/org.eclipse.mdm.freetextindexer/src/test/java/org/eclipse/mdm/freetextindexer/entities/MDMEntityResponseTest.java b/org.eclipse.mdm.freetextindexer/src/test/java/org/eclipse/mdm/freetextindexer/entities/MDMEntityResponseTest.java
new file mode 100644
index 0000000..0e16c59
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/src/test/java/org/eclipse/mdm/freetextindexer/entities/MDMEntityResponseTest.java
@@ -0,0 +1,53 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.freetextindexer.entities;
+
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.eclipse.mdm.api.base.model.Quantity;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.query.DataAccessException;
+import org.eclipse.mdm.api.dflt.EntityManager;
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class MDMEntityResponseTest {
+
+	@Ignore
+	@Test
+	public void notContextDescribale_noContext() {
+		Quantity q = mock(Quantity.class);
+		EntityManager manager = mock(EntityManager.class);
+
+		MDMEntityResponse response = MDMEntityResponse.build(Quantity.class, q, manager);
+
+		assertTrue(response.data.attributes.isEmpty());
+	}
+
+	@Ignore
+	@Test
+	public void buildFails_nullIsReturned() throws DataAccessException {
+		TestStep ts = mock(TestStep.class);
+		EntityManager manager = mock(EntityManager.class);
+		when(manager.loadContexts(eq(ts), any())).thenThrow(new DataAccessException("test"));
+
+		assertNull(MDMEntityResponse.build(TestStep.class, ts, manager));
+	}
+}
diff --git a/org.eclipse.mdm.freetextindexer/src/test/java/org/eclipse/mdm/freetextindexer/entities/MDMEntityTest.java b/org.eclipse.mdm.freetextindexer/src/test/java/org/eclipse/mdm/freetextindexer/entities/MDMEntityTest.java
new file mode 100644
index 0000000..fd89c44
--- /dev/null
+++ b/org.eclipse.mdm.freetextindexer/src/test/java/org/eclipse/mdm/freetextindexer/entities/MDMEntityTest.java
@@ -0,0 +1,59 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.freetextindexer.entities;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.mdm.api.base.model.Value;
+import org.eclipse.mdm.api.base.model.ValueType;
+import org.junit.Test;
+
+public class MDMEntityTest {
+
+	@Test
+	public void notIndexedFields_NotIndexed() {
+		MDMEntity entity = buildEntity("SortIndex", true);
+
+		assertTrue(entity.attributes.isEmpty());
+	}
+
+	@Test
+	public void invalidFields_NotIndexed() {
+		MDMEntity entity = buildEntity("indexed", false);
+
+		assertTrue(entity.attributes.isEmpty());
+	}
+
+	@Test
+	public void validField_Indexed() {
+		MDMEntity entity = buildEntity("indexed", true);
+
+		assertFalse(entity.attributes.isEmpty());
+	}
+
+	private MDMEntity buildEntity(String name, boolean valid) {
+		Value value = ValueType.INTEGER.create(name, 123);
+		value.setValid(valid);
+		Map<String, Value> map = new HashMap<>();
+		map.put(value.getName(), value);
+
+		MDMEntity entity = new MDMEntity("name", "", "1", map);
+		return entity;
+	}
+}
diff --git a/org.eclipse.mdm.openatfx/.gitignore b/org.eclipse.mdm.openatfx/.gitignore
new file mode 100644
index 0000000..7e12476
--- /dev/null
+++ b/org.eclipse.mdm.openatfx/.gitignore
@@ -0,0 +1,19 @@
+src/
+
+# eclipse
+.classpath
+.project
+.settings/
+bin/
+
+# gradle
+.gradle
+build/
+
+# intellij
+.idea/
+out/
+*.ipr
+*.iml
+*.iws
+/bin/
diff --git a/org.eclipse.mdm.openatfx/build.gradle b/org.eclipse.mdm.openatfx/build.gradle
new file mode 100644
index 0000000..5568ded
--- /dev/null
+++ b/org.eclipse.mdm.openatfx/build.gradle
@@ -0,0 +1,76 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+plugins { 
+	id "de.undercouch.download" version "3.2.0"
+	id 'maven-publish'
+	id 'java-library'
+}
+
+import de.undercouch.gradle.tasks.download.Download
+
+def atfxVersion  = '0.7.4'
+description = 'Downloads openATFX and publishes it to the local maven repository'
+
+dependencies {
+	compile 'org.slf4j:jcl-over-slf4j:1.7.25'
+	compile 'org.slf4j:log4j-over-slf4j:1.7.25'
+	compile 'org.codehaus.woodstox:woodstox-core-asl:4.4.1'
+
+	// actually we just need the org.asam.ods.* classes
+	compile "org.eclipse.mdm:org.eclipse.mdm.api.odsadapter:${version}"
+	testCompile 'org.apache.commons:commons-math:2.2'
+}
+
+configurations.all {
+	// stax-api is included in Java 6 or higher
+	exclude group: 'javax.xml.stream', module: 'stax-api'
+}
+
+jar {
+    manifest {
+        attributes(
+            'Implementation-Title'   : 'openATFX',
+            'Implementation-Version' : atfxVersion,
+            'Implementation-URL'     : 'https://sourceforge.net/projects/openatfx'
+        )
+    }
+}
+
+task downloadOpenATFX(type: Download) {
+	acceptAnyCertificate true
+	overwrite false
+	// use mirror subdomain of 'https://sourceforge.net/projects/openatfx/files/openatfx-${atfxVersion}-jars.zip/download'
+	// because gradle has problems establishing a ssl connection with sourceforge directly
+	src "https://liquidtelecom.dl.sourceforge.net/project/openatfx/openatfx-${atfxVersion}-jars.zip"
+	dest file("${buildDir}/openatfx-${atfxVersion}-jars.zip")
+	outputs.file dest
+}
+
+task unzipOpenATFX(dependsOn: downloadOpenATFX, type: Copy) {
+	from zipTree(downloadOpenATFX.dest)
+	into buildDir
+	outputs.dir file("${buildDir}/openatfx-${atfxVersion}")
+}
+
+task copySource(dependsOn: unzipOpenATFX, type: Copy) {
+	from file("${buildDir}/openatfx-${atfxVersion}/src")
+	into 'src'
+}
+
+compileJava.dependsOn copySource
+/**
+ * Some tests in openATFX throw NPEs when executed with the ODS Corba classes generated
+ * by SunORB. The issue occurs, if an attribute is left uninitialized and then serialized.
+ */
+tasks.withType(Test) {enabled = false}
diff --git a/org.eclipse.mdm.preferences/.gitignore b/org.eclipse.mdm.preferences/.gitignore
new file mode 100644
index 0000000..1375395
--- /dev/null
+++ b/org.eclipse.mdm.preferences/.gitignore
@@ -0,0 +1 @@
+/derby.log
diff --git a/org.eclipse.mdm.preferences/build.gradle b/org.eclipse.mdm.preferences/build.gradle
new file mode 100644
index 0000000..a78f130
--- /dev/null
+++ b/org.eclipse.mdm.preferences/build.gradle
@@ -0,0 +1,74 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+description = 'MDM preference service'
+
+apply plugin: 'java'
+apply plugin: 'maven'
+apply plugin: 'eclipse'
+apply plugin: 'io.github.divinespear.jpa-schema-generate'
+
+sourceCompatibility = 1.8
+targetCompatibility = 1.8
+
+repositories {
+	mavenLocal()
+	jcenter()
+	mavenCentral()
+}
+
+dependencies {
+	runtime  'org.glassfish.jersey.containers:jersey-container-servlet:2.23.2'
+	compile  'com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.9.2'
+	compile 'com.google.guava:guava:25.0-jre'
+	compileOnly  'javax:javaee-api:7.0'
+
+    compile project(':org.eclipse.mdm.freetextindexer')
+	compile project(':org.eclipse.mdm.property')
+
+	testCompile  'org.eclipse.persistence:eclipselink:2.6.4'
+	testCompile 'junit:junit:4.12'
+	testCompile 'org.assertj:assertj-core:3.6.1'
+	testRuntime 'org.apache.derby:derby:10.13.1.1'
+}
+
+generateSchema {
+	vendor = "eclipselink"
+	packageToScan = [
+		"org.eclipse.mdm"
+	]
+	scriptAction = "drop-and-create"
+	targets {
+		postgres {
+			databaseProductName = "PostgreSQL"
+			databaseMajorVersion = 9
+			databaseMinorVersion = 0
+		}
+		derby { databaseProductName = "Apache Derby" }
+	}
+}
+
+buildscript {
+	repositories {
+		mavenCentral()
+		maven { url "https://plugins.gradle.org/m2/" }
+	}
+	dependencies { classpath 'gradle.plugin.io.github.divinespear:jpa-schema-gradle-plugin:0.3.2' }
+}
+
+jar {
+	metaInf { from '../NOTICE.txt' }
+	metaInf { from '../LICENSE.txt' }
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.preferences/src/main/java/org/eclipse/mdm/preferences/boundary/PreferenceResource.java b/org.eclipse.mdm.preferences/src/main/java/org/eclipse/mdm/preferences/boundary/PreferenceResource.java
new file mode 100644
index 0000000..63fb7a1
--- /dev/null
+++ b/org.eclipse.mdm.preferences/src/main/java/org/eclipse/mdm/preferences/boundary/PreferenceResource.java
@@ -0,0 +1,146 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.preferences.boundary;
+
+import java.util.List;
+
+import javax.ejb.EJB;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.GenericEntity;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.mdm.preferences.controller.PreferenceService;
+import org.eclipse.mdm.preferences.entity.PreferenceList;
+import org.eclipse.mdm.preferences.entity.PreferenceMessage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+/**
+ * 
+ * @author Johannes Stamm, Peak Solution GmbH
+ *
+ */
+@Tag(name = "Preferences")
+@Path("/preferences")
+public class PreferenceResource {
+
+	private static final Logger LOG = LoggerFactory.getLogger(PreferenceResource.class);
+
+	@EJB
+	private PreferenceService preferenceService;
+
+	/**
+	 * delegates the request to the {@link PreferenceService}
+	 * 
+	 * @param scope filter by scope, empty loads all
+	 * @param key   filter by key, empty loads all
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response getPreference(@QueryParam("scope") String scope, @QueryParam("key") String key) {
+
+		try {
+			List<PreferenceMessage> config = this.preferenceService.getPreferences(scope, key);
+			return toResponse(new PreferenceList(config), Status.OK);
+
+		} catch (RuntimeException e) {
+			LOG.error(e.getMessage(), e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	/**
+	 * delegates the request to the {@link PreferenceService}
+	 * 
+	 * @param source filter by source
+	 * @param key    filter by key, empty loads all
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@GET
+	@Path("/source")
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response getPreferenceBySource(@QueryParam("source") String source, @QueryParam("key") String key) {
+
+		try {
+			List<PreferenceMessage> config = this.preferenceService.getPreferencesBySource(source, key);
+			return toResponse(new PreferenceList(config), Status.OK);
+
+		} catch (RuntimeException e) {
+			LOG.error(e.getMessage(), e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	/**
+	 * delegates the request to the {@link PreferenceService}
+	 * 
+	 * @param preference Configuration to save
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@PUT
+	@Consumes(MediaType.APPLICATION_JSON)
+	public Response setPreference(PreferenceMessage preference) {
+
+		try {
+			return toResponse(this.preferenceService.save(preference), Status.CREATED);
+		} catch (RuntimeException e) {
+			LOG.error(e.getMessage(), e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	/**
+	 * delegates the request to the {@link PreferenceService}
+	 * 
+	 * @param preference Configuration to delete
+	 * @return the result of the delegated request as {@link Response}
+	 */
+	@DELETE
+	@Path("/{ID}")
+	public Response deletePreference(@PathParam("ID") Long id) {
+
+		try {
+			return toResponse(this.preferenceService.deletePreference(id), Status.OK);
+		} catch (RuntimeException e) {
+			LOG.error(e.getMessage(), e);
+			throw new WebApplicationException(e.getMessage(), e, Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	/**
+	 * converts the given object to a {@link Response} with the given {@link Status}
+	 *
+	 * @param responseEntry object to convert
+	 * @param status        {@link Status} of the {@link Response}
+	 * @return the created {@link Response}
+	 */
+	private Response toResponse(Object response, Status status) {
+		GenericEntity<Object> genEntity = new GenericEntity<>(response, response.getClass());
+		return Response.status(status).entity(genEntity).type(MediaType.APPLICATION_JSON).build();
+	}
+}
diff --git a/org.eclipse.mdm.preferences/src/main/java/org/eclipse/mdm/preferences/controller/PreferenceException.java b/org.eclipse.mdm.preferences/src/main/java/org/eclipse/mdm/preferences/controller/PreferenceException.java
new file mode 100644
index 0000000..a587387
--- /dev/null
+++ b/org.eclipse.mdm.preferences/src/main/java/org/eclipse/mdm/preferences/controller/PreferenceException.java
@@ -0,0 +1,14 @@
+package org.eclipse.mdm.preferences.controller;
+
+public class PreferenceException extends RuntimeException {
+
+	private static final long serialVersionUID = -4350425959578840884L;
+
+	public PreferenceException(String message) {
+		super(message);
+	}
+
+	public PreferenceException(String message, Throwable t) {
+		super(message, t);
+	}
+}
diff --git a/org.eclipse.mdm.preferences/src/main/java/org/eclipse/mdm/preferences/controller/PreferenceService.java b/org.eclipse.mdm.preferences/src/main/java/org/eclipse/mdm/preferences/controller/PreferenceService.java
new file mode 100644
index 0000000..59f5b6e
--- /dev/null
+++ b/org.eclipse.mdm.preferences/src/main/java/org/eclipse/mdm/preferences/controller/PreferenceService.java
@@ -0,0 +1,247 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.preferences.controller;
+
+import java.security.Principal;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import javax.annotation.Resource;
+import javax.ejb.SessionContext;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.eclipse.mdm.preferences.entity.Preference;
+import org.eclipse.mdm.preferences.entity.PreferenceMessage;
+import org.eclipse.mdm.preferences.entity.PreferenceMessage.Scope;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
+
+/**
+ * 
+ * @author Johannes Stamm, Peak Solution GmbH
+ *
+ */
+@Stateless
+public class PreferenceService {
+	private static final Logger LOG = LoggerFactory.getLogger(PreferenceService.class);
+
+	private static final String ADMIN_ROLE = "Admin";
+
+	@PersistenceContext(unitName = "openMDM")
+	private EntityManager em;
+
+	@Resource
+	private SessionContext sessionContext;
+
+	public PreferenceService() {
+		// public no-arg constructor
+	}
+
+	/**
+	 * Constructor for unit tests
+	 * 
+	 * @param em             EntityManager to use
+	 * @param sessionContext sessionManager to use
+	 */
+	PreferenceService(EntityManager em, SessionContext sessionContext) {
+		this.em = em;
+		this.sessionContext = sessionContext;
+	}
+
+	public List<PreferenceMessage> getPreferences(String scope, String key) {
+
+		TypedQuery<Preference> query;
+		if (scope == null || scope.trim().isEmpty()) {
+			query = em.createQuery(
+					"select p from Preference p where (p.user is null or p.user = :user) and LOWER(p.key) like :key",
+					Preference.class).setParameter("user", sessionContext.getCallerPrincipal().getName())
+					.setParameter("key", key.toLowerCase() + "%");
+		} else {
+			query = em.createQuery(buildQuery(scope, key), Preference.class);
+
+			if (key != null && !key.trim().isEmpty()) {
+				query.setParameter("key", key.toLowerCase() + "%");
+			}
+		}
+
+		return query.getResultList().stream().map(this::convert).collect(Collectors.toList());
+	}
+
+	public List<PreferenceMessage> getPreferencesBySource(String source, String key) {
+		TypedQuery<Preference> query;
+
+		if (key == null || key.trim().isEmpty()) {
+			query = em.createQuery("select p from Preference p where p.source = :source", Preference.class)
+					.setParameter("source", Strings.emptyToNull(source));
+
+		} else {
+			query = em
+					.createQuery("select p from Preference p where p.source = :source and p.key = :key",
+							Preference.class)
+					.setParameter("source", Strings.emptyToNull(source)).setParameter("key", Strings.emptyToNull(key));
+		}
+		return query.getResultList().stream().map(this::convert).collect(Collectors.toList());
+	}
+
+	public PreferenceMessage save(PreferenceMessage preference) {
+		Principal principal = sessionContext.getCallerPrincipal();
+		List<Preference> existingPrefs = getExistingPreference(preference, principal);
+
+		Preference pe;
+
+		if (existingPrefs.isEmpty()) {
+			pe = convert(preference);
+		} else {
+			if (existingPrefs.size() > 1) {
+				LOG.warn(
+						"Found multiple entries for preference with scope={}, source={}, user={}, key={} where one entry was expected!",
+						preference.getScope(), preference.getSource(), preference.getUser(), preference.getKey());
+			}
+			pe = existingPrefs.get(0);
+			pe.setValue(preference.getValue());
+		}
+		if (isAllowed(pe)) {
+			em.persist(pe);
+			em.flush();
+			return convert(pe);
+		} else {
+			throw new PreferenceException(
+					"Only users with role " + ADMIN_ROLE
+							+ " are allowed to save Preferences outside of the USER scope!");
+		}
+
+	}
+
+	public PreferenceMessage deletePreference(Long id) {
+
+		Preference preference = em.find(Preference.class, id);
+
+		if (isAllowed(preference)) {
+			em.remove(preference);
+			em.flush();
+			return convert(preference);
+		} else {
+			throw new PreferenceException("Only users with role " + ADMIN_ROLE + " are allowed to delete Preference!");
+		}
+	}
+
+	private boolean isAllowed(Preference preference) {
+		return sessionContext.isCallerInRole(ADMIN_ROLE)
+				|| (preference.getUser() != null
+						&& preference.getUser().equalsIgnoreCase(sessionContext.getCallerPrincipal().getName()));
+	}
+
+	private PreferenceMessage convert(Preference pe) {
+		PreferenceMessage p = new PreferenceMessage();
+		p.setKey(pe.getKey());
+		p.setValue(pe.getValue());
+		p.setId(pe.getId());
+
+		if (pe.getUser() == null && pe.getSource() == null) {
+			p.setSource(pe.getSource());
+			p.setScope(Scope.SYSTEM);
+		} else if (pe.getUser() != null) {
+			p.setUser(pe.getUser());
+			p.setScope(Scope.USER);
+		} else if (pe.getSource() != null) {
+			p.setSource(pe.getSource());
+			p.setScope(Scope.SOURCE);
+		}
+
+		return p;
+	}
+
+	private Preference convert(PreferenceMessage p) {
+		Principal principal = sessionContext.getCallerPrincipal();
+
+		Preference pe = new Preference();
+		pe.setKey(p.getKey());
+		pe.setValue(p.getValue());
+		pe.setId(p.getId());
+
+		switch (p.getScope()) {
+		case SOURCE:
+			pe.setSource(p.getSource());
+			break;
+		case USER:
+			pe.setUser(principal.getName());
+			break;
+		case SYSTEM:
+		default:
+			break;
+		}
+		return pe;
+	}
+
+	private String buildQuery(String scope, String key) {
+		String query = "select p from Preference p";
+		String whereOrAnd = " where";
+		if (scope != null && scope.trim().length() > 0) {
+			switch (scope.toLowerCase()) {
+			case "system":
+				query = query.concat(whereOrAnd).concat(" p.source is null and p.user is null");
+				break;
+			case "source":
+				query = query.concat(whereOrAnd).concat(" p.source is not null and p.user is null");
+				break;
+			case "user":
+				query = query.concat(whereOrAnd).concat(" p.source is null and p.user is not null");
+				break;
+			default:
+			}
+			whereOrAnd = " and";
+		}
+		if (key != null && key.trim().length() > 0) {
+			query = query.concat(whereOrAnd).concat(" LOWER(p.key) LIKE :key");
+		}
+		return query;
+	}
+
+	private List<Preference> getExistingPreference(PreferenceMessage preference, Principal principal) {
+		Preconditions.checkNotNull(preference.getScope(), "Scope cannot be null!");
+
+		if (preference.getId() == null) {
+			switch (preference.getScope()) {
+			case USER:
+				return em
+						.createQuery(
+								"select p from Preference p where p.source is null and p.user = :user and p.key = :key",
+								Preference.class)
+						.setParameter("user", Strings.emptyToNull(principal.getName()))
+						.setParameter("key", preference.getKey()).getResultList();
+			case SOURCE:
+				return em.createQuery(
+						"select p from Preference p where p.source = :source and p.user is null and p.key = :key",
+						Preference.class).setParameter("source", Strings.emptyToNull(preference.getSource()))
+						.setParameter("key", preference.getKey()).getResultList();
+			case SYSTEM:
+				return em.createQuery(
+						"select p from Preference p where p.source is null and p.user is null and p.key = :key",
+						Preference.class).setParameter("key", preference.getKey()).getResultList();
+			default:
+				throw new IllegalArgumentException("Unknown Scope!");
+			}
+		} else {
+			return Arrays.asList(em.find(Preference.class, preference.getId()));
+		}
+	}
+}
diff --git a/org.eclipse.mdm.preferences/src/main/java/org/eclipse/mdm/preferences/entity/Preference.java b/org.eclipse.mdm.preferences/src/main/java/org/eclipse/mdm/preferences/entity/Preference.java
new file mode 100644
index 0000000..1529cf7
--- /dev/null
+++ b/org.eclipse.mdm.preferences/src/main/java/org/eclipse/mdm/preferences/entity/Preference.java
@@ -0,0 +1,135 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.preferences.entity;
+
+import java.util.Objects;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
+
+import com.google.common.base.MoreObjects;
+
+/**
+ * 
+ * @author Johannes Stamm, Peak Solution GmbH
+ *
+ */
+@Entity
+@Table(uniqueConstraints = { @UniqueConstraint(columnNames = { "source", "username", "keyCol" }) })
+public class Preference {
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	private Long id;
+
+	@Column
+	private String source;
+
+	@Column(name = "username")
+	private String user;
+
+	@Column(name = "keyCol")
+	private String key;
+
+	@Column(name = "valueCol", nullable = false)
+	@Lob
+	private String value;
+
+	public Preference() {
+		super();
+	}
+
+	public Preference(String source, String user, String key, String value) {
+		super();
+		this.source = source;
+		this.user = user;
+		this.key = key;
+		this.value = value;
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getSource() {
+		return source;
+	}
+
+	public void setSource(String source) {
+		this.source = source;
+	}
+
+	public String getUser() {
+		return user;
+	}
+
+	public void setUser(String user) {
+		this.user = user;
+	}
+
+	public String getKey() {
+		return key;
+	}
+
+	public void setKey(String key) {
+		this.key = key;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+
+		if (obj == null) {
+			return false;
+		}
+		if (getClass() != obj.getClass()) {
+			return false;
+		}
+
+		final Preference other = (Preference) obj;
+		return Objects.equals(this.id, other.id) && Objects.equals(this.source, other.source)
+				&& Objects.equals(this.user, other.user) && Objects.equals(this.key, other.key)
+				&& Objects.equals(this.value, other.value);
+	}
+
+	@Override
+	public int hashCode() {
+		return Objects.hash(id, source, user, key, value);
+	}
+
+	@Override
+	public String toString() {
+		return MoreObjects.toStringHelper(Preference.class).add("id", id).add("source", source).add("user", user)
+				.add("key", key).add("value", value).toString();
+	}
+
+}
diff --git a/org.eclipse.mdm.preferences/src/main/java/org/eclipse/mdm/preferences/entity/PreferenceList.java b/org.eclipse.mdm.preferences/src/main/java/org/eclipse/mdm/preferences/entity/PreferenceList.java
new file mode 100644
index 0000000..97ebf93
--- /dev/null
+++ b/org.eclipse.mdm.preferences/src/main/java/org/eclipse/mdm/preferences/entity/PreferenceList.java
@@ -0,0 +1,69 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.preferences.entity;
+
+import java.util.List;
+import java.util.Objects;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import com.google.common.base.MoreObjects;
+
+/**
+ * 
+ * @author Johannes Stamm, Peak Solution GmbH
+ *
+ */
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class PreferenceList {
+
+	private List<PreferenceMessage> preferences;
+
+	public PreferenceList(List<PreferenceMessage> preferenceList) {
+		preferences = preferenceList;
+	}
+
+	public List<PreferenceMessage> getPreferences() {
+		return preferences;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+
+		if (obj == null) {
+			return false;
+		}
+		if (getClass() != obj.getClass()) {
+			return false;
+		}
+
+		final PreferenceList other = (PreferenceList) obj;
+
+		return Objects.equals(this.preferences, other.preferences);
+	}
+
+	@Override
+	public int hashCode() {
+		return Objects.hash(preferences);
+	}
+
+	@Override
+	public String toString() {
+		return MoreObjects.toStringHelper(PreferenceList.class).add("preferences", preferences).toString();
+	}
+}
diff --git a/org.eclipse.mdm.preferences/src/main/java/org/eclipse/mdm/preferences/entity/PreferenceMessage.java b/org.eclipse.mdm.preferences/src/main/java/org/eclipse/mdm/preferences/entity/PreferenceMessage.java
new file mode 100644
index 0000000..c28700d
--- /dev/null
+++ b/org.eclipse.mdm.preferences/src/main/java/org/eclipse/mdm/preferences/entity/PreferenceMessage.java
@@ -0,0 +1,116 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.preferences.entity;
+
+import java.util.Objects;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+import com.google.common.base.MoreObjects;
+
+/**
+ * 
+ * @author Johannes Stamm, Peak Solution GmbH
+ *
+ */
+@XmlRootElement(name = "preference")
+public class PreferenceMessage {
+
+	public enum Scope {
+		SYSTEM, SOURCE, USER;
+	}
+
+	private Scope scope;
+	private String source;
+	private String user;
+	private String key;
+	private String value;
+	private Long id;
+
+	public Scope getScope() {
+		return scope;
+	}
+
+	public void setScope(Scope scope) {
+		this.scope = scope;
+	}
+
+	public String getSource() {
+		return source;
+	}
+
+	public void setSource(String source) {
+		this.source = source;
+	}
+
+	public String getUser() {
+		return user;
+	}
+
+	public void setUser(String user) {
+		this.user = user;
+	}
+
+	public String getKey() {
+		return key;
+	}
+
+	public void setKey(String key) {
+		this.key = key;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+
+		if (obj == null) {
+			return false;
+		}
+		if (getClass() != obj.getClass()) {
+			return false;
+		}
+
+		final PreferenceMessage other = (PreferenceMessage) obj;
+		return Objects.equals(this.id, other.id) && Objects.equals(this.scope, other.scope)
+				&& Objects.equals(this.source, other.source) && Objects.equals(this.user, other.user)
+				&& Objects.equals(this.key, other.key) && Objects.equals(this.value, other.value);
+	}
+
+	@Override
+	public int hashCode() {
+		return Objects.hash(id, scope, source, user, key, value);
+	}
+
+	@Override
+	public String toString() {
+		return MoreObjects.toStringHelper(PreferenceMessage.class).add("id", id).add("scope", scope)
+				.add("source", source).add("user", user).add("key", key).add("value", value).toString();
+	}
+}
diff --git a/org.eclipse.mdm.preferences/src/main/resources/META-INF/persistence.xml b/org.eclipse.mdm.preferences/src/main/resources/META-INF/persistence.xml
new file mode 100644
index 0000000..3f709eb
--- /dev/null
+++ b/org.eclipse.mdm.preferences/src/main/resources/META-INF/persistence.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!-- 
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+ -->
+<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
+	version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
+	<persistence-unit name="openMDM" transaction-type="JTA">
+		<jta-data-source>jdbc/openMDM</jta-data-source>
+		<class>org.eclipse.mdm.preferences.entity.Preference</class>
+		<class>org.eclipse.mdm.freetextindexer.entities.SystemProcess</class>
+		<properties>
+			<property name="eclipselink.logging.logger" value="ServerLogger" />
+			<property name="eclipselink.logging.level" value="INFO" />
+			<property name="eclipselink.ddl-generation" value="none" />
+			<!-- surpresses a NPE: see https://markmail.org/message/kdmqhgywxswokckm -->
+			<property name="eclipselink.target-server" value="org.eclipse.persistence.platform.server.glassfish.GlassfishPlatform"/>
+		</properties>
+	</persistence-unit>
+</persistence>	
\ No newline at end of file
diff --git a/org.eclipse.mdm.preferences/src/main/sql/derby/5.1.0M1_update.sql b/org.eclipse.mdm.preferences/src/main/sql/derby/5.1.0M1_update.sql
new file mode 100644
index 0000000..2af00f9
--- /dev/null
+++ b/org.eclipse.mdm.preferences/src/main/sql/derby/5.1.0M1_update.sql
@@ -0,0 +1 @@
+CREATE TABLE system_process (ID BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL, process_id VARCHAR(255), process_key VARCHAR(255), last_locked BIGINT, PRIMARY KEY (ID));
diff --git a/org.eclipse.mdm.preferences/src/main/sql/postgres/5.1.0M1_update.sql b/org.eclipse.mdm.preferences/src/main/sql/postgres/5.1.0M1_update.sql
new file mode 100644
index 0000000..5b71051
--- /dev/null
+++ b/org.eclipse.mdm.preferences/src/main/sql/postgres/5.1.0M1_update.sql
@@ -0,0 +1 @@
+CREATE TABLE system_process (ID  SERIAL NOT NULL, process_id VARCHAR(255), process_key VARCHAR(255), last_locked BIGINT, PRIMARY KEY (ID));
diff --git a/org.eclipse.mdm.preferences/src/test/java/org/eclipse/mdm/preferences/controller/PreferenceServiceTest.java b/org.eclipse.mdm.preferences/src/test/java/org/eclipse/mdm/preferences/controller/PreferenceServiceTest.java
new file mode 100644
index 0000000..3575f12
--- /dev/null
+++ b/org.eclipse.mdm.preferences/src/test/java/org/eclipse/mdm/preferences/controller/PreferenceServiceTest.java
@@ -0,0 +1,328 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.preferences.controller;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.security.Principal;
+import java.util.List;
+
+import javax.ejb.SessionContext;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+import org.assertj.core.groups.Tuple;
+import org.eclipse.mdm.preferences.entity.Preference;
+import org.eclipse.mdm.preferences.entity.PreferenceMessage;
+import org.eclipse.mdm.preferences.entity.PreferenceMessage.Scope;
+import org.eclipse.persistence.config.PersistenceUnitProperties;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import com.google.common.collect.ImmutableMap;
+
+public class PreferenceServiceTest {
+	private EntityManagerFactory factory;
+	private EntityManager em;
+	private SessionContext sessionContext = mock(SessionContext.class);
+	private PreferenceService service;
+
+	@Before
+	public void init() {
+		factory = Persistence.createEntityManagerFactory("preferenceTest", ImmutableMap
+				.of(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, "META-INF/persistence-test.xml"));
+
+		em = factory.createEntityManager();
+
+		Principal principal = mock(Principal.class);
+		when(principal.getName()).thenReturn("testUser");
+		when(sessionContext.getCallerPrincipal()).thenReturn(principal);
+		when(sessionContext.isCallerInRole(Mockito.anyString())).thenReturn(true);
+		service = new PreferenceService(em, sessionContext);
+	}
+
+	@After
+	public void destroy() {
+		factory.close();
+	}
+
+	private void initData(Preference... preferences) {
+		EntityManager emgr = factory.createEntityManager();
+		emgr.getTransaction().begin();
+		emgr.createQuery("delete from Preference").executeUpdate();
+		for (Preference p : preferences) {
+			emgr.persist(p);
+		}
+
+		emgr.getTransaction().commit();
+		emgr.close();
+	}
+
+	@Test
+	public void testGetPreferences() {
+		initData(new Preference(null, null, "testGetPreferences", "myValue1"),
+				new Preference("MDMTEST", null, "testGetPreferences", "myValue2"),
+				new Preference(null, "testUser", "testGetPreferences", "myValue3"),
+				new Preference(null, "otherUser", "testGetPreferences", "myValue4"),
+				new Preference(null, null, "otherKey", "myValue5"));
+
+		assertThat(service.getPreferences(null, "testGetPreferences"))
+				.extracting("scope", "source", "user", "key", "value")
+				.containsExactlyInAnyOrder(new Tuple(Scope.SYSTEM, null, null, "testGetPreferences", "myValue1"),
+						new Tuple(Scope.SOURCE, "MDMTEST", null, "testGetPreferences", "myValue2"),
+						new Tuple(Scope.USER, null, "testUser", "testGetPreferences", "myValue3"));
+	}
+
+	@Test
+	public void testGetPreferencesForSystem() {
+		initData(new Preference(null, null, "testGetPreferencesSystem", "myValue"),
+				new Preference("MDMTEST", null, "testGetPreferencesSystem", "myValue"));
+
+		assertThat(service.getPreferences("system", "testGetPreferencesSystem"))
+				.extracting("scope", "source", "user", "key", "value")
+				.containsExactly(new Tuple(Scope.SYSTEM, null, null, "testGetPreferencesSystem", "myValue"));
+	}
+
+	@Test
+	public void testGetPreferencesForSource() {
+		initData(new Preference(null, "testUser", "testGetPreferencesForSource", "myValue"),
+				new Preference("MDM_OTHER", null, "testGetPreferencesForSource", "myValue"),
+				new Preference("MDMTEST", null, "testGetPreferencesForSource", "myValue"));
+
+		assertThat(service.getPreferences("source", "testGetPreferencesForSource"))
+				.extracting("scope", "source", "user", "key", "value").containsExactlyInAnyOrder(
+						new Tuple(Scope.SOURCE, "MDM_OTHER", null, "testGetPreferencesForSource", "myValue"),
+						new Tuple(Scope.SOURCE, "MDMTEST", null, "testGetPreferencesForSource", "myValue"));
+	}
+
+	@Test
+	public void testGetPreferencesForUser() {
+		initData(new Preference(null, "other", "testGetPreferencesForUser", "myValue"),
+				new Preference(null, "testUser", "testGetPreferencesForUser", "myValue"),
+				new Preference("MDMTEST", null, "testGetPreferencesForUser", "myValue"));
+
+		assertThat(service.getPreferences("user", "testGetPreferencesForUser"))
+				.extracting("scope", "source", "user", "key", "value")
+				.containsExactly(new Tuple(Scope.USER, null, "other", "testGetPreferencesForUser", "myValue"),
+						new Tuple(Scope.USER, null, "testUser", "testGetPreferencesForUser", "myValue"));
+	}
+
+	@Test
+	public void testGetPreferencesBySource() {
+		initData(new Preference("MDMTEST", null, "testGetPreferencesSource", "myValue"),
+				new Preference("MDM_OTHER", null, "testGetPreferencesSource", "myValue"));
+
+		assertThat(service.getPreferencesBySource("MDMTEST", "testGetPreferencesSource")).hasSize(1)
+				.extracting("scope", "source", "user", "key", "value")
+				.containsExactly(new Tuple(Scope.SOURCE, "MDMTEST", null, "testGetPreferencesSource", "myValue"));
+	}
+
+	@Test
+	public void testGetPreferencesBySourceKeyEmpty() {
+		initData(new Preference("MDMTEST", null, "testGetPreferencesSourceKeyEmpty", "myValue"),
+				new Preference("MDM_OTHER", null, "testGetPreferencesSourceKeyEmpty", "myValue"));
+
+		assertThat(service.getPreferencesBySource("MDMTEST", "")).hasSize(1)
+				.extracting("scope", "source", "user", "key", "value").containsExactly(
+						new Tuple(Scope.SOURCE, "MDMTEST", null, "testGetPreferencesSourceKeyEmpty", "myValue"));
+	}
+
+	@Test
+	public void testAdminCanDeletePreferenceInScopeSystem() {
+		String prefName = "testAdminCanDeletePreference";
+		initData(new Preference(null, null, prefName, "myValue"));
+		when(sessionContext.isCallerInRole(Mockito.eq("Admin"))).thenReturn(true);
+
+		List<PreferenceMessage> listBeforeDelete = service.getPreferences("system", prefName);
+		assertThat(listBeforeDelete).hasSize(1);
+
+		em.getTransaction().begin();
+		service.deletePreference(listBeforeDelete.get(0).getId());
+		em.getTransaction().commit();
+
+		assertThat(service.getPreferences("system", prefName)).hasSize(0);
+	}
+
+	@Test
+	public void testOtherRolesCanNotDeletePreferenceInScopeSystem() {
+		String prefName = "testOtherUsersCanNotDeletePreferenceInScopeSystem";
+		initData(new Preference(null, null, prefName, "myValue"));
+		when(sessionContext.isCallerInRole(Mockito.eq("Admin"))).thenReturn(false);
+
+		List<PreferenceMessage> listBeforeDelete = service.getPreferences("system",
+				prefName);
+		assertThat(listBeforeDelete).hasSize(1);
+
+		try {
+			em.getTransaction().begin();
+			assertThatThrownBy(() -> service.deletePreference(listBeforeDelete.get(0).getId()))
+					.hasMessage("Only users with role Admin are allowed to delete Preference!");
+		} finally {
+			em.getTransaction().rollback();
+		}
+	}
+
+	@Test
+	public void testNonAdminCanDeleteOwnPreferenceInUserScope() {
+		String prefName = "testUserCanDeleteOwnPreferenceInUserScope";
+		initData(new Preference(null, "testUser", prefName, "myValue"));
+		when(sessionContext.isCallerInRole(Mockito.eq("Admin"))).thenReturn(false);
+
+		List<PreferenceMessage> listBeforeDelete = service.getPreferences("user", prefName);
+		assertThat(listBeforeDelete).hasSize(1);
+
+		em.getTransaction().begin();
+		service.deletePreference(listBeforeDelete.get(0).getId());
+		em.getTransaction().commit();
+
+		assertThat(service.getPreferences("user", prefName)).hasSize(0);
+	}
+
+	@Test
+	public void testNonAdminCanNotDeleteOtherPreferenceInUserScope() {
+		String prefName = "testNonAdminCanNotDeleteOtherPreferenceInUserScope";
+		initData(new Preference(null, "otherUser", prefName, "myValue"));
+		when(sessionContext.isCallerInRole(Mockito.eq("Admin"))).thenReturn(true);
+
+		List<PreferenceMessage> listBeforeDelete = service.getPreferences("user", prefName);
+		assertThat(listBeforeDelete).hasSize(1);
+		when(sessionContext.isCallerInRole(Mockito.eq("Admin"))).thenReturn(false);
+
+		try {
+			em.getTransaction().begin();
+			assertThatThrownBy(() -> service.deletePreference(listBeforeDelete.get(0).getId()))
+					.hasMessage("Only users with role Admin are allowed to delete Preference!");
+		} finally {
+			em.getTransaction().rollback();
+		}
+	}
+
+	@Test
+	public void testSaveSystemScope() {
+		PreferenceMessage pref = new PreferenceMessage();
+		pref.setScope(Scope.SYSTEM);
+		pref.setKey("testSaveSystemScope");
+		pref.setValue("myValue");
+
+		em.getTransaction().begin();
+		PreferenceMessage saved = service.save(pref);
+		em.getTransaction().commit();
+
+		assertThat(saved).hasNoNullFieldsOrPropertiesExcept("source", "user")
+				.hasFieldOrPropertyWithValue("scope", Scope.SYSTEM)
+				.hasFieldOrPropertyWithValue("key", "testSaveSystemScope")
+				.hasFieldOrPropertyWithValue("value", "myValue");
+	}
+
+	@Test
+	public void testNonAdminCannotSaveSystemScope() {
+		when(sessionContext.isCallerInRole(Mockito.eq("Admin"))).thenReturn(false);
+
+		PreferenceMessage pref = new PreferenceMessage();
+		pref.setScope(Scope.SYSTEM);
+		pref.setKey("testNonAdminCannotSaveSystemScope");
+		pref.setValue("myValue");
+
+		try {
+			em.getTransaction().begin();
+			assertThatThrownBy(() -> service.save(pref))
+					.hasMessage(
+							"Only users with role Admin are allowed to save Preferences outside of the USER scope!");
+		} finally {
+			em.getTransaction().rollback();
+		}
+	}
+
+	@Test
+	public void testSaveSourceScope() {
+		PreferenceMessage pref = new PreferenceMessage();
+		pref.setScope(Scope.SOURCE);
+		pref.setSource("MDMTEST");
+		pref.setKey("testSaveSourceScope");
+		pref.setValue("myValue");
+
+		em.getTransaction().begin();
+		PreferenceMessage saved = service.save(pref);
+		em.getTransaction().commit();
+
+		assertThat(saved).hasNoNullFieldsOrPropertiesExcept("user").hasFieldOrPropertyWithValue("scope", Scope.SOURCE)
+				.hasFieldOrPropertyWithValue("source", "MDMTEST")
+				.hasFieldOrPropertyWithValue("key", "testSaveSourceScope")
+				.hasFieldOrPropertyWithValue("value", "myValue");
+	}
+
+	@Test
+	public void testNonAdminCannotSaveSourceScope() {
+		when(sessionContext.isCallerInRole(Mockito.eq("Admin"))).thenReturn(false);
+
+		PreferenceMessage pref = new PreferenceMessage();
+		pref.setScope(Scope.SOURCE);
+		pref.setSource("MDMTEST");
+		pref.setKey("testNonAdminCannotSaveSystemScope");
+		pref.setValue("myValue");
+
+		try {
+			em.getTransaction().begin();
+			assertThatThrownBy(() -> service.save(pref))
+					.hasMessage(
+							"Only users with role Admin are allowed to save Preferences outside of the USER scope!");
+		} finally {
+			em.getTransaction().rollback();
+		}
+	}
+
+	@Test
+	public void testSaveUserScope() {
+		PreferenceMessage pref = new PreferenceMessage();
+		pref.setScope(Scope.USER);
+		pref.setKey("testSaveUserScope");
+		pref.setValue("myValue");
+
+		em.getTransaction().begin();
+		PreferenceMessage saved = service.save(pref);
+		em.getTransaction().commit();
+
+		assertThat(saved).hasNoNullFieldsOrPropertiesExcept("source").hasFieldOrPropertyWithValue("scope", Scope.USER)
+				.hasFieldOrPropertyWithValue("user", "testUser").hasFieldOrPropertyWithValue("key", "testSaveUserScope")
+				.hasFieldOrPropertyWithValue("value", "myValue");
+	}
+
+	@Test
+	public void testSaveOverrideExisting() {
+		initData(new Preference(null, null, "testSaveOverrideExisting", "myValue"));
+
+		PreferenceMessage pref = new PreferenceMessage();
+		pref.setScope(Scope.SYSTEM);
+		pref.setKey("testSaveOverrideExisting");
+		pref.setValue("myValue");
+
+		em.getTransaction().begin();
+		PreferenceMessage saved = service.save(pref);
+		em.getTransaction().commit();
+
+		assertThat(saved).hasNoNullFieldsOrPropertiesExcept("source", "user")
+				.hasFieldOrPropertyWithValue("scope", Scope.SYSTEM)
+				.hasFieldOrPropertyWithValue("key", "testSaveOverrideExisting")
+				.hasFieldOrPropertyWithValue("value", "myValue");
+
+		assertThat(service.getPreferences("System", "testSaveOverrideExisting")).hasSize(1);
+	}
+}
diff --git a/org.eclipse.mdm.preferences/src/test/java/org/eclipse/mdm/preferences/entity/PreferenceTest.java b/org.eclipse.mdm.preferences/src/test/java/org/eclipse/mdm/preferences/entity/PreferenceTest.java
new file mode 100644
index 0000000..c4fb22e
--- /dev/null
+++ b/org.eclipse.mdm.preferences/src/test/java/org/eclipse/mdm/preferences/entity/PreferenceTest.java
@@ -0,0 +1,121 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.preferences.entity;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.persistence.TypedQuery;
+
+import org.eclipse.persistence.config.PersistenceUnitProperties;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableMap;
+
+public class PreferenceTest {
+	private static final long CLOB_SIZE = 1_000_000;
+
+	private EntityManagerFactory factory;
+
+	@Before
+	public void init() {
+		factory = Persistence.createEntityManagerFactory("preferenceTest", ImmutableMap
+				.of(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, "META-INF/persistence-test.xml"));
+
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.createQuery("delete from Preference").executeUpdate();
+		em.getTransaction().commit();
+		em.close();
+	}
+
+	@After
+	public void destroy() {
+		factory.close();
+	}
+
+	@Test
+	public void testPersist() {
+
+		EntityManager em = factory.createEntityManager();
+
+		em.getTransaction().begin();
+		Preference p = new Preference("MDMXYZ", "*", "key1", "value1");
+		em.persist(p);
+		em.getTransaction().commit();
+	}
+
+	@Test
+	public void testLoad() {
+		EntityManager em = factory.createEntityManager();
+
+		em.getTransaction().begin();
+		Preference p = new Preference("MDMXYZ", "*", "key2", "value1");
+		em.persist(p);
+		em.getTransaction().commit();
+
+		assertThat(em.find(Preference.class, p.getId()))
+				.isEqualToIgnoringGivenFields(new Preference("MDMXYZ", "*", "key2", "value1"), "id");
+
+		em.close();
+	}
+
+	@Test
+	public void testQuery() {
+		EntityManager em = factory.createEntityManager();
+
+		em.getTransaction().begin();
+		Preference p = new Preference("MDMXYZ", "*", "key3", "value1");
+		em.persist(p);
+		em.getTransaction().commit();
+
+		TypedQuery<Preference> q = em.createQuery("select p from Preference p", Preference.class);
+		assertThat(q.getResultList()).hasSize(1).usingElementComparatorIgnoringFields("id")
+				.contains(new Preference("MDMXYZ", "*", "key3", "value1"));
+
+		em.close();
+	}
+
+	@Test
+	public void testPersistLob() {
+		String longString = generateString(CLOB_SIZE);
+
+		EntityManager em = factory.createEntityManager();
+
+		em.getTransaction().begin();
+		Preference p = new Preference("MDMXYZ", "*", "clob", longString);
+		em.persist(p);
+		em.getTransaction().commit();
+		em.close();
+
+		em = factory.createEntityManager();
+		Preference loaded = em.find(Preference.class, p.getId());
+
+		assertThat(loaded).isEqualToIgnoringGivenFields(new Preference("MDMXYZ", "*", "clob", longString), "id");
+		em.close();
+	}
+
+	private String generateString(long length) {
+		StringBuilder builder = new StringBuilder();
+		for (int i = 0; i < length; i++) {
+			builder.append("a");
+		}
+		return builder.toString();
+	}
+}
diff --git a/org.eclipse.mdm.preferences/src/test/resources/META-INF/persistence-test.xml b/org.eclipse.mdm.preferences/src/test/resources/META-INF/persistence-test.xml
new file mode 100644
index 0000000..78e431d
--- /dev/null
+++ b/org.eclipse.mdm.preferences/src/test/resources/META-INF/persistence-test.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!-- 
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+ -->
+<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
+	version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
+	<persistence-unit name="preferenceTest" transaction-type="RESOURCE_LOCAL">
+
+		<class>org.eclipse.mdm.preferences.entity.Preference</class>
+
+		<properties>
+			<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
+			<property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:myDB;create=true" />
+			<property name="javax.persistence.jdbc.user" value="EclipseJPAExample" />
+			<property name="javax.persistence.jdbc.password" value="EclipseJPAExample" />
+
+			<!-- EclipseLink should create the database schema automatically -->
+			<property name="eclipselink.ddl-generation" value="create-tables" />
+			<property name="eclipselink.ddl-generation.output-mode" value="database" />
+
+			<property name="eclipselink.logging.level.sql" value="FINER" />
+			<property name="eclipselink.logging.parameters" value="true" />
+		</properties>
+
+	</persistence-unit>
+</persistence>	
\ No newline at end of file
diff --git a/org.eclipse.mdm.property/build.gradle b/org.eclipse.mdm.property/build.gradle
new file mode 100644
index 0000000..71cb33a
--- /dev/null
+++ b/org.eclipse.mdm.property/build.gradle
@@ -0,0 +1,33 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+description = 'MDM property component'
+
+apply plugin: 'java'
+apply plugin: 'maven'
+apply plugin: 'eclipse'
+sourceCompatibility = 1.8
+targetCompatibility = 1.8
+
+
+repositories {
+	mavenLocal()
+	mavenCentral()
+}
+
+jar {
+	metaInf { from '../NOTICE.txt' }
+	metaInf { from '../LICENSE.txt' }
+}
\ No newline at end of file
diff --git a/org.eclipse.mdm.property/src/main/configuration/global.properties b/org.eclipse.mdm.property/src/main/configuration/global.properties
new file mode 100644
index 0000000..d069819
--- /dev/null
+++ b/org.eclipse.mdm.property/src/main/configuration/global.properties
@@ -0,0 +1,52 @@
+#----------------------------------
+#configuration for Freetext Search
+#----------------------------------
+
+# The URL is required to ask for search results and put documents to
+# The port 9200 is ElasticSearch's default port for the RESTful API
+elasticsearch.url = http://localhost:9200/
+
+# Specifies the maximum number of results per source returned by the query endpoint.
+businessobjects.query.maxresultspersource=1001
+
+
+# ------------------------------
+# configuration for freetextindexer
+# ------------------------------
+# Whether the FreetextSearch should be active or not (true|false). The default value is false.
+# If the parameter is set to false. It cannot be overwritten in the service.xml
+freetext.active=false
+
+# Defines the interval in seconds, in which a session check is performed, to test if the session is still valid. 
+# If the test fails, the freetext indexer tries to reconnect.
+freetext.sessionCheckInterval=60
+
+# All other parameters for freetextindexer can be overwritten by their datasource specific values from service.xml.
+# For avalon the nameservice and servicename of the ODS service is used.
+
+#Avalon: How often the server is polled for new notifications
+freetext.pollingInterval=5000
+
+#Peak: The URL where the notification service is running. 
+#If running multiple ODS servers this parameter should be overwritten in service.xml
+freetext.notificationUrl=http://localhost:8089/api
+
+#Peak: a name for the registration. This ensures that missed notifications are delivered
+#after reregistration 
+freetext.notificationName=someUniqueName
+
+# Specifies a URL to redirect after a logout. By default the logout redirects to the context path.
+#application.logoutRedirect=
+
+# ------------------------------
+# configuration for file release process (PAK2RAW and PAK2ATFX)
+# ------------------------------
+
+#filerelease.converter.raw.pakInputEntity=<ENTITY FOR PAK INPUT PATH FOR RAW CONVERTER>
+#filerelease.converter.raw.pakInputAttribute=<ATTRIBUTE FOR PAK INPUT PATH FOR RAW CONVERTER>
+#filerelease.converter.pak.pakInputEntity=<ENTITY FOR PAK INPUT PATH FOR ATFX CONVERTER>
+#filerelease.converter.pak.pakInputAttribute=<ATTRIBUTE FOR PAK INPUT PATH FOR ATFX CONVERTER>
+#filerelease.converter.pak.pakApplicationPath=<PATH TO PAK APPLICATION (EXE)>
+#filerelease.converter.pak.modelTypeEntity=<ENTITY FOR PAK MODEL DEFINITION FOR RAW CONVERTER>
+#filerelease.converter.pak.modelTypeAttribute=<ATTRIBUTE FOR PAK MODEL DEFINITION FOR RAW CONVERTER>
+#filerelease.converter.target.root.d
\ No newline at end of file
diff --git a/org.eclipse.mdm.property/src/main/java/META-INF/MANIFEST.MF b/org.eclipse.mdm.property/src/main/java/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5e94951
--- /dev/null
+++ b/org.eclipse.mdm.property/src/main/java/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path: 
+
diff --git a/org.eclipse.mdm.property/src/main/java/org/eclipse/mdm/property/GlobalProperty.java b/org.eclipse.mdm.property/src/main/java/org/eclipse/mdm/property/GlobalProperty.java
new file mode 100644
index 0000000..63fc040
--- /dev/null
+++ b/org.eclipse.mdm.property/src/main/java/org/eclipse/mdm/property/GlobalProperty.java
@@ -0,0 +1,37 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.property;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.enterprise.util.Nonbinding;
+import javax.inject.Qualifier;
+
+/**
+ * Qualifier for global properties.
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@Qualifier
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE })
+public @interface GlobalProperty {
+	@Nonbinding
+	String value() default "";
+}
diff --git a/org.eclipse.mdm.property/src/main/java/org/eclipse/mdm/property/GlobalPropertyException.java b/org.eclipse.mdm.property/src/main/java/org/eclipse/mdm/property/GlobalPropertyException.java
new file mode 100644
index 0000000..28bae70
--- /dev/null
+++ b/org.eclipse.mdm.property/src/main/java/org/eclipse/mdm/property/GlobalPropertyException.java
@@ -0,0 +1,48 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.property;
+
+/**
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+public class GlobalPropertyException extends RuntimeException {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 8975069381247044049L;
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param error error message.
+	 */
+	public GlobalPropertyException(String error) {
+		super(error);
+	}
+
+	/**
+	 * Constructor
+	 * 
+	 * @param error error message
+	 * @param e     throwable
+	 */
+	public GlobalPropertyException(String error, Exception e) {
+		super(error, e);
+	}
+
+}
diff --git a/org.eclipse.mdm.property/src/main/java/org/eclipse/mdm/property/GlobalPropertyService.java b/org.eclipse.mdm.property/src/main/java/org/eclipse/mdm/property/GlobalPropertyService.java
new file mode 100644
index 0000000..fd0324a
--- /dev/null
+++ b/org.eclipse.mdm.property/src/main/java/org/eclipse/mdm/property/GlobalPropertyService.java
@@ -0,0 +1,118 @@
+/********************************************************************************
+ * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+package org.eclipse.mdm.property;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.annotation.PostConstruct;
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+import javax.enterprise.inject.spi.InjectionPoint;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Producer for injectable properties.
+ * 
+ * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
+ *
+ */
+@ApplicationScoped
+public class GlobalPropertyService {
+
+	private static final Logger LOG = LoggerFactory.getLogger(GlobalPropertyService.class);
+
+	public static final String PROPERTY_CONFIG_PATH = "org.eclipse.mdm.configPath";
+	private static final String COMPONENT_CONFIG_FOLDER = "org.eclipse.mdm.property";
+	private static final String GLOBAL_PROPERTIES_FILENAME = "global.properties";
+
+	private Properties globalProperties = new Properties();
+
+	/**
+	 * Reads the properties from the configuration file.
+	 */
+	@PostConstruct
+	public void readProperties() {
+
+		try (InputStream in = getPropertyConfiguration()) {
+			this.globalProperties.load(in);
+		} catch (IOException e) {
+			LOG.error(e.getMessage(), e);
+			throw new GlobalPropertyException(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * Producer method for global properties.
+	 * 
+	 * @param ip The injection point.
+	 * @return The global property value.
+	 * @throws GlobalPropertyException Thrown if the property is not set.
+	 */
+	@Produces
+	@GlobalProperty
+	public String getGlobalPropertyValue(InjectionPoint ip) throws GlobalPropertyException {
+		GlobalProperty property = ip.getAnnotated().getAnnotation(GlobalProperty.class);
+		String propertyName = property.value();
+		if (!globalProperties.containsKey(propertyName)) {
+			LOG.warn("global property with name '{}' not found!", propertyName);
+			return "";
+		}
+		return globalProperties.getProperty(propertyName);
+	}
+
+	/**
+	 * Producer method for a global property map.
+	 * 
+	 * @param ip The injection point.
+	 * @return A map with the global properties
+	 */
+	@Produces
+	@GlobalProperty
+	public Map<String, String> getGlobalPropertyMap(InjectionPoint ip) {
+		Map<String, String> map = new HashMap<>();
+		for (String key : globalProperties.stringPropertyNames()) {
+			map.put(key, globalProperties.getProperty(key));
+		}
+		return map;
+	}
+
+	private static InputStream getPropertyConfiguration() throws FileNotFoundException {
+		String configRoot = System.getProperty(PROPERTY_CONFIG_PATH, ".");
+		LOG.info("found system property {} with value {}", PROPERTY_CONFIG_PATH, configRoot);
+
+		File componentConfigFolder = new File(configRoot, COMPONENT_CONFIG_FOLDER);
+		if (!componentConfigFolder.exists() || !componentConfigFolder.isDirectory()) {
+			throw new GlobalPropertyException("property configuration folder  at '"
+					+ componentConfigFolder.getAbsolutePath() + "' does not exist! No properties available!");
+		}
+		File globalConfigFile = new File(componentConfigFolder, GLOBAL_PROPERTIES_FILENAME);
+		if (!globalConfigFile.exists()) {
+			throw new GlobalPropertyException("property configuration file for global properties at '"
+					+ globalConfigFile.getAbsolutePath() + "' does not exist! no global properties available");
+		}
+
+		LOG.info("loading global properties from file: {}", globalConfigFile);
+		return new FileInputStream(globalConfigFile);
+	}
+}
\ No newline at end of file
diff --git a/release_notes.md b/release_notes.md
new file mode 100644
index 0000000..f130a45
--- /dev/null
+++ b/release_notes.md
@@ -0,0 +1,587 @@
+# Release Notes - openMDM(R) Application #
+
+* [mdmbl Eclipse Project Page](https://projects.eclipse.org/projects/technology.mdmbl)
+* [mdmbl Eclipse Git Repositories](http://git.eclipse.org/c/?q=mdmbl)
+* [mdmbl nightly builds - last stable version](http://download.eclipse.org/mdmbl/nightly_master/?d)
+
+## Version 5.2.0M1
+
+New Features:
+* Upload/download file attachments to FileAttachables and context attributes
+* Show/edit context data based on MDM templates
+* ATFxAdapter supports model mapping via ExtSystem
+* XY-Chartviewer to view measurement data
+* Introduce user roles on the webclient
+
+### Breaking changes ###
+
+#### Changes to MDMRealm ####
+Up to version 5.1.0 all Users had to be assigned the group `MDM` to use openMDM.
+Since 5.2.0M1 users need one of the following groups: `Admin`, `DescriptiveDataAuthor`, `Guest`.
+See `org.eclipse.mdm.nuclues/readme.md#Configure LoginModule` for more information.
+
+#### Database schema changes ####
+In this release openMDM 5 database schema was extended. 
+If you have an existing installation make sure to apply the provided update script to your database.
+The script can be found in `schema/update/{DATABASE}/5.2.0M1_update.sql`.
+
+
+### API changes ###
+REST-API:
+* Tests, teststeps and measurements have new subresource files to upload, download, and delete files.
+* Teststep and measurement contexts have new subresource to upload, download, and delete files at component attributes.
+* New user resource to get information about the currently logged in user and its roles.
+
+org.eclipse.mdm.api.base:
+* New method: o.e.m.a.b.f.FileService#uploadSequential(Entity, Collection<FileLink>, ProgressListener)
+* New method: o.e.m.a.b.f.FileService#uploadParallel(Entity, Collection<FileLink>, ProgressListener)
+* New method: o.e.m.a.b.f.FileService#delete(Entity, Collection<FileLink>)
+* New method: o.e.m.a.b.f.FileService#delete(Entity, FileLink)
+* New method: o.e.m.a.b.f.FileLink#newLocal(InputStream, String, long, MimeType, String)
+* New method: o.e.m.a.b.m.FileLink#getLocalStream()
+* New method: o.e.m.a.b.m.FileLink#setLocalStream(InputStream)
+* Removed method: o.e.m.a.b.m.FileLink#getLocalPath()
+* Removed method: o.e.m.a.b.m.FileLink#setLocalPath(Path)
+
+org.eclipse.mdm.api.default
+* New method: o.e.m.a.d.m.EntityFactory#createExtSystem(String)
+* New method: o.e.m.a.d.m.EntityFactory#createExtSystemAttribute(String, ExtSystem)
+* New method: o.e.m.a.d.m.EntityFactory#createMDMAttribute(String, ExtSystemAttribute)
+* New method: o.e.m.a.d.m.createTestStepWithOutContextRoots(Test, TemplateTestStep, Classification)
+* New method: o.e.m.a.d.m.createTestStepWithOutContextRoots(Test, TemplateTestStep)
+* New method: o.e.m.a.d.m.createTestStepWithOutContextRoots(Test, Status, TemplateTestStep)
+* New entity: o.e.m.a.d.m.ExtSystem
+* New entity: o.e.m.a.d.m.ExtSystemAttribute
+* New entity: o.e.m.a.d.m.MDMAttribute
+* New entity: o.e.m.a.d.m.SystemParameter
+* New entity: o.e.m.a.d.m.UserParameter
+
+### Changes ###
+
+* [552399](https://bugs.eclipse.org/bugs/show_bug.cgi?id=552399) - Upload/download file attachments in webclient
+* [552400](https://bugs.eclipse.org/bugs/show_bug.cgi?id=552400) - Show/edit context data based on MDM templates
+* [552401](https://bugs.eclipse.org/bugs/show_bug.cgi?id=552401) - Model mapping in atfxadapter with ExtSystem
+* [552402](https://bugs.eclipse.org/bugs/show_bug.cgi?id=552402) - Simple XY-Chartviewer
+* [552403](https://bugs.eclipse.org/bugs/show_bug.cgi?id=552403) - Introduce user roles on the webclient
+* [562384](https://bugs.eclipse.org/bugs/show_bug.cgi?id=562384) - Freetextindexer should only index once in clustered deployments
+
+## Version 5.1.0 ##
+
+### Bugzilla Bugs fixed ###
+
+* [561163](https://bugs.eclipse.org/bugs/show_bug.cgi?id=561163) - Possible NPE in OdsEntityManager#loadTemplate()
+* [553867](https://bugs.eclipse.org/bugs/show_bug.cgi?id=553867) - Upload shopping basket should use xml format
+* [553699](https://bugs.eclipse.org/bugs/show_bug.cgi?id=553699) - Provide a user friendly error message if unsupported business objects are exported to atfx.
+* [560003](https://bugs.eclipse.org/bugs/show_bug.cgi?id=560003) - Relations in Response not shown correctly
+
+## Version 5.1.0RC1 ##
+
+New Features:
+* Support for Elasticsearch Version 7 or later
+
+### Changes ###
+
+* [520297](https://bugs.eclipse.org/bugs/show_bug.cgi?id=520297) - Fulltextsearch should support Elastic Search Version 7
+
+## Version 5.1.0M8, 2020/02/03 ##
+
+New Features:
+* Add Quantity and Unit in Detail-View in WebClient
+* Support for Status using Classification
+
+### API changes ###
+
+* REST-API has a new endpoints ProjectDomain, Status and Classification
+* Responses now contain relation information in property "relation"
+* New method: o.e.m.a.d.EntityManager#loadTemplate(Test)
+* New method: o.e.m.a.d.EntityManager#loadTemplate(TestStep)
+* New method: o.e.m.a.d.m.EntityFactory#createClassification(Domain, ProjectDomain, Status)
+* New method: o.e.m.a.d.m.EntityFactory#createTest(String, Pool, TemplateTest, Classification, boolean)
+* New method: o.e.m.a.d.m.EnttiyFactory#createTestStep(Test, TemplateTestStep, Classification)
+* New method: o.e.m.a.d.m.EnttiyFactory#createTestStep(String, Test, Classification)
+* New method: o.e.m.a.d.m.EntityFactory#createTestStep(String, Test, TemplateTestStep, Classification)
+* Renamed classes in org.eclipse.mdm.nucleus.api.copy
+* New method: o.e.m.a.b.q.Query#limit(int limit)
+
+### Changes ###
+
+* [553266](https://bugs.eclipse.org/bugs/show_bug.cgi?id=553266) - Contributions of Peak Solution (2019/11)
+* [546639](https://bugs.eclipse.org/bugs/show_bug.cgi?id=546639) - Use openMDM 5 API to create Classifications
+* [552484](https://bugs.eclipse.org/bugs/show_bug.cgi?id=552484) - Add parameter to specify the hostname in addition to the interface name for CORBAFileServer
+* [552505](https://bugs.eclipse.org/bugs/show_bug.cgi?id=552505) - Webclient: All URLs routed by Angular have to fallback to index.html
+* [553162](https://bugs.eclipse.org/bugs/show_bug.cgi?id=553162) - Webclient: Add Quantity and Unit to DetailView
+* [553163](https://bugs.eclipse.org/bugs/show_bug.cgi?id=553163) - Implement a session check / reconnect for Freetextindexer
+* [553164](https://bugs.eclipse.org/bugs/show_bug.cgi?id=553164) - Improve template resolving in apicopy
+* [550002](https://bugs.eclipse.org/bugs/show_bug.cgi?id=550002) - Add relation information to REST-API
+* [549844](https://bugs.eclipse.org/bugs/show_bug.cgi?id=549844) - [REST] Add unit info on /channels response
+* [544850](https://bugs.eclipse.org/bugs/show_bug.cgi?id=544850) - Allow to limit number of search results
+
+### Bugzilla Bugs fixed ###
+
+* [553369](https://bugs.eclipse.org/bugs/show_bug.cgi?id=553369) - ATFX Import fails if multiple version of a Quantity exist 
+* [559366](https://bugs.eclipse.org/bugs/show_bug.cgi?id=559366) - [REST] Swagger Codegen leads to an error when using the provided openAPI files
+* [553266](https://bugs.eclipse.org/bugs/show_bug.cgi?id=553266)) - Contributions of Peak Solution (2019/11)
+  - ATFX export now correctly includes Context Data
+  - Fixed EntityService#satisfiesParameters
+  - Fixed memory leak when explicitly closing an context in ConnectorService
+  - Fixed: MeaQuantity name is set to DefMQName instead actual value on import/export
+  - Do not log ServiceConfiguration on connection failure.
+  - Remove odsadapter dependency from apicopy
+  - Fixed shopping basket context menu
+
+## Version 5.1.0M7, 2019/11/08 ##
+
+New Features:
+* Support for reading and writing measurement data.
+* Support for reading preview measurement values.
+* Measurement data can be transferred as Protocol Buffers or JSON
+
+### API changes ###
+
+* REST-API has a new endpoints read (/mdm/environments/{SOURCENAME}/values/read) and write (/mdm/environments/{SOURCENAME}/values/write) measurement values.
+* REST-API has a new endpoint to request preview values (/mdm/environments/{SOURCENAME}/values/preview)
+* o.e.m.a.b.m.ReadRequestBuilder now additionally has methods ReadRequestBuilder.values(int requestSize) and ReadRequestBuilder.values(int startIndex, int requestSize) as terminal operations.
+
+### Changes ###
+
+* [548162](https://bugs.eclipse.org/bugs/show_bug.cgi?id=548162) - Add support for reading/writing measurement data over REST API
+
+### Bugzilla Bugs fixed ###
+
+* [547141](https://bugs.eclipse.org/bugs/show_bug.cgi?id=547141) - ReadRequestBuilder does not allow to create ReadRequests with startIndex or requestSize != 0
+* [547115](https://bugs.eclipse.org/bugs/show_bug.cgi?id=547115) - ClassCastException in ReadRequestHandler#getODSColumns
+
+## Version 5.1.0M6, 2019/10/18 ##
+
+New Features:
+* Generate a openAPI definition file of the openMDM REST-API at build time.
+* Integrated Swagger UI into deployment for visualizing the API.
+
+
+### API changes ###
+
+* no
+
+### Changes ###
+
+* [537293](https://bugs.eclipse.org/bugs/show_bug.cgi?id=537293) - Use swagger for rest api docu
+
+### Bugzilla Bugs fixed ###
+
+* [552188](https://bugs.eclipse.org/bugs/show_bug.cgi?id=552188) - Context menu in shopping basket is not displayed correctly
+* [551950](https://bugs.eclipse.org/bugs/show_bug.cgi?id=551950) - FreeTextIndexer cannot be deactivated
+
+## Version 5.1.0M5, 2019/08/27 ##
+
+New Features:
+* Support for reading FILE_LINK and FILE_LINK_SEQUENCE with REST-API
+
+
+### API changes ###
+
+* Added REST endpoints test/files/{remotePath}, teststep/files/{remotePath} and measurement/files/{remotePath}
+* Attributes with datatype `FILE_LINK`/`FILE_LINK_SEQUENCE` will return JSON objects with properties `remotePath`, `mimeType` and `description` as value.
+
+### Changes ###
+
+* [546774](https://bugs.eclipse.org/bugs/show_bug.cgi?id=546774) - Add support for reading FILE_LINK_SEQUENCE attributes
+
+### Bugzilla Bugs fixed ###
+
+-
+
+## Version 5.1.0M4, 2019/08/09 ##
+
+New Features:
+ * Eclipse Glassfish 5 Support
+
+
+### API changes ###
+
+* no
+
+### Changes ###
+
+*  [548241](https://bugs.eclipse.org/bugs/show_bug.cgi?id=548241) - Test nucleus with Eclipse Glassfish 5.1
+
+### Bugzilla Bugs fixed ###
+
+* [548347](https://bugs.eclipse.org/bugs/show_bug.cgi?id=548347) - Advanced search with date attribute fails if time portion is omitted in input field
+* [547115](https://bugs.eclipse.org/bugs/show_bug.cgi?id=547115) - ClassCastException in ReadRequestHandler#getODSColumns
+
+## Version 5.1.0M3, 2019/04/23 ##
+
+New Features:
+ * Angular 7 support, updated from Angular 2
+ * I18N support for web frontend, languages available: English, German.
+    * For adding a new language see: org.eclipse.mdm.nucleus/org.eclipse.mdm.application/src/main/webapp/README_I18N.md
+    * Files with translations: org.eclipse.mdm.nucleus/org.eclipse.mdm.application/src/main/webapp/src/assets/i18n/\*.json    
+
+
+### API changes ###
+
+* no
+
+### Changes ###
+
+*  [544530](https://bugs.eclipse.org/bugs/show_bug.cgi?id=544530) - Angular 7 Upgrade and I18N for Webfrontend
+
+### Bugzilla Bugs fixed ###
+
+* [544621](https://bugs.eclipse.org/bugs/show_bug.cgi?id=544621) - Mixed line endings (LF and CRLF) and other formatting issues
+* [545400](https://bugs.eclipse.org/bugs/show_bug.cgi?id=545400) - Apostroph ' (%27) in urls with filter parameters is blocked by proxy servers
+* [545591](https://bugs.eclipse.org/bugs/show_bug.cgi?id=545591) - OdsSearchService creates invalid ODS Query
+* [544562](https://bugs.eclipse.org/bugs/show_bug.cgi?id=544562) - Nucleus - navigator: Dropdown menu sources
+* [543525](https://bugs.eclipse.org/bugs/show_bug.cgi?id=543525) - Dependency Cleanup
+
+
+## Version 5.1.0M2, 2019/02/28 ##
+
+New Features:
+ * Read root configuration directory from system property ("org.eclipse.mdm.configPath")
+ * ATFX import/export
+ * Support added for the Entity Role in the openMDM 5 Java API: load and persist the many-to-many relation between User and Role.
+ * The business objects Project, Pool, Test, Teststep, Measurement are editable via the REST API. It is possible create, update and delete the listed business objects. Furthermore it is possible to edit the context data for Teststep and Measurement. CRUD operations for measured data are not part of this ticket.
+ * Property lookups for parameters values in service.xml: The service.xml contains all information necessary for the Connector-Service to connect to the available datasources/adapter instances. Since this information includes secret information like passwords, it is possible to provide lookups, which gives you the possibility to specify tokens as references to properties defined elsewhere.
+
+### API changes ###
+
+* All Repos: added Source Jar to build
+* o.e.m.api.base (impl): TestStep#loadContexts returns cached values if present
+* o.e.m.api.base (impl): Added IndependentBuilder#independent(boolean)
+* o.e.m.api.base (impl): Added ReadRequest#getValuesMode()/setValuesMode(ValuesMode)
+* o.e.m.api.base (impl): Added ReadRequestBuilder#valuesMode(ValuesMode)
+* o.e.m.api.base (impl): Added WriteRequest#setIndependent(boolean)
+* o.e.m.api.base (impl): Extended MeasuredValues with SequenceRepresentation, Generation Parameters, Independent Flag and AxisType
+* o.e.m.api.base (API): Added Parameters to ScalarType#createmeasuredValues()
+* o.e.m.api.default (impl): EntityFactory#createTestStep(Test, TemplateTestStep) is now public
+* o.e.m.api.default (impl): Added EntityFactory#createTest(String, Pool)
+* o.e.m.api.odsadapter: Added possibility to provide EntityConfigRepository OdsModelManager
+* o.e.m.api.odsadapter: Added SequenceRepresentation etc. for LocalColumns
+* o.e.m.api.default (impl): EntityFactory#createContextRoot(List<Measurement>, TemplateRoot)
+* o.e.m.api.base: added o.e.m.a.b.BaseEntityManager.loadRelatedEntities
+* o.e.m.api.base: added o.e.m.a.b.a.Core.getNtoMStore
+* org.eclipse.mdm.api.default: added o.e.m.a.d.m.EntityFactory.createRole
+* org.eclipse.mdm.api.default:added Entity o.e.m.a.d.m.Role
+
+### Changes ###
+
+* [540179](https://bugs.eclipse.org/bugs/show_bug.cgi?id=540179) - [[REQU-111]](https://openmdm.atlassian.net/browse/REQU-111) - Read root configuration directory from system property
+* [540180](https://bugs.eclipse.org/bugs/show_bug.cgi?id=540180) -[[REQU-112]](https://openmdm.atlassian.net/browse/REQU-112) - ATFX import/export
+* [545014](https://bugs.eclipse.org/bugs/show_bug.cgi?id=545014) - [[REQU-117]](https://openmdm.atlassian.net/browse/REQU-117) - CRUD operations for main business objects
+* [542769](https://bugs.eclipse.org/bugs/show_bug.cgi?id=542769) -[[REQU-116]](https://openmdm.atlassian.net/browse/REQU-116) -  Entity Role
+*  [544526](https://bugs.eclipse.org/bugs/show_bug.cgi?id=544526) - Property lookups for parameters values in service.xml
+
+### Bugzilla Bugs fixed ###
+
+*  [543675](https://bugs.eclipse.org/bugs/show_bug.cgi?id=543675) - ODSContextFactory leaks ORB instances
+* [543440](https://bugs.eclipse.org/bugs/show_bug.cgi?id=543440) - Configuration: Nodeprovider
+
+## Milestone 5.1.0M1, 2019/01/11 ##
+
+### Changes ###
+
+ * Support for Status was extended such that it can be attached to a Measurement / TestStep / Test class. Additional entities ProjectDomain Domain and Classification were added to the org.eclipse.mdm.api.default module
+ * New system property "org.eclipse.mdm.api.odsadapter.filetransfer.interfaceName" to set a specific network interface name to be used
+
+
+### Bugzilla Bugs fixed ###
+
+ * [540889](https://bugs.eclipse.org/bugs/show_bug.cgi?id=540889)	- Contribution for 5.1.0M1 bug/feature collection
+ * [529729](https://bugs.eclipse.org/bugs/show_bug.cgi?id=529729) - Status and MDMTag cannot be set on a test/testStep
+ * [539983](https://bugs.eclipse.org/bugs/show_bug.cgi?id=539983) -	Corba File Server does not work on windows because of a path format problem
+ * [539984](https://bugs.eclipse.org/bugs/show_bug.cgi?id=539984) -	Corba File Server always uses the first network interface
+ * [541606](https://bugs.eclipse.org/bugs/show_bug.cgi?id=541606) - InstallationGuide improvements
+ * [542519](https://bugs.eclipse.org/bugs/show_bug.cgi?id=542519) - 	Nullpointer exception in InsertStatement
+ * [542658](https://bugs.eclipse.org/bugs/show_bug.cgi?id=542658)	-	Nucleus markdown file - error in json "specifications"
+ * [542656](https://bugs.eclipse.org/bugs/show_bug.cgi?id=542656)	-	Nucleus markdown file - wrong documentation of valuelist values interface
+ * [542094](https://bugs.eclipse.org/bugs/show_bug.cgi?id=542094) - NotificationManager throws IllegalArgumentException: Incompatible value type
+
+## Release 5.0.0, 2018/11/07 ##
+
+[Release Review and Graduation Review](https://projects.eclipse.org/projects/technology.mdmbl/releases/5.0.0) of the mdmbl Eclipse project succeeded.
+
+
+## Version 5.0.0M5, 2018/10/30 ##
+
+### Changes ###
+
+ * License switch from Eclipse Public License 1.0 to Eclipse Public License 2.0.
+
+### Bugzilla Bugs fixed ###
+
+ * [540226](https://bugs.eclipse.org/bugs/show_bug.cgi?id=540226)   -  Failed EJB lookup if using catcomps endpoint
+ * [539716](https://bugs.eclipse.org/bugs/show_bug.cgi?id=539716)   -  License switch EPL-1.0 to EPL-2.0
+
+
+## Version 5.0.0M4, 2018/09/26 ##
+
+This code brings along a change with the realm configuration. You can configure your realm now in a standardized way.  In the [readme.md](http://git.eclipse.org/c/mdmbl/org.eclipse.mdm.nucleus.git/tree/README.md) in the org.eclipse.mdm.nucleus project is described how to setup and configure a file realm for local installations. You can also configure your LDAP, AD or others.
+See the [glassfish documentation](https://javaee.github.io/glassfish/doc/4.0/security-guide.pdf)
+
+Note: The component "org.eclipse.mdm.realms" is not used any longer.
+
+### Changes ###
+
+* [526883](https://bugs.eclipse.org/bugs/show_bug.cgi?id=526883) - [[REQU-109]](https://openmdm.atlassian.net/browse/REQU-101) - Integrate external distribution "Authentification and Authorization"
+
+
+### Bugzilla Bugs fixed ###
+
+ * [535381](https://bugs.eclipse.org/bugs/show_bug.cgi?id=535381)   -       Delegated roles and rights with backend connectors
+
+## Version 5.0.0M3, 2018/09/10 ##
+
+In this milestone new REST APIs were added for editing MDM business objects.
+The list of all REST APIs see the [readme.md](http://git.eclipse.org/c/mdmbl/org.eclipse.mdm.nucleus.git/tree/README.md) in the org.eclipse.mdm.nucleus project.
+
+### API changes ###
+
+* no
+
+### Changes ###
+
+* [526883](https://bugs.eclipse.org/bugs/show_bug.cgi?id=526883) - [[REQU-101]](https://openmdm.atlassian.net/browse/REQU-101) - The MDM business objects should be editable via openMDM5 RESTful API (CRUD operations)
+* [REQU-102](https://openmdm.atlassian.net/browse/REQU-102) - Deploy data model via RESTful API
+* [REQU-110](https://openmdm.atlassian.net/browse/REQU-110) - Integrate external distribtion "CRUD Operations for administrative objects"
+
+### Bugzilla Bugs fixed ###
+
+* no
+
+## Version 5.0.0M2, 2018/07/23 ##
+
+### API changes ###
+
+ * no
+
+### Changes ###
+
+* [REQU-108](https://openmdm.atlassian.net/browse/REQU-108) - Bug Fixes and enhancements
+
+### Bugzilla Bugs fixed ###
+
+  * [534866](https://bugs.eclipse.org/bugs/show_bug.cgi?id=534866)	- Results incorrect if attribute search is combined with full text search yielding no results
+  * [535606](https://bugs.eclipse.org/bugs/show_bug.cgi?id=535606)	- Attribute search is not case insensitive
+  * [536840](https://bugs.eclipse.org/bugs/show_bug.cgi?id=536840)	- Avoid function calls from html template for translation
+  * [530512](https://bugs.eclipse.org/bugs/show_bug.cgi?id=530512)	- Missing Information after change tabs
+  * [526163](https://bugs.eclipse.org/bugs/show_bug.cgi?id=526163)	- Resolve unmet dependency error cause by ng2-dropdown-multiselect
+  * [532425](https://bugs.eclipse.org/bugs/show_bug.cgi?id=532425)	- Update and rename ng2-bootstrap to ngx-bootstrap
+  * [536229](https://bugs.eclipse.org/bugs/show_bug.cgi?id=536229)	- Provide a readable error message, if preference service throws an error
+
+
+
+
+## Version 5.0.0M1, 2018/05/18 ##
+
+Note: the system of version numbers has changed!
+
+### API changes ###
+
+ * no
+
+### Changes ###
+
+* [REQU-106](https://openmdm.atlassian.net/browse/REQU-106) - Provide legal documentation, IP Checks, end user content
+* [REQU-107](https://openmdm.atlassian.net/browse/REQU-107) - Notification Service Implementation vis OMG Specs
+
+### Bugzilla Bugs fixed ###
+
+* [528033](https://bugs.eclipse.org/bugs/show_bug.cgi?id=528033)	- Web client does not quote entity IDs in filter strings
+* [532154](https://bugs.eclipse.org/bugs/show_bug.cgi?id=532154)	- Update libraries for IP check
+* [532167](https://bugs.eclipse.org/bugs/show_bug.cgi?id=532167)	- logging
+* [532343](https://bugs.eclipse.org/bugs/show_bug.cgi?id=532343)	- Configure Logging
+* [532165](https://bugs.eclipse.org/bugs/show_bug.cgi?id=532165)	- Java lib
+* [532170](https://bugs.eclipse.org/bugs/show_bug.cgi?id=532170)	- freetext.notificationType
+* [534643](https://bugs.eclipse.org/bugs/show_bug.cgi?id=534643)	- search-datepicker does not recognize model changes via input textbox
+
+## Version V0.10, 2018/02/23 ##
+
+### API changes ###
+
+ * [529569](https://bugs.eclipse.org/bugs/show_bug.cgi?id=529569) - [[REQU-103]](https://openmdm.atlassian.net/browse/REQU-103) - Using Shopping Basket (Search results)
+
+#####  An overview of the API changes made :
+
+* Shopping basket:
+  - Added methods:
+    - String org.eclipse.mdm.api.base.BaseApplicationContext.getAdapterType()
+    - Map<Entity, String> org.eclipse.mdm.api.base.BaseEntityManager.getLinks(Collection<Entity>)
+  - file extensions:
+When downloading the contents of a shopping basket, a file with extension `mdm` is generated. The file extension can be changed by adding a preference with key `shoppingbasket.fileextensions`. For example the used extension can be set to `mdm-xml` by setting the value to `{ "default": "mdm-xml" }`.
+
+### Changes ###
+
+### Bugzilla Bugs fixed ###
+
+* [521880](https://bugs.eclipse.org/bugs/show_bug.cgi?id=521880)	- Component with empty FileLink can not be updated
+* [526124](https://bugs.eclipse.org/bugs/show_bug.cgi?id=526124)	- OpenMDM web (nucleus) broken as of 10-16-2017 because of version ranges/tracking versions
+* [528261](https://bugs.eclipse.org/bugs/show_bug.cgi?id=528261)	- ODS EntityConfigRepository.find(EntityType) should throw IllegalArgumentException if requested entity type is not found	2018-01-11
+* [525848](https://bugs.eclipse.org/bugs/show_bug.cgi?id=525848)	- ODSConverter cannot parse 17 character dates
+* [529568](https://bugs.eclipse.org/bugs/show_bug.cgi?id=529568)	- Junit Tests have to run stand alone
+* [525980](https://bugs.eclipse.org/bugs/show_bug.cgi?id=525980)	- Remove version range in org.eclipse.mdm.api.base/build.gradle
+* [529629](https://bugs.eclipse.org/bugs/show_bug.cgi?id=529629)	- Query group and aggregate function are not working as expected
+* [526141](https://bugs.eclipse.org/bugs/show_bug.cgi?id=526141)	- Remove version range in org.eclipse.mdm.api.odsadapter/build.gradle
+* [529867](https://bugs.eclipse.org/bugs/show_bug.cgi?id=529867)	- Jenkins builds fail since 12.01.17
+* [526147](https://bugs.eclipse.org/bugs/show_bug.cgi?id=526147)	- wrong logic in org.eclipse.mdm.api.default/src/main/java/org/eclipse/mdm/api/dflt/model/EntityFactory
+* [529887](https://bugs.eclipse.org/bugs/show_bug.cgi?id=529887)	- FileUpload throws java.net.UnknownHostException
+* [526260](https://bugs.eclipse.org/bugs/show_bug.cgi?id=526260)	- Writing enumeration values
+* [530511](https://bugs.eclipse.org/bugs/show_bug.cgi?id=530511)	- Missing progress bar
+* [526763](https://bugs.eclipse.org/bugs/show_bug.cgi?id=526763)	- Issues in dynamic enumeration handling
+* [530775](https://bugs.eclipse.org/bugs/show_bug.cgi?id=530775)	- ODS adapter: getParameters exposes sensitive information
+* [527673](https://bugs.eclipse.org/bugs/show_bug.cgi?id=527673)	- ValueType.UNKNOWN.createValue() throws NPE due to ValueType.type not being set
+* [530791](https://bugs.eclipse.org/bugs/show_bug.cgi?id=530791)	- UpdateStatement is broken
+* [528149](https://bugs.eclipse.org/bugs/show_bug.cgi?id=528149)	- Search tab in web UI should accept attribute values even if no suggestions are present
+* [528193](https://bugs.eclipse.org/bugs/show_bug.cgi?id=528193)	- Autocomplete text box in search UI should accept custom values automatically
+* [528260](https://bugs.eclipse.org/bugs/show_bug.cgi?id=528260)	- ValueType.UNKNOWN should have Object rather than Void as representation type
+
+
+
+## Version V0.9, 2017/11/24 ##
+
+### API changes ###
+
+* [525536](https://bugs.eclipse.org/bugs/show_bug.cgi?id=525536) - [[REQU-50]](https://openmdm.atlassian.net/browse/REQU-50) - Modelling of relations
+* [526880](https://bugs.eclipse.org/bugs/show_bug.cgi?id=526880) -  [[REQU-65]](https://openmdm.atlassian.net/browse/REQU-65) Separation of interfaces
+* [526882](https://bugs.eclipse.org/bugs/show_bug.cgi?id=526882) -  [[REQU-78]](https://openmdm.atlassian.net/browse/REQU-78) Packaging
+* [522277](https://bugs.eclipse.org/bugs/show_bug.cgi?id=522277) -  [[REQU-80]](https://openmdm.atlassian.net/browse/REQU-80) Referencing
+
+#####  An overview of the API changes made :
+
+* service.xml:
+ - Property `entityManagerFactoryClass` has to be changed to `org.eclipse.mdm.api.odsadapter.ODSContextFactory` for ODS Datasources.
+ - Datasource specific parameters for `NotificationService` and the freetext search parameters are now supplied by service.xml not by global.properties.
+
+
+* org.eclipse.mdm.api.base:
+ - New entry class `BaseApplicationContextFactory` instead of `BaseEntityManagerFactory`.
+ - Services can now be retrieved from `BaseApplicationContext` instead of `BaseEntityManager`.
+ - `NotificationManagerFactory` was removed; `NotficationManager` was renamed to `NotificationService`.
+ - Query package was split into query and search.
+ - Creation of Query (`ModelManager#createQuery()`) was moved from `ModelManager` to new `QueryService` class.
+ - Moved `ModelManager`, `EntityType`, `Core` and similar to subpackage `adapter`
+ - `EntityStore` and `ChildrenStore` are now top-level classes in the subpackage `adapter`
+ - Moved `FileService` to subpackage file
+ - Added methods:
+   - `ContextComponent#getContextRoot()`
+   - `ContextSensor#getContextComponent()`
+  - Introduced new (protected) method `BaseEntityFactory.createBaseEntity(Class, Core)` for creating instances of classes derived from `BaseEntity` using an already existing `Core` instance. Must be overridden in derived classes to ensure the instances can be created via the (usually package-private) Constructor(Core) of the BaseEntity-derived class. If the constructor of the class passed to `createBaseEntity`  is not accessible, the super class implementation is called to try if the constructor is accessible from there.
+  - Introduced new (protected) method `BaseEntityFactory.getCore(BaseEntity)` to extract the Core object from a BaseEntity instance.
+  - Modified the interface of BaseEntityManager: the get*Store methods have been defined as non final.
+  With that, these methods can be overriden in the OdsAdpter and be used there to access the stores without resorting directly to the core.
+  There also comments added in several places to improve the understandibility of the current implementation.
+
+
+* org.eclipse.mdm.api.default:
+ - Introduced `ApplicationContextFactory` and `ApplicationContext` which extend their base counterparts. Should be unnecessary when merging api.base and api.default repositories.
+
+
+* org.eclipse.mdm.api.odsadapter:
+ - Adapted to the changes from `api.base` and `api.default`
+
+
+* org.eclipse.mdm.nucleus:
+ - Adapted to the changes from `api.base` and `api.default`
+ - `ConnectorService` manages `ApplicationContexts` instead of `EntityManagers`
+ - Datasource specific parameters for `NotificationService` are now supplied by service.xml not by global.properties.
+
+
+### Changes ###
+
+* [522278](https://bugs.eclipse.org/bugs/show_bug.cgi?id=522278) -  [[REQU-98]](https://openmdm.atlassian.net/browse/REQU-98) Search Parameter Parser
+* [526881](https://bugs.eclipse.org/bugs/show_bug.cgi?id=526881) -  [[REQU-75]](https://openmdm.atlassian.net/browse/REQU-75) Specifications
+
+### Bugzilla Bugs fixed ###
+
+* [521880](https://bugs.eclipse.org/bugs/show_bug.cgi?id=521880) -  Component with empty FileLink can not be updatet
+* [526124](https://bugs.eclipse.org/bugs/show_bug.cgi?id=526124) -  OpenMDM web (nucleus) broken as of 10-16-2017 because of version ranges/t
+* [526763](https://bugs.eclipse.org/bugs/show_bug.cgi?id=526763) -  Issues in dynamic enumeration handling
+* [525980](https://bugs.eclipse.org/bugs/show_bug.cgi?id=525980) -  Remove version range in org.eclipse.mdm.api.base/build.gradle
+* [526260](https://bugs.eclipse.org/bugs/show_bug.cgi?id=526260) -  Writing enumeration values
+* [526141](https://bugs.eclipse.org/bugs/show_bug.cgi?id=526141) -  Remove version range in org.eclipse.mdm.api.odsadapter/build.gradle
+* [525848](https://bugs.eclipse.org/bugs/show_bug.cgi?id=525848) -  ODSConverter cannot parse 17 character dates
+* [526147](https://bugs.eclipse.org/bugs/show_bug.cgi?id=526147) -  wrong logic in org.eclipse.mdm.api.default/.../EntityFactory
+
+## Version V0.8, 2017/09/08 ##
+
+### API changes ###
+
+  * [REQU-62](https://openmdm.atlassian.net/browse/REQU-62) - Polyvalant variants
+  * [REQU-49](https://openmdm.atlassian.net/browse/REQU-49) - Extensibility of Entity Classes
+  * [REQU-79](https://openmdm.atlassian.net/browse/REQU-79) - Consistent relationships
+  * [REQU-97](https://openmdm.atlassian.net/browse/REQU-97) - Change handling of enumerations
+
+### Changes ###
+
+* [REQU-73](https://openmdm.atlassian.net/browse/REQU-73) - Representation class
+* [REQU-74](https://openmdm.atlassian.net/browse/REQU-74) - Empty Interface
+* [REQU-77](https://openmdm.atlassian.net/browse/REQU-77) - Name convention
+* [REQU-82](https://openmdm.atlassian.net/browse/REQU-82) - Return-Type
+* [REQU-91](https://openmdm.atlassian.net/browse/REQU-91) - Context Information
+
+### Bugzilla Bugs fixed ###
+
+* [520291](https://bugs.eclipse.org/bugs/show_bug.cgi?id=520291) - 	Elastic Search :: ElasticSearch answered 400, error while performing some search
+* [521011](https://bugs.eclipse.org/bugs/show_bug.cgi?id=521011) - 	EntityFactory.createContextSensor always throws an exception
+* [520330](https://bugs.eclipse.org/bugs/show_bug.cgi?id=520330) - 	Improve development setup in Eclipse
+* [518063](https://bugs.eclipse.org/bugs/show_bug.cgi?id=518063) - 	Nucleus: config-dir is missing in the build artefact mdm-web.zip
+* [518124](https://bugs.eclipse.org/bugs/show_bug.cgi?id=518124) - 	Configure JIPP and Sonar for mdmbl projects
+* [518444](https://bugs.eclipse.org/bugs/show_bug.cgi?id=518444) - 	Unify used gradle versions and update to latest stable
+* [518825](https://bugs.eclipse.org/bugs/show_bug.cgi?id=518825) - 	Nucleus build: create a separate gradle task for npm build
+* [519212](https://bugs.eclipse.org/bugs/show_bug.cgi?id=519212) - 	Enable production mode for client build
+* [519993](https://bugs.eclipse.org/bugs/show_bug.cgi?id=519993) - 	Create Gradle composite build
+* [519453](https://bugs.eclipse.org/bugs/show_bug.cgi?id=519453) - 	org.eclipse.mdm.openatfx build can't download dependency
+* [519995](https://bugs.eclipse.org/bugs/show_bug.cgi?id=519995) - 	Setup Guide and avalon
+* [520248](https://bugs.eclipse.org/bugs/show_bug.cgi?id=520248) - 	Build of org.eclipse.mdm.api.odsadapter only works with "gradle clean install"
+* [517057](https://bugs.eclipse.org/bugs/show_bug.cgi?id=517057) - 	Add Repository Descriptions
+
+
+
+## Version V0.7, 2017/07/21 ##
+
+### API changes ###
+  * [REQU-48](https://openmdm.atlassian.net/browse/REQU-48) - Type of Entity-IDs
+
+
+### Changes ###
+* [REQU-67](https://openmdm.atlassian.net/browse/REQU-67) - Final
+* [REQU-92](https://openmdm.atlassian.net/browse/REQU-92) - Error Handling
+
+### Bugzilla Bugs fixed ###
+* [519448](https://bugs.eclipse.org/bugs/show_bug.cgi?id=519448) - Build of of freetextindexer in org.eclipse.mdm.nucleus fails
+* [518062](https://bugs.eclipse.org/bugs/show_bug.cgi?id=518062) - ODSAdapter: Encoding issue when switching to UTF-8
+* [518060](https://bugs.eclipse.org/bugs/show_bug.cgi?id=518060) - ODSAdapter - junit tests fail
+* [515748](https://bugs.eclipse.org/bugs/show_bug.cgi?id=515748) - Unable to build org.eclipse.mdm.nucleus
+* [518335](https://bugs.eclipse.org/bugs/show_bug.cgi?id=518335) - Set executable flag for gradlew in git repo
+
+
+## Version V0.6, 2017/06/07
+### Changes ###
+
+  * [REQU-2](https://openmdm.atlassian.net/browse/REQU-2) - Display a tree view for navigation
+  * [REQU-3](https://openmdm.atlassian.net/browse/REQU-3) - Display icons in the tree view
+  * [REQU-4](https://openmdm.atlassian.net/browse/REQU-4) - Display different ODS data sources in the tree view
+  * [REQU-5](https://openmdm.atlassian.net/browse/REQU-5) - Expand serveral nodes of the tree view simultaneously    
+  * [REQU-6](https://openmdm.atlassian.net/browse/REQU-6) - Display a scroll bar in the tree vie
+  * [REQU-7](https://openmdm.atlassian.net/browse/REQU-7) - Web Client GUI Adjustment
+  * [REQU-9](https://openmdm.atlassian.net/browse/REQU-9) - Display tabs on Detail view
+  * [REQU-10](https://openmdm.atlassian.net/browse/REQU-10) - Update Detail View
+  * [REQU-12](https://openmdm.atlassian.net/browse/REQU-12) - Select data source for attribute-based search
+  * [REQU-13](https://openmdm.atlassian.net/browse/REQU-13) - Definition or selection of a search query
+  * [REQU-14](https://openmdm.atlassian.net/browse/REQU-14) - Limit search to a certain result type
+  * [REQU-15](https://openmdm.atlassian.net/browse/REQU-15) - Display attributes of the selected data source(s)
+  * [REQU-16](https://openmdm.atlassian.net/browse/REQU-16) - Set search attribute values
+  * [REQU-18](https://openmdm.atlassian.net/browse/REQU-18) - Select data source for fulltext search
+  * [REQU-22](https://openmdm.atlassian.net/browse/REQU-22) - Create and store a view for search results
+  * [REQU-23](https://openmdm.atlassian.net/browse/REQU-23) - Select a view to display search results
+  * [REQU-24](https://openmdm.atlassian.net/browse/REQU-24) - Filter fulltext search results
+  * [REQU-25](https://openmdm.atlassian.net/browse/REQU-25) - Display actions for search results
+  * [REQU-27](https://openmdm.atlassian.net/browse/REQU-27) - Select data objects for shoppping basket
+  * [REQU-28](https://openmdm.atlassian.net/browse/REQU-28) - Store a shopping basket
+  * [REQU-29](https://openmdm.atlassian.net/browse/REQU-29) - Select a shopping basket
+  * [REQU-30](https://openmdm.atlassian.net/browse/REQU-30) - Export shopping basket
+  * [REQU-31](https://openmdm.atlassian.net/browse/REQU-31) - Load an exported shopping basket
+  * [REQU-32](https://openmdm.atlassian.net/browse/REQU-32) - Display actions for shopping basket
+  * [REQU-85](https://openmdm.atlassian.net/browse/REQU-85) - Seach type date
+  * [REQU-86](https://openmdm.atlassian.net/browse/REQU-86) - Search across multiple data sources
+  * [REQU-95](https://openmdm.atlassian.net/browse/REQU-95) - Backend configuration
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..71e1bab
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,38 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+
+rootProject.name = 'org.eclipse.mdm.nucleus'
+
+def includeIfExists(String projectPath) {
+    if (file(projectPath).exists()) {
+        includeBuild projectPath
+    }
+}
+
+includeIfExists '../org.eclipse.mdm.api.base'
+includeIfExists '../org.eclipse.mdm.api.default'
+includeIfExists '../org.eclipse.mdm.api.odsadapter'
+
+include 'org.eclipse.mdm.openatfx'
+include 'org.eclipse.mdm.api.atfxadapter'
+include 'org.eclipse.mdm.application'
+include 'org.eclipse.mdm.connector'
+include 'org.eclipse.mdm.apicopy'
+include 'org.eclipse.mdm.businessobjects'
+include 'org.eclipse.mdm.filerelease'
+include 'org.eclipse.mdm.property'
+include 'org.eclipse.mdm.freetextindexer'
+include 'org.eclipse.mdm.preferences'
+
diff --git a/src/main/openapi/openApiFile.json b/src/main/openapi/openApiFile.json
new file mode 100644
index 0000000..6fe3c2d
--- /dev/null
+++ b/src/main/openapi/openApiFile.json
@@ -0,0 +1,24 @@
+{
+  "openapi" : "3.0.1",
+  "info" : {
+    "version" : "@VERSION@",
+    "title" : "openMDM 5 REST API",
+    "description" : "openMDM 5 REST API.",
+    "license" : {
+      "name" : "EPL 2.0",
+      "url" : "http://www.eclipse.org/legal/epl-2.0"
+    },
+    "contact" : {
+      "name" : "Eclipse MDM|BL",
+      "url" : "https://projects.eclipse.org/projects/technology.mdmbl"
+    }
+  },
+  "servers" : [{
+    "url": "/org.eclipse.mdm.nucleus/mdm",
+    "description": "openMDM 5 REST API"
+  }],
+  "externalDocs" : {
+    "description" : "Getting Started Guide",
+    "url" : "https://wiki.eclipse.org/images/e/e0/GettingStarted_mdmbl.pdf"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
new file mode 100644
index 0000000..edd3b62
--- /dev/null
+++ b/src/main/resources/logback.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration debug="true" scan="true">
+    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
+        <file>${com.sun.aas.instanceRoot}/logs/mdm5.log</file>
+        <append>true</append>
+        <encoder>
+            <Pattern>%date [%thread] %-5level %logger{36} - %msg%n</Pattern>
+        </encoder>
+    </appender>
+    <root>
+        <level value="INFO"/>
+        <appender-ref ref="FILE"/>
+    </root>
+</configuration>
\ No newline at end of file
diff --git a/src/main/webapp/swagger.html b/src/main/webapp/swagger.html
new file mode 100644
index 0000000..fac1f9d
--- /dev/null
+++ b/src/main/webapp/swagger.html
@@ -0,0 +1,50 @@
+<!--********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************-->
+
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta charset="UTF-8">
+    <title>openMDM 5 Swagger</title>
+    <link rel="stylesheet" type="text/css" href="webjars/swagger-ui/3.23.0/swagger-ui.css">
+</head>
+<body>
+
+<div id="swagger-ui"></div>
+
+<script src="webjars/swagger-ui/3.23.0/swagger-ui-standalone-preset.js"></script>
+<script src="webjars/swagger-ui/3.23.0/swagger-ui-bundle.js"></script>
+
+<script>
+    window.onload = function() {
+        // Build a system
+        const ui = SwaggerUIBundle({
+            url: window.location.href.replace("swagger.html", "openapi.json"),
+            dom_id: '#swagger-ui',
+            deepLinking: true,
+            presets: [
+                SwaggerUIBundle.presets.apis,
+                SwaggerUIStandalonePreset
+            ],
+            plugins: [
+                SwaggerUIBundle.plugins.DownloadUrl
+            ],
+            docExpansion: "none",
+            layout: "StandaloneLayout",
+        })
+        window.ui = ui
+    }
+</script>
+</body>
+</html>
\ No newline at end of file
